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
@@ -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)}]);
@@ -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,12 +1,12 @@
1
1
  {
2
2
  "name": "n9router",
3
- "version": "0.3.94",
3
+ "version": "0.3.95",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "n9router",
9
- "version": "0.3.94",
9
+ "version": "0.3.95",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@monaco-editor/react": "^4.7.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n9router",
3
- "version": "0.3.94",
3
+ "version": "0.3.95",
4
4
  "description": "Self-hosted AI routing gateway — local proxy for Claude, Gemini, OpenAI and 40+ providers",
5
5
  "keywords": [
6
6
  "ai",
@@ -0,0 +1,218 @@
1
+ # Scope And Architecture
2
+
3
+ ## Scope
4
+
5
+ ### In scope
6
+
7
+ - Antigravity OAuth and account import
8
+ - project ID fetch/onboarding if needed by account validation or usage flows
9
+ - MITM HTTPS server for Antigravity domains
10
+ - DNS/hosts enable-disable for Antigravity
11
+ - root certificate generation and trust flow
12
+ - token swap across Antigravity accounts
13
+ - usage persistence, logs, request detail capture
14
+ - desktop-first UI for operating the above
15
+ - cross-platform support for macOS, Windows, and Linux
16
+
17
+ ### Out of scope
18
+
19
+ - generic AI router
20
+ - upstream model aliasing outside MITM use case
21
+ - generic provider CRUD for all existing providers
22
+ - all `src/app/api/v1/*` compatibility APIs
23
+ - cloud deployment and Workers support
24
+
25
+ ## Existing code to reuse
26
+
27
+ ### Core logic to preserve
28
+
29
+ - Antigravity OAuth flow:
30
+ - `src/lib/oauth/services/antigravity.js`
31
+ - MITM server:
32
+ - `src/mitm/server.js`
33
+ - `src/mitm/handlers/antigravity.js`
34
+ - `src/mitm/config.js`
35
+ - token swap:
36
+ - `src/mitm/tokenPool.js`
37
+ - usage capture:
38
+ - `src/mitm/usageTracker.js`
39
+ - `src/lib/usageDb.js`
40
+ - settings and account persistence:
41
+ - `src/lib/localDb.js`
42
+ - DNS and cert operations:
43
+ - `src/mitm/dns/dnsConfig.js`
44
+ - `src/mitm/cert/*`
45
+ - `src/mitm/manager.js`
46
+ - account import from local Antigravity install:
47
+ - `src/app/api/antigravity-tools/import/route.js`
48
+
49
+ ### UI logic to mine and adapt
50
+
51
+ - `src/app/(dashboard)/dashboard/mitm/MitmPageClient.js`
52
+ - `src/app/(dashboard)/dashboard/usage/page.js`
53
+ - `src/app/(dashboard)/dashboard/usage/components/RequestDetailsTab.js`
54
+ - `src/app/(dashboard)/dashboard/usage/components/OverviewCards.js`
55
+ - `src/shared/constants/cliTools.js`
56
+
57
+ ## Target workspace layout
58
+
59
+ ```text
60
+ apps/
61
+ desktop-shell/ # Tauri
62
+ desktop-ui/ # React SPA
63
+ desktop-backend/ # Express service
64
+ packages/
65
+ desktop-shared/ # API contracts, DTOs, constants
66
+ plans/
67
+ tauri-app/
68
+ ```
69
+
70
+ ## Runtime boundaries
71
+
72
+ ### Tauri Rust owns
73
+
74
+ - secure credential storage integration
75
+ - privileged actions
76
+ - backend process supervision
77
+ - MITM sidecar process supervision if separate from backend
78
+ - app data dir resolution
79
+ - native menu, tray, startup behavior
80
+ - platform adaptation for macOS, Windows, and Linux behaviors
81
+
82
+ ### Express backend owns
83
+
84
+ - account storage
85
+ - OAuth callback server or callback handling
86
+ - account import and validation
87
+ - MITM routing logic
88
+ - token swap state machine
89
+ - usage writes and reads
90
+ - internal APIs called by usage observer
91
+
92
+ ### React UI owns
93
+
94
+ - control plane only
95
+ - polling/subscribing to backend status
96
+ - visualization of pool state and usage data
97
+ - no direct filesystem or privileged OS operations
98
+
99
+ ## Critical design decisions
100
+
101
+ ### 1. Keep MITM logic in JS for v1
102
+
103
+ Reason:
104
+
105
+ - existing behavior is already implemented
106
+ - request interception and stream parsing are sensitive
107
+ - product value comes from shipping the desktop app, not from rewriting stable logic
108
+
109
+ ### 2. Move OS privilege work out of Node
110
+
111
+ Reason:
112
+
113
+ - current Node code handles passwords and host mutations directly
114
+ - desktop app should centralize privileged operations in Tauri
115
+ - Tauri offers a cleaner UX for elevation prompts and secret handling
116
+
117
+ ### 3. Keep JSON persistence first
118
+
119
+ Reason:
120
+
121
+ - current code already uses `db.json`, `usage.json`, and `log.txt`
122
+ - enough for a desktop MVP
123
+ - storage migration to SQLite is a separate concern and should not block v1
124
+
125
+ ### 4. Design for cross-platform from day one
126
+
127
+ Reason:
128
+
129
+ - DNS and certificate flows are different on each OS
130
+ - port 443 and elevation behavior differ across OSes
131
+ - retrofitting Windows and Linux after a macOS-first implementation will create avoidable rework
132
+
133
+ ## Platform support requirements
134
+
135
+ ### Shared
136
+
137
+ - same user-facing feature set on macOS, Windows, and Linux
138
+ - same backend API contract across all OSes
139
+ - same persistence format across all OSes
140
+ - same token swap semantics across all OSes
141
+
142
+ ### macOS
143
+
144
+ - support hosts-file mutation
145
+ - support certificate trust flow
146
+ - support DNS cache flush
147
+
148
+ ### Windows
149
+
150
+ - support hosts-file mutation under elevated privileges
151
+ - support certificate trust flow using Windows certificate store
152
+ - support UAC-based elevation flow without requiring terminal usage
153
+
154
+ ### Linux
155
+
156
+ - support hosts-file mutation on major desktop distros
157
+ - support root certificate installation at least for the app-documented path
158
+ - support DNS cache flush with distro-safe fallbacks
159
+ - gracefully handle environments without `sudo`
160
+
161
+ ## Architecture diagram
162
+
163
+ ```mermaid
164
+ flowchart LR
165
+ UI["React Desktop UI"] --> API["Local Express Backend"]
166
+ UI --> TAURI["Tauri Commands"]
167
+ TAURI --> OS["OS Cert / DNS / Secure Store"]
168
+ TAURI --> API
169
+ API --> DB["db.json / usage.json / log.txt"]
170
+ API --> MITM["MITM HTTPS Server"]
171
+ MITM --> AG["Antigravity Domains"]
172
+ MITM --> API
173
+ ```
174
+
175
+ ## MVP feature map
176
+
177
+ ### Accounts
178
+
179
+ - list accounts
180
+ - connect via browser OAuth
181
+ - import from `~/.antigravity_tools`
182
+ - enable/disable account
183
+ - show token expiry and refresh availability
184
+
185
+ ### MITM
186
+
187
+ - cert exists
188
+ - cert trusted
189
+ - server running
190
+ - DNS active
191
+ - health status
192
+ - start/stop controls
193
+ - platform-specific remediation text when a native action fails
194
+
195
+ ### Token swap
196
+
197
+ - enable/disable
198
+ - strategy selection
199
+ - account pool table
200
+ - cooldown visibility
201
+ - auth failure visibility
202
+ - last-used rotation indicator
203
+
204
+ ### Usage analyst
205
+
206
+ - totals
207
+ - recent requests
208
+ - token totals
209
+ - estimated cost
210
+ - request details drawer
211
+ - account-level and model-level filtering
212
+
213
+ ## Cross-platform acceptance criteria
214
+
215
+ - the app can be packaged and launched on macOS, Windows, and Linux
216
+ - backend startup path is identical from the UI perspective on all OSes
217
+ - cert/DNS/MITM state is surfaced consistently on all OSes
218
+ - platform-specific failure messages are understandable and actionable