n9router 0.3.94 → 0.3.95

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 (331) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  4. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  5. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  6. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  34. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  35. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  43. package/.next/standalone/.next/server/app/_not-found.rsc +10 -10
  44. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
  45. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  46. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -5
  47. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  49. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  50. package/.next/standalone/.next/server/app/api/antigravity-tools/import/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/api/combos/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/api/internal/request-detail/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/internal/usage/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/keys/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/models/availability/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/models/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/models/test/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/pricing/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/settings/database/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/callback/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/callback.html +1 -1
  117. package/.next/standalone/.next/server/app/callback.rsc +12 -12
  118. package/.next/standalone/.next/server/app/callback.segments/_full.segment.rsc +12 -12
  119. package/.next/standalone/.next/server/app/callback.segments/_head.segment.rsc +4 -4
  120. package/.next/standalone/.next/server/app/callback.segments/_index.segment.rsc +5 -5
  121. package/.next/standalone/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  122. package/.next/standalone/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +4 -4
  123. package/.next/standalone/.next/server/app/callback.segments/callback.segment.rsc +3 -3
  124. package/.next/standalone/.next/server/app/dashboard/basic-chat.html +1 -1
  125. package/.next/standalone/.next/server/app/dashboard/basic-chat.rsc +12 -12
  126. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +3 -3
  127. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +3 -3
  128. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  129. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  130. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +12 -12
  131. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +4 -4
  132. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
  133. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  134. package/.next/standalone/.next/server/app/dashboard/cli-tools.html +1 -1
  135. package/.next/standalone/.next/server/app/dashboard/cli-tools.rsc +12 -12
  136. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +3 -3
  137. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +3 -3
  138. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  139. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  140. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +12 -12
  141. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +4 -4
  142. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
  143. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  144. package/.next/standalone/.next/server/app/dashboard/combos.html +1 -1
  145. package/.next/standalone/.next/server/app/dashboard/combos.rsc +13 -13
  146. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +4 -4
  147. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +3 -3
  148. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  149. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  150. package/.next/standalone/.next/server/app/dashboard/combos.segments/_full.segment.rsc +13 -13
  151. package/.next/standalone/.next/server/app/dashboard/combos.segments/_head.segment.rsc +4 -4
  152. package/.next/standalone/.next/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
  153. package/.next/standalone/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  154. package/.next/standalone/.next/server/app/dashboard/endpoint.html +1 -1
  155. package/.next/standalone/.next/server/app/dashboard/endpoint.rsc +12 -12
  156. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  157. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +3 -3
  158. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  159. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  160. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +12 -12
  161. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +4 -4
  162. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
  163. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/dashboard/mitm.html +1 -1
  165. package/.next/standalone/.next/server/app/dashboard/mitm.rsc +12 -12
  166. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +3 -3
  167. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +3 -3
  168. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  169. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  170. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +12 -12
  171. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +4 -4
  172. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
  173. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  174. package/.next/standalone/.next/server/app/dashboard/profile.html +1 -1
  175. package/.next/standalone/.next/server/app/dashboard/profile.rsc +13 -13
  176. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +4 -4
  177. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +3 -3
  178. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  179. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  180. package/.next/standalone/.next/server/app/dashboard/profile.segments/_full.segment.rsc +13 -13
  181. package/.next/standalone/.next/server/app/dashboard/profile.segments/_head.segment.rsc +4 -4
  182. package/.next/standalone/.next/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
  183. package/.next/standalone/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  184. package/.next/standalone/.next/server/app/dashboard/providers/new.html +1 -1
  185. package/.next/standalone/.next/server/app/dashboard/providers/new.rsc +13 -13
  186. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +4 -4
  187. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +3 -3
  188. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +3 -3
  189. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  190. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  191. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +13 -13
  192. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +4 -4
  193. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
  194. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  195. package/.next/standalone/.next/server/app/dashboard/providers.html +1 -1
  196. package/.next/standalone/.next/server/app/dashboard/providers.rsc +13 -13
  197. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +4 -4
  198. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +3 -3
  199. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  200. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  201. package/.next/standalone/.next/server/app/dashboard/providers.segments/_full.segment.rsc +13 -13
  202. package/.next/standalone/.next/server/app/dashboard/providers.segments/_head.segment.rsc +4 -4
  203. package/.next/standalone/.next/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
  204. package/.next/standalone/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  205. package/.next/standalone/.next/server/app/dashboard/proxy-pools.html +1 -1
  206. package/.next/standalone/.next/server/app/dashboard/proxy-pools.rsc +13 -13
  207. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +4 -4
  208. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +3 -3
  209. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  210. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  211. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +13 -13
  212. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +4 -4
  213. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
  214. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/dashboard/quota.html +2 -2
  216. package/.next/standalone/.next/server/app/dashboard/quota.rsc +13 -13
  217. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +4 -4
  218. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +3 -3
  219. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  220. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  221. package/.next/standalone/.next/server/app/dashboard/quota.segments/_full.segment.rsc +13 -13
  222. package/.next/standalone/.next/server/app/dashboard/quota.segments/_head.segment.rsc +4 -4
  223. package/.next/standalone/.next/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
  224. package/.next/standalone/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  225. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/dashboard/settings/pricing.html +1 -1
  228. package/.next/standalone/.next/server/app/dashboard/settings/pricing.rsc +12 -12
  229. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +12 -12
  230. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +4 -4
  231. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
  232. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  233. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +4 -4
  234. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +3 -3
  235. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +3 -3
  236. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +3 -3
  237. package/.next/standalone/.next/server/app/dashboard/translator.html +1 -1
  238. package/.next/standalone/.next/server/app/dashboard/translator.rsc +13 -13
  239. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +4 -4
  240. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +3 -3
  241. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  242. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  243. package/.next/standalone/.next/server/app/dashboard/translator.segments/_full.segment.rsc +13 -13
  244. package/.next/standalone/.next/server/app/dashboard/translator.segments/_head.segment.rsc +4 -4
  245. package/.next/standalone/.next/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
  246. package/.next/standalone/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/dashboard/usage.html +1 -1
  248. package/.next/standalone/.next/server/app/dashboard/usage.rsc +13 -13
  249. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +4 -4
  250. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +3 -3
  251. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  252. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  253. package/.next/standalone/.next/server/app/dashboard/usage.segments/_full.segment.rsc +13 -13
  254. package/.next/standalone/.next/server/app/dashboard/usage.segments/_head.segment.rsc +4 -4
  255. package/.next/standalone/.next/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
  256. package/.next/standalone/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  257. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  258. package/.next/standalone/.next/server/app/dashboard.rsc +12 -12
  259. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +3 -3
  260. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +3 -3
  261. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +4 -4
  262. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +12 -12
  263. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +4 -4
  264. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +5 -5
  265. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  266. package/.next/standalone/.next/server/app/index.html +1 -1
  267. package/.next/standalone/.next/server/app/index.rsc +10 -10
  268. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +10 -10
  270. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  271. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -5
  272. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/landing/page.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/landing.html +1 -1
  276. package/.next/standalone/.next/server/app/landing.rsc +12 -12
  277. package/.next/standalone/.next/server/app/landing.segments/_full.segment.rsc +12 -12
  278. package/.next/standalone/.next/server/app/landing.segments/_head.segment.rsc +4 -4
  279. package/.next/standalone/.next/server/app/landing.segments/_index.segment.rsc +5 -5
  280. package/.next/standalone/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +4 -4
  282. package/.next/standalone/.next/server/app/landing.segments/landing.segment.rsc +3 -3
  283. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/login.html +1 -1
  286. package/.next/standalone/.next/server/app/login.rsc +12 -12
  287. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +12 -12
  288. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +4 -4
  289. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +5 -5
  290. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  292. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +3 -3
  293. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  294. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  295. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.yvcis._.js +1 -1
  296. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0148t9m._.js +1 -1
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b802lh._.js +1 -1
  298. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kpc-o6._.js +1 -1
  299. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lc~.sk._.js +1 -1
  300. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lp_pm5._.js +1 -1
  301. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pwrfp1._.js +1 -1
  302. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uw3x8s._.js +1 -1
  303. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y.reft._.js +1 -1
  304. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y5ae.7._.js +1 -1
  305. package/.next/standalone/.next/server/chunks/_0__-aqg._.js +1 -1
  306. package/.next/standalone/.next/server/chunks/_0_ovl1h._.js +1 -1
  307. package/.next/standalone/.next/server/chunks/ssr/src_0_xhepz._.js +1 -1
  308. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  309. package/.next/standalone/.next/server/pages/404.html +1 -1
  310. package/.next/standalone/.next/server/pages/500.html +1 -1
  311. package/.next/{static/chunks/02suuzz60dp3d.js → standalone/.next/static/chunks/11q6656-lc_oz.js} +1 -1
  312. package/.next/standalone/mitm/server.js +3 -2
  313. package/.next/standalone/mitm/tokenPool.js +108 -8
  314. package/.next/standalone/package-lock.json +2 -2
  315. package/.next/standalone/package.json +1 -1
  316. package/.next/standalone/plans/tauri-app/01-scope-and-architecture.md +218 -0
  317. package/.next/standalone/plans/tauri-app/02-backend-plan.md +237 -0
  318. package/.next/standalone/plans/tauri-app/03-tauri-native-plan.md +194 -0
  319. package/.next/standalone/plans/tauri-app/04-react-ui-plan.md +155 -0
  320. package/.next/standalone/plans/tauri-app/05-delivery-phases.md +171 -0
  321. package/.next/standalone/plans/tauri-app/README.md +87 -0
  322. package/.next/standalone/src/mitm/server.js +3 -2
  323. package/.next/standalone/src/mitm/tokenPool.js +108 -8
  324. package/.next/{standalone/.next/static/chunks/02suuzz60dp3d.js → static/chunks/11q6656-lc_oz.js} +1 -1
  325. package/package.json +1 -1
  326. /package/.next/standalone/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_buildManifest.js +0 -0
  327. /package/.next/standalone/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_clientMiddlewareManifest.js +0 -0
  328. /package/.next/standalone/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_ssgManifest.js +0 -0
  329. /package/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_buildManifest.js +0 -0
  330. /package/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_clientMiddlewareManifest.js +0 -0
  331. /package/.next/static/{SBId4_Ewcg0cJ2p2zlKeg → 03mW5vaG0Fogum-tDkkOQ}/_ssgManifest.js +0 -0
@@ -0,0 +1,171 @@
1
+ # Delivery Phases
2
+
3
+ ## Phase 0: Setup
4
+
5
+ Goals:
6
+
7
+ - create app workspace structure
8
+ - choose package manager and monorepo layout
9
+ - define TypeScript, lint, and build conventions
10
+ - define target OS matrix: macOS, Windows, Linux
11
+
12
+ Tasks:
13
+
14
+ - add `apps/desktop-shell`
15
+ - add `apps/desktop-ui`
16
+ - add `apps/desktop-backend`
17
+ - add `packages/desktop-shared`
18
+ - define ports, app data path, and env conventions
19
+ - define platform support policy and supported Linux baseline
20
+
21
+ Exit criteria:
22
+
23
+ - all three apps boot locally in dev mode
24
+
25
+ ## Phase 1: Backend extraction
26
+
27
+ Goals:
28
+
29
+ - standalone local service without Next.js
30
+
31
+ Tasks:
32
+
33
+ - port `localDb`
34
+ - port `usageDb`
35
+ - add Express app and health endpoint
36
+ - port Antigravity account service
37
+ - port account import
38
+ - port usage APIs
39
+
40
+ Exit criteria:
41
+
42
+ - backend can manage accounts and serve usage data from existing files
43
+
44
+ ## Phase 2: MITM service
45
+
46
+ Goals:
47
+
48
+ - functional Antigravity interception under backend control
49
+
50
+ Tasks:
51
+
52
+ - extract MITM server and manager logic
53
+ - adapt internal usage and request detail ingestion
54
+ - preserve host/path matching logic
55
+ - preserve model alias routing for MITM if still required
56
+ - separate platform-specific cert/DNS behavior from backend-owned MITM logic
57
+
58
+ Exit criteria:
59
+
60
+ - backend can start MITM and capture Antigravity usage
61
+
62
+ ## Phase 3: Native integration
63
+
64
+ Goals:
65
+
66
+ - move privileged operations into Tauri
67
+
68
+ Tasks:
69
+
70
+ - backend process supervision
71
+ - cert trust command
72
+ - DNS enable/disable command
73
+ - secret storage integration
74
+ - health plumbing between shell and backend
75
+ - implement and verify flows on macOS, Windows, and Linux
76
+
77
+ Exit criteria:
78
+
79
+ - desktop app can control backend and OS operations from native commands
80
+ - supported OS matrix passes smoke tests
81
+
82
+ ## Phase 4: UI MVP
83
+
84
+ Goals:
85
+
86
+ - first usable desktop product
87
+
88
+ Tasks:
89
+
90
+ - build accounts page
91
+ - build MITM page
92
+ - build token swap page
93
+ - build usage page
94
+ - add loading/error/status states
95
+
96
+ Exit criteria:
97
+
98
+ - user can operate the full Antigravity MITM flow from the desktop app
99
+
100
+ ## Phase 5: Hardening
101
+
102
+ Goals:
103
+
104
+ - make the app stable enough for daily use
105
+
106
+ Tasks:
107
+
108
+ - crash recovery
109
+ - retry and restart policies
110
+ - clearer error messaging
111
+ - account pool edge-case handling
112
+ - better logs and diagnostics
113
+ - platform-specific QA and packaging fixes
114
+
115
+ Exit criteria:
116
+
117
+ - app survives common failures without manual cleanup
118
+
119
+ ## Suggested implementation order inside each phase
120
+
121
+ 1. extract minimal working path
122
+ 2. add tests for behavior already present in current app
123
+ 3. add UI affordances only after backend/native behavior is real
124
+ 4. avoid storage migration until feature parity is stable
125
+
126
+ ## Testing strategy
127
+
128
+ ### Automated
129
+
130
+ - unit tests for token pool
131
+ - unit tests for usage aggregation
132
+ - integration tests for backend APIs
133
+ - smoke tests for Tauri commands where feasible
134
+
135
+ ### Manual
136
+
137
+ - connect one account and intercept traffic
138
+ - connect multiple accounts and verify token rotation
139
+ - exhaust one account and verify cooldown behavior
140
+ - break cert/DNS state and verify UI diagnosis
141
+ - repeat the same smoke flows on macOS, Windows, and Linux
142
+
143
+ ## OS matrix
144
+
145
+ ### Required for v1
146
+
147
+ - macOS
148
+ - Windows
149
+ - Linux
150
+
151
+ ### Linux baseline
152
+
153
+ - pick one supported baseline distro for v1, preferably Ubuntu LTS
154
+ - document other distros as best effort until explicitly validated
155
+
156
+ ## Main project risks
157
+
158
+ - OS privilege behavior
159
+ - port 443 conflicts
160
+ - cert trust differences by OS
161
+ - race conditions in file-backed persistence
162
+ - accidental coupling to old Next.js imports
163
+
164
+ ## Completion checklist
165
+
166
+ - backend no longer depends on Next.js
167
+ - desktop shell controls backend lifecycle
168
+ - privileged actions no longer depend on React or browser APIs
169
+ - Antigravity MITM works on supported OS targets
170
+ - token swap and usage analyst are visible and operable in the desktop UI
171
+ - macOS, Windows, and Linux each have validated first-run and normal-run flows
@@ -0,0 +1,87 @@
1
+ # Tauri App Implementation Plan
2
+
3
+ This plan defines the desktop implementation target for a focused Antigravity tool, not a full 9Router port.
4
+
5
+ Target desktop OS support for v1:
6
+
7
+ - macOS
8
+ - Windows
9
+ - Linux
10
+
11
+ ## Product goal
12
+
13
+ Build a desktop app with:
14
+
15
+ - Antigravity account management
16
+ - Antigravity MITM proxy
17
+ - DNS/hosts toggling for Antigravity domains
18
+ - multi-account token swap for Antigravity
19
+ - usage analytics and request details for MITM traffic
20
+
21
+ Out of scope for v1:
22
+
23
+ - `/v1/chat/completions`
24
+ - OpenAI-compatible routing
25
+ - multi-provider routing gateway
26
+ - combo/fallback model router
27
+ - cloud worker and tunnel features
28
+ - non-Antigravity MITM tools
29
+
30
+ ## Deliverables
31
+
32
+ - `apps/desktop-shell`: Tauri app shell and native commands
33
+ - `apps/desktop-ui`: React desktop UI
34
+ - `apps/desktop-backend`: local Express service
35
+ - `packages/desktop-shared`: shared types, constants, API contracts
36
+ - migration docs and test plan
37
+
38
+ ## Recommended architecture
39
+
40
+ - Tauri Rust:
41
+ - app lifecycle
42
+ - secure storage
43
+ - privilege escalation boundary
44
+ - cert trust/untrust
45
+ - DNS/hosts mutation
46
+ - process supervision for backend/MITM
47
+ - React UI:
48
+ - accounts screen
49
+ - MITM/DNS screen
50
+ - token swap screen
51
+ - usage and request details screens
52
+ - Express backend:
53
+ - Antigravity OAuth/import
54
+ - persistence
55
+ - token pool logic
56
+ - MITM HTTPS server
57
+ - usage ingestion and query APIs
58
+
59
+ ## Why this split
60
+
61
+ The hardest domain logic already exists in JS and should be preserved first:
62
+
63
+ - MITM server: `src/mitm/server.js`
64
+ - token pool: `src/mitm/tokenPool.js`
65
+ - usage capture: `src/mitm/usageTracker.js`
66
+ - Antigravity OAuth: `src/lib/oauth/services/antigravity.js`
67
+ - local persistence: `src/lib/localDb.js`, `src/lib/usageDb.js`
68
+
69
+ The native-only work is OS integration, not request routing. Rewriting MITM/token swap in Rust first would add risk without product value.
70
+
71
+ ## Plan set
72
+
73
+ - [01-scope-and-architecture.md](/Users/cuongquach/projects/vibe/n9router/plans/tauri-app/01-scope-and-architecture.md)
74
+ - [02-backend-plan.md](/Users/cuongquach/projects/vibe/n9router/plans/tauri-app/02-backend-plan.md)
75
+ - [03-tauri-native-plan.md](/Users/cuongquach/projects/vibe/n9router/plans/tauri-app/03-tauri-native-plan.md)
76
+ - [04-react-ui-plan.md](/Users/cuongquach/projects/vibe/n9router/plans/tauri-app/04-react-ui-plan.md)
77
+ - [05-delivery-phases.md](/Users/cuongquach/projects/vibe/n9router/plans/tauri-app/05-delivery-phases.md)
78
+
79
+ ## Success criteria
80
+
81
+ - user can connect one or more Antigravity accounts
82
+ - app can trust local cert and toggle Antigravity DNS entries
83
+ - MITM can intercept Antigravity traffic reliably
84
+ - token swap rotates accounts and handles quota/auth cooldowns
85
+ - usage screens show recent requests, token usage, and request details
86
+ - desktop app can be packaged and started without Next.js
87
+ - the same core flows work on macOS, Windows, and Linux with platform-appropriate elevation and diagnostics
@@ -8,7 +8,7 @@ const { TARGET_HOSTS, URL_PATTERNS, getToolForHost } = require("./config");
8
8
  const { DATA_DIR, MITM_DIR } = require("./paths");
9
9
  const { isTokenSwapEnabled, getAllActiveConnections, triggerRefreshIfNeeded,
10
10
  forceRefreshConnection, setCooldown, setAuthCooldown, setModelCooldown, getTokenSwapStrategy,
11
- parseQuotaCooldown, markAccountUsed, getConnectionLabel } = require("./tokenPool");
11
+ parseQuotaCooldown, markAccountUsed, getConnectionLabel, getTokenSwapAvailabilitySummary } = require("./tokenPool");
12
12
  const { getCertForDomain } = require("./cert/generate");
13
13
  const { buildInputOnlyRequestDetail, createTokenSwapUsageObserver, generateDetailId } = require("./usageTracker");
14
14
 
@@ -411,7 +411,8 @@ const server = https.createServer(sslOptions, async (req, res) => {
411
411
  const strategy = getTokenSwapStrategy();
412
412
  const poolConns = getAllActiveConnections(swapProvider, model);
413
413
  if (poolConns.length > 0) {
414
- log(`🔑 [${tool}] token-swap: ${poolConns.length} account(s) available (strategy=${strategy}${model ? `, model=${model}` : ""})`);
414
+ const availability = getTokenSwapAvailabilitySummary(swapProvider, model);
415
+ log(`🔑 [${tool}] token-swap: ${availability.summaryText} (strategy=${strategy}${model ? `, model=${model}` : ""})`);
415
416
  const handled = await tokenSwapForward(req, res, bodyBuffer, poolConns, model, strategy, swapProvider, bodyCollectStart);
416
417
  if (handled) return;
417
418
  log(`⚠️ [${tool}] token-swap: all accounts exhausted, falling through to original token`);
@@ -17,7 +17,8 @@ const DEFAULT_COOLDOWN_MS = 5 * 60 * 1000;
17
17
  const DEFAULT_AUTH_COOLDOWN_MS = 10 * 60 * 1000;
18
18
 
19
19
  // ── In-memory state ──────────────────────────────────────────
20
- const cooldownMap = {}; // { [connectionId]: expiresTimestamp }
20
+ const cooldownMap = {}; // { [connectionId]: expiresTimestamp } quota/general cooldown
21
+ const authCooldownMap = {}; // { [connectionId]: expiresTimestamp } invalid_token/auth cooldown
21
22
  const modelCooldownMap = {}; // { [connectionId]: { [model]: expiresTimestamp } }
22
23
  const rrState = {}; // { [provider]: roundRobinIndex }
23
24
 
@@ -31,17 +32,31 @@ function setCooldown(connId, durationMs) {
31
32
 
32
33
  function setAuthCooldown(connId, durationMs) {
33
34
  const ms = durationMs || DEFAULT_AUTH_COOLDOWN_MS;
34
- cooldownMap[connId] = Date.now() + ms;
35
+ authCooldownMap[connId] = Date.now() + ms;
35
36
  log(`🔒 [token-pool] auth-cooldown: ${connId.slice(0, 8)}… for ${Math.ceil(ms / 60000)}m`);
36
37
  }
37
38
 
38
- function isInCooldown(connId) {
39
- if (!cooldownMap[connId]) return false;
40
- if (Date.now() > cooldownMap[connId]) {
41
- delete cooldownMap[connId];
42
- return false;
39
+ function getMapExpiry(map, connId) {
40
+ if (!map[connId]) return 0;
41
+ if (Date.now() > map[connId]) {
42
+ delete map[connId];
43
+ return 0;
43
44
  }
44
- return true;
45
+ return map[connId];
46
+ }
47
+
48
+ function getCooldownState(connId) {
49
+ const authExpiry = getMapExpiry(authCooldownMap, connId);
50
+ if (authExpiry) return { type: "auth", expiresAt: authExpiry };
51
+
52
+ const quotaExpiry = getMapExpiry(cooldownMap, connId);
53
+ if (quotaExpiry) return { type: "quota", expiresAt: quotaExpiry };
54
+
55
+ return null;
56
+ }
57
+
58
+ function isInCooldown(connId) {
59
+ return !!getCooldownState(connId);
45
60
  }
46
61
 
47
62
  // ── Per-model cooldown management ────────────────────────────
@@ -117,6 +132,90 @@ function getActiveConnections(provider) {
117
132
  } catch { return []; }
118
133
  }
119
134
 
135
+ function getTokenSwapAvailabilitySummary(provider, model) {
136
+ try {
137
+ if (!fs.existsSync(DB_FILE)) {
138
+ return {
139
+ total: 0,
140
+ eligible: 0,
141
+ skipped: 0,
142
+ reasons: {},
143
+ summaryText: "0/0 account(s) eligible"
144
+ };
145
+ }
146
+
147
+ const db = JSON.parse(fs.readFileSync(DB_FILE, "utf-8"));
148
+ const connections = (db.providerConnections || []).filter(c => c.provider === provider);
149
+ const now = Date.now();
150
+ const strategy = getTokenSwapStrategy();
151
+ const reasons = {
152
+ inactive: 0,
153
+ noToken: 0,
154
+ expiredNoRefresh: 0,
155
+ quotaCooldown: 0,
156
+ authCooldown: 0,
157
+ modelCooldown: 0,
158
+ };
159
+
160
+ let eligible = 0;
161
+
162
+ for (const connection of connections) {
163
+ if (connection.isActive === false) {
164
+ reasons.inactive += 1;
165
+ continue;
166
+ }
167
+ if (!connection.accessToken) {
168
+ reasons.noToken += 1;
169
+ continue;
170
+ }
171
+ if (connection.expiresAt && new Date(connection.expiresAt).getTime() < now && !connection.refreshToken) {
172
+ reasons.expiredNoRefresh += 1;
173
+ continue;
174
+ }
175
+
176
+ const cooldownState = getCooldownState(connection.id);
177
+ if (cooldownState?.type === "auth") {
178
+ reasons.authCooldown += 1;
179
+ continue;
180
+ }
181
+ if (cooldownState?.type === "quota") {
182
+ reasons.quotaCooldown += 1;
183
+ continue;
184
+ }
185
+
186
+ if (strategy === "sticky" && model && isModelExhausted(connection.id, model)) {
187
+ reasons.modelCooldown += 1;
188
+ continue;
189
+ }
190
+
191
+ eligible += 1;
192
+ }
193
+
194
+ const skipped = connections.length - eligible;
195
+ const reasonParts = [];
196
+ if (reasons.quotaCooldown) reasonParts.push(`${reasons.quotaCooldown} quota cooldown`);
197
+ if (reasons.authCooldown) reasonParts.push(`${reasons.authCooldown} auth cooldown`);
198
+ if (reasons.modelCooldown) reasonParts.push(`${reasons.modelCooldown} model cooldown`);
199
+ if (reasons.inactive) reasonParts.push(`${reasons.inactive} inactive`);
200
+ if (reasons.noToken) reasonParts.push(`${reasons.noToken} missing token`);
201
+ if (reasons.expiredNoRefresh) reasonParts.push(`${reasons.expiredNoRefresh} expired-no-refresh`);
202
+
203
+ const summaryText = skipped > 0
204
+ ? `${eligible}/${connections.length} account(s) eligible, skipped ${skipped} (${reasonParts.join(", ")})`
205
+ : `${eligible}/${connections.length} account(s) eligible`;
206
+
207
+ return { total: connections.length, eligible, skipped, reasons, summaryText };
208
+ } catch {
209
+ return {
210
+ total: 0,
211
+ eligible: 0,
212
+ skipped: 0,
213
+ reasons: {},
214
+ summaryText: "0/0 account(s) eligible"
215
+ };
216
+ }
217
+ }
218
+
120
219
  function getConnectionById(connId) {
121
220
  try {
122
221
  if (!fs.existsSync(DB_FILE)) return null;
@@ -377,4 +476,5 @@ module.exports = {
377
476
  markAccountUsed,
378
477
  getConnectionLabel,
379
478
  maskEmail,
479
+ getTokenSwapAvailabilitySummary,
380
480
  };
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,i,a)=>{i.exports=e.r(76562)},85035,e=>{"use strict";let i={kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationNotice:"Google has tightened Gemini CLI abuse detection and restricted Pro models to paid accounts (Mar 25, 2026). Using this provider may violate ToS and risk account bans."},iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"}},a={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After $10 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"}},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim",notice:{text:"Free access for NVIDIA Developer Program members (prototyping & testing).",apiKeyUrl:"https://build.nvidia.com/settings/api-keys"}},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com",notice:{text:"Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo · Max $100/mo.",apiKeyUrl:"https://ollama.com/settings/keys"}},vertex:{id:"vertex",alias:"vx",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VX",website:"https://cloud.google.com/vertex-ai",notice:{text:"New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.",apiKeyUrl:"https://console.cloud.google.com/iam-admin/serviceaccounts"}}},t={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B",deprecated:!0,deprecationNotice:"Antigravity has tightened abuse detection and restricted model access. Using this provider may violate ToS and risk account bans."},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},n={glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://www.cerebras.ai"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"vertex-partner":{id:"vertex-partner",alias:"vxp",name:"Vertex Partner",icon:"cloud",color:"#34A853",textIcon:"VP",website:"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models"}},o="openai-compatible-",r="anthropic-compatible-",s={...i,...a,...t,...n};Object.values(s).reduce((e,i)=>(e[i.alias]=i.id,e),{}),Object.values(s).reduce((e,i)=>(e[i.id]=i.alias,e),{}),e.s(["AI_PROVIDERS",0,s,"ANTHROPIC_COMPATIBLE_PREFIX",0,r,"APIKEY_PROVIDERS",0,n,"AUTH_METHODS",0,{oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}},"FREE_PROVIDERS",0,i,"FREE_TIER_PROVIDERS",0,a,"OAUTH_PROVIDERS",0,t,"OPENAI_COMPATIBLE_PREFIX",0,o,"USAGE_SUPPORTED_PROVIDERS",0,["claude","antigravity","kiro","github","codex","kimi-coding"],"getProviderAlias",0,function(e){let i=s[e];return i?.alias||e},"getProviderByAlias",0,function(e){for(let i of Object.values(s))if(i.alias===e||i.id===e)return i;return null},"isAnthropicCompatibleProvider",0,function(e){return"string"==typeof e&&e.startsWith(r)},"isOpenAICompatibleProvider",0,function(e){return"string"==typeof e&&e.startsWith(o)}])},45425,(e,i,a)=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="/ROOT/node_modules/next/dist/compiled/os-browserify/"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},i.exports=t},55937,e=>{"use strict";var i=e.i(47167),a=e.i(45425);let t={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},n="https://api.kimi.com/coding/v1/messages",o={claude:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",retry:{429:0},headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,a.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,a.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,a.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";case"freebsd":return"FreeBSD";default:return`Other::${(0,a.platform)()}`}}(),"X-Stainless-Timeout":"600"},clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://api.anthropic.com/v1/oauth/token"},gemini:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},"gemini-cli":{baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",format:"gemini-cli",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},codex:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",headers:{originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},clientId:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecret:"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",tokenUrl:"https://auth.openai.com/oauth/token"},qwen:{baseUrl:"https://portal.qwen.ai/v1/chat/completions",format:"openai",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},clientId:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},iflow:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",format:"openai",headers:{"User-Agent":"iFlow-Cli"},clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},qoder:{baseUrl:"https://api.qoder.com/v1/chat/completions",format:"openai",headers:{"User-Agent":"Qoder-Cli"},clientId:i.default.env.QODER_OAUTH_CLIENT_ID||"10009311001",clientSecret:i.default.env.QODER_OAUTH_CLIENT_SECRET||"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://api.qoder.com/oauth/token",authUrl:"https://qoder.com/oauth/authorize"},antigravity:{baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com"],format:"antigravity",headers:{"User-Agent":`antigravity/1.107.0 ${(0,a.platform)()}/${(0,a.arch)()}`},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},openrouter:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},openai:{baseUrl:"https://api.openai.com/v1/chat/completions",format:"openai"},glm:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",headers:{...t}},"glm-cn":{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",format:"openai",headers:{}},kimi:{baseUrl:n,format:"claude",headers:{...t}},minimax:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",headers:{...t}},"minimax-cn":{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",headers:{...t}},alicode:{baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"alicode-intl":{baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},github:{baseUrl:"https://api.githubcopilot.com/chat/completions",responsesUrl:"https://api.githubcopilot.com/responses",format:"openai",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},clientId:"Iv1.b507a08c87ecfe98"},kiro:{baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",format:"kiro",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},cursor:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3"},"kimi-coding":{baseUrl:n,format:"claude",headers:{...t},clientId:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token"},kilocode:{baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",format:"openai",headers:{}},opencode:{baseUrl:"http://localhost:4096/v1/chat/completions",format:"openai",headers:{}},cline:{baseUrl:"https://api.cline.bot/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},nvidia:{baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",format:"openai"},anthropic:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...t}},deepseek:{baseUrl:"https://api.deepseek.com/chat/completions",format:"openai"},groq:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",format:"openai"},xai:{baseUrl:"https://api.x.ai/v1/chat/completions",format:"openai"},mistral:{baseUrl:"https://api.mistral.ai/v1/chat/completions",format:"openai"},perplexity:{baseUrl:"https://api.perplexity.ai/chat/completions",format:"openai"},together:{baseUrl:"https://api.together.xyz/v1/chat/completions",format:"openai"},fireworks:{baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",format:"openai"},cerebras:{baseUrl:"https://api.cerebras.ai/v1/chat/completions",format:"openai"},cohere:{baseUrl:"https://api.cohere.ai/v1/chat/completions",format:"openai"},nebius:{baseUrl:"https://api.studio.nebius.ai/v1/chat/completions",format:"openai"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1/chat/completions",format:"openai"},hyperbolic:{baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",format:"openai"},deepgram:{baseUrl:"https://api.deepgram.com/v1/listen",format:"openai"},assemblyai:{baseUrl:"https://api.assemblyai.com/v1/audio/transcriptions",format:"openai"},nanobanana:{baseUrl:"https://api.nanobananaapi.ai/v1/chat/completions",format:"openai"},chutes:{baseUrl:"https://llm.chutes.ai/v1/chat/completions",format:"openai"},ollama:{baseUrl:"https://ollama.com/api/chat",format:"ollama"},"ollama-local":{baseUrl:"http://localhost:11434/api/chat",format:"ollama"},vertex:{baseUrl:"https://aiplatform.googleapis.com",format:"vertex"},"vertex-partner":{baseUrl:"https://aiplatform.googleapis.com",format:"openai"},gitlab:{baseUrl:"https://gitlab.com/api/v4/chat/completions",format:"openai"},codebuddy:{baseUrl:"https://copilot.tencent.com/v1/chat/completions",format:"openai"}},r={cc:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}],gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 Coder Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],ag:[{id:"gemini-3.1-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],gh:[{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2"},{id:"deepseek-3.1",name:"DeepSeek 3.1"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],kmc:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],kc:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek/deepseek-reasoner",name:"DeepSeek Reasoner"}],cl:[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6"},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"openai/gpt-5.4",name:"GPT-5.4"},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"google/gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"kwaipilot/kat-coder-pro",name:"KAT Coder Pro"}],openai:[{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"o3",name:"O3"},{id:"o3-mini",name:"O3 Mini"},{id:"o3-pro",name:"O3 Pro"},{id:"o4-mini",name:"O4 Mini"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large",type:"embedding"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small",type:"embedding"},{id:"text-embedding-ada-002",name:"Text Embedding Ada 002",type:"embedding"},{id:"tts-1",name:"TTS-1",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite"},{id:"gemini-embedding-2-preview",name:"Gemini Embedding 2 Preview",type:"embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",type:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",type:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",type:"embedding"}],openrouter:[],glm:[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],"minimax-cn":[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],alicode:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"alicode-intl":[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],deepseek:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],groq:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}],xai:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}],mistral:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}],perplexity:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}],together:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}],fireworks:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}],cerebras:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}],cohere:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}],nvidia:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"}],nebius:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}],siliconflow:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}],hyperbolic:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}],ollama:[{id:"gpt-oss:120b",name:"GPT OSS 120B"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"qwen3.5",name:"Qwen3.5"}],vertex:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"}],"vertex-partner":[{id:"deepseek-ai/deepseek-v3.2-maas",name:"DeepSeek V3.2 (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-thinking-maas",name:"Qwen3 Next 80B Thinking (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-instruct-maas",name:"Qwen3 Next 80B Instruct (Vertex)"},{id:"zai-org/glm-5-maas",name:"GLM-5 (Vertex)"}]},s={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu","kimi-coding":"kmc",kilocode:"kc",cline:"cl",vertex:"vertex","vertex-partner":"vertex-partner"},m=Object.fromEntries(Object.keys(o).map(e=>[e,s[e]||e]));e.s(["PROVIDER_ID_TO_ALIAS",0,m,"PROVIDER_MODELS",0,r,"getModelsByProviderId",0,function(e){return r[m[e]||e]||[]}],55937)},4565,e=>{"use strict";var i=e.i(55937);Object.entries(e.i(85035).AI_PROVIDERS).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(i.PROVIDER_MODELS).flatMap(([e,i])=>i.map(i=>({provider:e,model:i.id,name:i.name}))),e.s([])},43616,e=>{"use strict";e.i(85035),e.i(4565),e.s(["APP_CONFIG",0,{name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.94"},"CONSOLE_LOG_CONFIG",0,{maxLines:200,pollIntervalMs:1e3},"THEME_CONFIG",0,{storageKey:"theme",defaultTheme:"system"}],43616)},49778,68834,e=>{"use strict";let i,a;var t=e.i(71645);let n=e=>{let i,a=new Set,t=(e,t)=>{let n="function"==typeof e?e(i):e;if(!Object.is(n,i)){let e=i;i=(null!=t?t:"object"!=typeof n||null===n)?n:Object.assign({},i,n),a.forEach(a=>a(i,e))}},n=()=>i,o={setState:t,getState:n,getInitialState:()=>r,subscribe:e=>(a.add(e),()=>a.delete(e))},r=i=e(t,n,o);return o},o=e=>{let i=e?n(e):n,a=e=>(function(e,i=e=>e){let a=t.default.useSyncExternalStore(e.subscribe,t.default.useCallback(()=>i(e.getState()),[e,i]),t.default.useCallback(()=>i(e.getInitialState()),[e,i]));return t.default.useDebugValue(a),a})(i,e);return Object.assign(a,i),a},r=e=>e?o(e):o;e.s(["create",0,r],68834);let s=e=>i=>{try{let a=e(i);if(a instanceof Promise)return a;return{then:e=>s(e)(a),catch(e){return this}}}catch(e){return{then(e){return this},catch:i=>s(i)(e)}}};var m=e.i(43616);let l=r((i=(e,i)=>({theme:m.THEME_CONFIG.defaultTheme,setTheme:i=>{e({theme:i}),d(i)},toggleTheme:()=>{let a="dark"===i().theme?"light":"dark";e({theme:a}),d(a)},initTheme:()=>{d(i().theme)}}),a={name:m.THEME_CONFIG.storageKey},(e,t,n)=>{let o,r={storage:function(e){let i;try{i=e()}catch(e){return}return{getItem:e=>{var a;let t=e=>null===e?null:JSON.parse(e,void 0),n=null!=(a=i.getItem(e))?a:null;return n instanceof Promise?n.then(t):t(n)},setItem:(e,a)=>i.setItem(e,JSON.stringify(a,void 0)),removeItem:e=>i.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,i)=>({...i,...e}),...a},m=!1,l=0,d=new Set,c=new Set,p=r.storage;if(!p)return i((...i)=>{console.warn(`[zustand persist middleware] Unable to update item '${r.name}', the given storage is currently unavailable.`),e(...i)},t,n);let u=()=>{let e=r.partialize({...t()});return p.setItem(r.name,{state:e,version:r.version})},h=n.setState;n.setState=(e,i)=>(h(e,i),u());let g=i((...i)=>(e(...i),u()),t,n);n.getInitialState=()=>g;let f=()=>{var i,a;if(!p)return;let n=++l;m=!1,d.forEach(e=>{var i;return e(null!=(i=t())?i:g)});let h=(null==(a=r.onRehydrateStorage)?void 0:a.call(r,null!=(i=t())?i:g))||void 0;return s(p.getItem.bind(p))(r.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===r.version)return[!1,e.state];else{if(r.migrate){let i=r.migrate(e.state,e.version);return i instanceof Promise?i.then(e=>[!0,e]):[!0,i]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(i=>{var a;if(n!==l)return;let[s,m]=i;if(e(o=r.merge(m,null!=(a=t())?a:g),!0),s)return u()}).then(()=>{n===l&&(null==h||h(t(),void 0),o=t(),m=!0,c.forEach(e=>e(o)))}).catch(e=>{n===l&&(null==h||h(void 0,e))})};return n.persist={setOptions:e=>{r={...r,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(r.name)},getOptions:()=>r,rehydrate:()=>f(),hasHydrated:()=>m,onHydrate:e=>(d.add(e),()=>{d.delete(e)}),onFinishHydration:e=>(c.add(e),()=>{c.delete(e)})},r.skipHydration||f(),o||g}));function d(e){let i=document.documentElement,a=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?a:e)?i.classList.add("dark"):i.classList.remove("dark")}e.s(["default",0,l],49778)},35745,e=>{"use strict";var i=e.i(43476),a=e.i(71645),t=e.i(49778);e.s(["ThemeProvider",0,function({children:e}){let{initTheme:n}=(0,t.default)();return(0,a.useEffect)(()=>{n()},[n]),(0,i.jsx)(i.Fragment,{children:e})}])},5943,76969,e=>{"use strict";let i="locale";function a(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":"en"}e.s(["DEFAULT_LOCALE",0,"en","LOCALES",0,["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no"],"LOCALE_COOKIE",0,i,"normalizeLocale",0,a],76969);let t={},n="en",o=[];function r(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i}=`));return a(e?decodeURIComponent(e.split("=")[1]):"en")}async function s(e){if("en"===e){t={};return}try{let i=await fetch(`/i18n/literals/${e}.json`);t=await i.json()}catch(e){console.error("Failed to load translations:",e),t={}}}function m(e){if(!e||"string"!=typeof e)return e;let i=e.trim();return i&&"en"!==n&&t[i]||e}function l(e){if(!e.nodeValue||!e.nodeValue.trim())return;let i=e.parentElement;if(!i)return;let a=i;for(;a;){if(a.hasAttribute&&a.hasAttribute("data-i18n-skip"))return;a=a.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(i.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let t=m(e._originalText);t!==e.nodeValue&&(e.nodeValue=t)}function d(e){let i;if(!e)return;let a=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),t=[];for(;i=a.nextNode();)t.push(i);t.forEach(l)}async function c(){n=r(),await s(n),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&l(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function p(){n=r(),await s(n),o.forEach(e=>e()),d(document.body)}e.s(["initRuntimeI18n",0,c,"reloadTranslations",0,p,"translate",0,m],5943)}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,i,a)=>{i.exports=e.r(76562)},85035,e=>{"use strict";let i={kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4",deprecated:!0,deprecationNotice:"Google has tightened Gemini CLI abuse detection and restricted Pro models to paid accounts (Mar 25, 2026). Using this provider may violate ToS and risk account bans."},iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"}},a={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After $10 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"}},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim",notice:{text:"Free access for NVIDIA Developer Program members (prototyping & testing).",apiKeyUrl:"https://build.nvidia.com/settings/api-keys"}},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com",notice:{text:"Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo · Max $100/mo.",apiKeyUrl:"https://ollama.com/settings/keys"}},vertex:{id:"vertex",alias:"vx",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VX",website:"https://cloud.google.com/vertex-ai",notice:{text:"New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.",apiKeyUrl:"https://console.cloud.google.com/iam-admin/serviceaccounts"}}},t={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B",deprecated:!0,deprecationNotice:"Antigravity has tightened abuse detection and restricted model access. Using this provider may violate ToS and risk account bans."},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},n={glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://www.cerebras.ai"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"vertex-partner":{id:"vertex-partner",alias:"vxp",name:"Vertex Partner",icon:"cloud",color:"#34A853",textIcon:"VP",website:"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models"}},o="openai-compatible-",r="anthropic-compatible-",s={...i,...a,...t,...n};Object.values(s).reduce((e,i)=>(e[i.alias]=i.id,e),{}),Object.values(s).reduce((e,i)=>(e[i.id]=i.alias,e),{}),e.s(["AI_PROVIDERS",0,s,"ANTHROPIC_COMPATIBLE_PREFIX",0,r,"APIKEY_PROVIDERS",0,n,"AUTH_METHODS",0,{oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}},"FREE_PROVIDERS",0,i,"FREE_TIER_PROVIDERS",0,a,"OAUTH_PROVIDERS",0,t,"OPENAI_COMPATIBLE_PREFIX",0,o,"USAGE_SUPPORTED_PROVIDERS",0,["claude","antigravity","kiro","github","codex","kimi-coding"],"getProviderAlias",0,function(e){let i=s[e];return i?.alias||e},"getProviderByAlias",0,function(e){for(let i of Object.values(s))if(i.alias===e||i.id===e)return i;return null},"isAnthropicCompatibleProvider",0,function(e){return"string"==typeof e&&e.startsWith(r)},"isOpenAICompatibleProvider",0,function(e){return"string"==typeof e&&e.startsWith(o)}])},45425,(e,i,a)=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="/ROOT/node_modules/next/dist/compiled/os-browserify/"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},i.exports=t},55937,e=>{"use strict";var i=e.i(47167),a=e.i(45425);let t={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},n="https://api.kimi.com/coding/v1/messages",o={claude:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",retry:{429:0},headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,a.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,a.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,a.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";case"freebsd":return"FreeBSD";default:return`Other::${(0,a.platform)()}`}}(),"X-Stainless-Timeout":"600"},clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://api.anthropic.com/v1/oauth/token"},gemini:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},"gemini-cli":{baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",format:"gemini-cli",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},codex:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",headers:{originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},clientId:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecret:"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",tokenUrl:"https://auth.openai.com/oauth/token"},qwen:{baseUrl:"https://portal.qwen.ai/v1/chat/completions",format:"openai",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},clientId:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},iflow:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",format:"openai",headers:{"User-Agent":"iFlow-Cli"},clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},qoder:{baseUrl:"https://api.qoder.com/v1/chat/completions",format:"openai",headers:{"User-Agent":"Qoder-Cli"},clientId:i.default.env.QODER_OAUTH_CLIENT_ID||"10009311001",clientSecret:i.default.env.QODER_OAUTH_CLIENT_SECRET||"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://api.qoder.com/oauth/token",authUrl:"https://qoder.com/oauth/authorize"},antigravity:{baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://daily-cloudcode-pa.sandbox.googleapis.com"],format:"antigravity",headers:{"User-Agent":`antigravity/1.107.0 ${(0,a.platform)()}/${(0,a.arch)()}`},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},openrouter:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},openai:{baseUrl:"https://api.openai.com/v1/chat/completions",format:"openai"},glm:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",headers:{...t}},"glm-cn":{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",format:"openai",headers:{}},kimi:{baseUrl:n,format:"claude",headers:{...t}},minimax:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",headers:{...t}},"minimax-cn":{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",headers:{...t}},alicode:{baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"alicode-intl":{baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},github:{baseUrl:"https://api.githubcopilot.com/chat/completions",responsesUrl:"https://api.githubcopilot.com/responses",format:"openai",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"},clientId:"Iv1.b507a08c87ecfe98"},kiro:{baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",format:"kiro",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},cursor:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3"},"kimi-coding":{baseUrl:n,format:"claude",headers:{...t},clientId:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token"},kilocode:{baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",format:"openai",headers:{}},opencode:{baseUrl:"http://localhost:4096/v1/chat/completions",format:"openai",headers:{}},cline:{baseUrl:"https://api.cline.bot/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},nvidia:{baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",format:"openai"},anthropic:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...t}},deepseek:{baseUrl:"https://api.deepseek.com/chat/completions",format:"openai"},groq:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",format:"openai"},xai:{baseUrl:"https://api.x.ai/v1/chat/completions",format:"openai"},mistral:{baseUrl:"https://api.mistral.ai/v1/chat/completions",format:"openai"},perplexity:{baseUrl:"https://api.perplexity.ai/chat/completions",format:"openai"},together:{baseUrl:"https://api.together.xyz/v1/chat/completions",format:"openai"},fireworks:{baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",format:"openai"},cerebras:{baseUrl:"https://api.cerebras.ai/v1/chat/completions",format:"openai"},cohere:{baseUrl:"https://api.cohere.ai/v1/chat/completions",format:"openai"},nebius:{baseUrl:"https://api.studio.nebius.ai/v1/chat/completions",format:"openai"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1/chat/completions",format:"openai"},hyperbolic:{baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",format:"openai"},deepgram:{baseUrl:"https://api.deepgram.com/v1/listen",format:"openai"},assemblyai:{baseUrl:"https://api.assemblyai.com/v1/audio/transcriptions",format:"openai"},nanobanana:{baseUrl:"https://api.nanobananaapi.ai/v1/chat/completions",format:"openai"},chutes:{baseUrl:"https://llm.chutes.ai/v1/chat/completions",format:"openai"},ollama:{baseUrl:"https://ollama.com/api/chat",format:"ollama"},"ollama-local":{baseUrl:"http://localhost:11434/api/chat",format:"ollama"},vertex:{baseUrl:"https://aiplatform.googleapis.com",format:"vertex"},"vertex-partner":{baseUrl:"https://aiplatform.googleapis.com",format:"openai"},gitlab:{baseUrl:"https://gitlab.com/api/v4/chat/completions",format:"openai"},codebuddy:{baseUrl:"https://copilot.tencent.com/v1/chat/completions",format:"openai"}},r={cc:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}],gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 Coder Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],ag:[{id:"gemini-3.1-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],gh:[{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2"},{id:"deepseek-3.1",name:"DeepSeek 3.1"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],kmc:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],kc:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek/deepseek-reasoner",name:"DeepSeek Reasoner"}],cl:[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6"},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"openai/gpt-5.4",name:"GPT-5.4"},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"google/gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"kwaipilot/kat-coder-pro",name:"KAT Coder Pro"}],openai:[{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"o3",name:"O3"},{id:"o3-mini",name:"O3 Mini"},{id:"o3-pro",name:"O3 Pro"},{id:"o4-mini",name:"O4 Mini"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large",type:"embedding"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small",type:"embedding"},{id:"text-embedding-ada-002",name:"Text Embedding Ada 002",type:"embedding"},{id:"tts-1",name:"TTS-1",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash"},{id:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite"},{id:"gemini-embedding-2-preview",name:"Gemini Embedding 2 Preview",type:"embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",type:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",type:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",type:"embedding"}],openrouter:[],glm:[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],"minimax-cn":[{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],alicode:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"alicode-intl":[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],deepseek:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],groq:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}],xai:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}],mistral:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}],perplexity:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}],together:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}],fireworks:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}],cerebras:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}],cohere:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}],nvidia:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"}],nebius:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}],siliconflow:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}],hyperbolic:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}],ollama:[{id:"gpt-oss:120b",name:"GPT OSS 120B"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"qwen3.5",name:"Qwen3.5"}],vertex:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"}],"vertex-partner":[{id:"deepseek-ai/deepseek-v3.2-maas",name:"DeepSeek V3.2 (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-thinking-maas",name:"Qwen3 Next 80B Thinking (Vertex)"},{id:"qwen/qwen3-next-80b-a3b-instruct-maas",name:"Qwen3 Next 80B Instruct (Vertex)"},{id:"zai-org/glm-5-maas",name:"GLM-5 (Vertex)"}]},s={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu","kimi-coding":"kmc",kilocode:"kc",cline:"cl",vertex:"vertex","vertex-partner":"vertex-partner"},m=Object.fromEntries(Object.keys(o).map(e=>[e,s[e]||e]));e.s(["PROVIDER_ID_TO_ALIAS",0,m,"PROVIDER_MODELS",0,r,"getModelsByProviderId",0,function(e){return r[m[e]||e]||[]}],55937)},4565,e=>{"use strict";var i=e.i(55937);Object.entries(e.i(85035).AI_PROVIDERS).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(i.PROVIDER_MODELS).flatMap(([e,i])=>i.map(i=>({provider:e,model:i.id,name:i.name}))),e.s([])},43616,e=>{"use strict";e.i(85035),e.i(4565),e.s(["APP_CONFIG",0,{name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.3.95"},"CONSOLE_LOG_CONFIG",0,{maxLines:200,pollIntervalMs:1e3},"THEME_CONFIG",0,{storageKey:"theme",defaultTheme:"system"}],43616)},49778,68834,e=>{"use strict";let i,a;var t=e.i(71645);let n=e=>{let i,a=new Set,t=(e,t)=>{let n="function"==typeof e?e(i):e;if(!Object.is(n,i)){let e=i;i=(null!=t?t:"object"!=typeof n||null===n)?n:Object.assign({},i,n),a.forEach(a=>a(i,e))}},n=()=>i,o={setState:t,getState:n,getInitialState:()=>r,subscribe:e=>(a.add(e),()=>a.delete(e))},r=i=e(t,n,o);return o},o=e=>{let i=e?n(e):n,a=e=>(function(e,i=e=>e){let a=t.default.useSyncExternalStore(e.subscribe,t.default.useCallback(()=>i(e.getState()),[e,i]),t.default.useCallback(()=>i(e.getInitialState()),[e,i]));return t.default.useDebugValue(a),a})(i,e);return Object.assign(a,i),a},r=e=>e?o(e):o;e.s(["create",0,r],68834);let s=e=>i=>{try{let a=e(i);if(a instanceof Promise)return a;return{then:e=>s(e)(a),catch(e){return this}}}catch(e){return{then(e){return this},catch:i=>s(i)(e)}}};var m=e.i(43616);let l=r((i=(e,i)=>({theme:m.THEME_CONFIG.defaultTheme,setTheme:i=>{e({theme:i}),d(i)},toggleTheme:()=>{let a="dark"===i().theme?"light":"dark";e({theme:a}),d(a)},initTheme:()=>{d(i().theme)}}),a={name:m.THEME_CONFIG.storageKey},(e,t,n)=>{let o,r={storage:function(e){let i;try{i=e()}catch(e){return}return{getItem:e=>{var a;let t=e=>null===e?null:JSON.parse(e,void 0),n=null!=(a=i.getItem(e))?a:null;return n instanceof Promise?n.then(t):t(n)},setItem:(e,a)=>i.setItem(e,JSON.stringify(a,void 0)),removeItem:e=>i.removeItem(e)}}(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,i)=>({...i,...e}),...a},m=!1,l=0,d=new Set,c=new Set,p=r.storage;if(!p)return i((...i)=>{console.warn(`[zustand persist middleware] Unable to update item '${r.name}', the given storage is currently unavailable.`),e(...i)},t,n);let u=()=>{let e=r.partialize({...t()});return p.setItem(r.name,{state:e,version:r.version})},h=n.setState;n.setState=(e,i)=>(h(e,i),u());let g=i((...i)=>(e(...i),u()),t,n);n.getInitialState=()=>g;let f=()=>{var i,a;if(!p)return;let n=++l;m=!1,d.forEach(e=>{var i;return e(null!=(i=t())?i:g)});let h=(null==(a=r.onRehydrateStorage)?void 0:a.call(r,null!=(i=t())?i:g))||void 0;return s(p.getItem.bind(p))(r.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===r.version)return[!1,e.state];else{if(r.migrate){let i=r.migrate(e.state,e.version);return i instanceof Promise?i.then(e=>[!0,e]):[!0,i]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(i=>{var a;if(n!==l)return;let[s,m]=i;if(e(o=r.merge(m,null!=(a=t())?a:g),!0),s)return u()}).then(()=>{n===l&&(null==h||h(t(),void 0),o=t(),m=!0,c.forEach(e=>e(o)))}).catch(e=>{n===l&&(null==h||h(void 0,e))})};return n.persist={setOptions:e=>{r={...r,...e},e.storage&&(p=e.storage)},clearStorage:()=>{null==p||p.removeItem(r.name)},getOptions:()=>r,rehydrate:()=>f(),hasHydrated:()=>m,onHydrate:e=>(d.add(e),()=>{d.delete(e)}),onFinishHydration:e=>(c.add(e),()=>{c.delete(e)})},r.skipHydration||f(),o||g}));function d(e){let i=document.documentElement,a=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";"dark"===("system"===e?a:e)?i.classList.add("dark"):i.classList.remove("dark")}e.s(["default",0,l],49778)},35745,e=>{"use strict";var i=e.i(43476),a=e.i(71645),t=e.i(49778);e.s(["ThemeProvider",0,function({children:e}){let{initTheme:n}=(0,t.default)();return(0,a.useEffect)(()=>{n()},[n]),(0,i.jsx)(i.Fragment,{children:e})}])},5943,76969,e=>{"use strict";let i="locale";function a(e){return"zh"===e||"zh-CN"===e?"zh-CN":"en"===e?"en":"vi"===e?"vi":"zh-TW"===e?"zh-TW":"ja"===e?"ja":"pt-BR"===e?"pt-BR":"pt-PT"===e?"pt-PT":"ko"===e?"ko":"es"===e?"es":"de"===e?"de":"fr"===e?"fr":"he"===e?"he":"ar"===e?"ar":"ru"===e?"ru":"pl"===e?"pl":"cs"===e?"cs":"nl"===e?"nl":"tr"===e?"tr":"uk"===e?"uk":"tl"===e?"tl":"id"===e?"id":"th"===e?"th":"hi"===e?"hi":"bn"===e?"bn":"ur"===e?"ur":"ro"===e?"ro":"sv"===e?"sv":"it"===e?"it":"el"===e?"el":"hu"===e?"hu":"fi"===e?"fi":"da"===e?"da":"no"===e?"no":"en"}e.s(["DEFAULT_LOCALE",0,"en","LOCALES",0,["en","vi","zh-CN","zh-TW","ja","pt-BR","pt-PT","ko","es","de","fr","he","ar","ru","pl","cs","nl","tr","uk","tl","id","th","hi","bn","ur","ro","sv","it","el","hu","fi","da","no"],"LOCALE_COOKIE",0,i,"normalizeLocale",0,a],76969);let t={},n="en",o=[];function r(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i}=`));return a(e?decodeURIComponent(e.split("=")[1]):"en")}async function s(e){if("en"===e){t={};return}try{let i=await fetch(`/i18n/literals/${e}.json`);t=await i.json()}catch(e){console.error("Failed to load translations:",e),t={}}}function m(e){if(!e||"string"!=typeof e)return e;let i=e.trim();return i&&"en"!==n&&t[i]||e}function l(e){if(!e.nodeValue||!e.nodeValue.trim())return;let i=e.parentElement;if(!i)return;let a=i;for(;a;){if(a.hasAttribute&&a.hasAttribute("data-i18n-skip"))return;a=a.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(i.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let t=m(e._originalText);t!==e.nodeValue&&(e.nodeValue=t)}function d(e){let i;if(!e)return;let a=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1),t=[];for(;i=a.nextNode();)t.push(i);t.forEach(l)}async function c(){n=r(),await s(n),d(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?d(e):e.nodeType===Node.TEXT_NODE&&l(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function p(){n=r(),await s(n),o.forEach(e=>e()),d(document.body)}e.s(["initRuntimeI18n",0,c,"reloadTranslations",0,p,"translate",0,m],5943)}]);