@yina-npm/openrouterx 0.4.55 → 0.4.71

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 (805) hide show
  1. package/README.md +1 -1
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +5 -11
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +1 -1
  7. package/app/.next/routes-manifest.json +15 -51
  8. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -2
  9. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js.nft.json +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -2
  12. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js.nft.json +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  15. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  18. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  21. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  24. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  27. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  30. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  33. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  36. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  39. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  42. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  45. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  48. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  51. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  54. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  57. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  60. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +4 -4
  63. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +3 -2
  66. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  69. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  72. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  75. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  76. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
  78. package/app/.next/server/app/(dashboard)/dashboard/user/page.js.nft.json +1 -1
  79. package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/_global-error/page.js +2 -2
  81. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/_global-error.html +1 -1
  83. package/app/.next/server/app/_global-error.rsc +1 -1
  84. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  85. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  86. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  87. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  88. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  89. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  90. package/app/.next/server/app/_not-found/page.js +2 -2
  91. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  92. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/_not-found.html +1 -1
  94. package/app/.next/server/app/_not-found.rsc +4 -4
  95. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  96. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  97. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  98. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  99. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  100. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  101. package/app/.next/server/app/api/auth/login/route.js +1 -1
  102. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  103. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  104. package/app/.next/server/app/api/auth/me/route.js +1 -1
  105. package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  106. package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
  107. package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
  108. package/app/.next/server/app/api/auth/status/route.js +1 -1
  109. package/app/.next/server/app/api/cli-tools/all-statuses/route.js +4 -4
  110. package/app/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  112. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  114. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  116. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  117. package/app/.next/server/app/api/cli-tools/codex-settings/activate-account/route.js +2 -2
  118. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  119. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  120. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  121. package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  122. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  123. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  125. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  126. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  127. package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  128. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  129. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  130. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  131. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  132. package/app/.next/server/app/api/combos/route.js +1 -1
  133. package/app/.next/server/app/api/health/route.js +1 -1
  134. package/app/.next/server/app/api/init/route.js +1 -1
  135. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  136. package/app/.next/server/app/api/keys/route.js +1 -1
  137. package/app/.next/server/app/api/locale/route.js +1 -1
  138. package/app/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  139. package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +1 -4
  140. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  141. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  142. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  143. package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  144. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  145. package/app/.next/server/app/api/models/alias/route.js +1 -1
  146. package/app/.next/server/app/api/models/availability/route.js +1 -1
  147. package/app/.next/server/app/api/models/custom/route.js +1 -1
  148. package/app/.next/server/app/api/models/disabled/route.js +1 -1
  149. package/app/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/models/route.js +1 -1
  151. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  152. package/app/.next/server/app/api/models/test/route.js +1 -1
  153. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -6
  155. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -0
  157. package/app/.next/server/app/api/{cli-tools/antigravity-mitm/test → oauth/codex/import-token}/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -0
  159. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  160. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  161. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  162. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  163. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  164. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  165. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  167. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  169. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  170. package/app/.next/server/app/api/pricing/route.js +1 -1
  171. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  172. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  173. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  174. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  175. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  176. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  177. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  178. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  180. package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  181. package/app/.next/server/app/api/providers/client/route.js +1 -1
  182. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  184. package/app/.next/server/app/api/providers/route.js +1 -1
  185. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  187. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  188. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  190. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  192. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  193. package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +43 -0
  194. package/app/.next/server/app/api/{tunnel/tailscale-login → proxy-pools/cloudflare-deploy}/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -0
  196. package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +40 -0
  197. package/app/.next/server/app/api/{tunnel/tailscale-start-daemon → proxy-pools/deno-deploy}/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -0
  199. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  200. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  201. package/app/.next/server/app/api/settings/database/route.js +1 -1
  202. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  203. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  204. package/app/.next/server/app/api/settings/route.js +1 -1
  205. package/app/.next/server/app/api/shutdown/route.js +1 -1
  206. package/app/.next/server/app/api/tags/route.js +1 -1
  207. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  208. package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  210. package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/translator/load/route.js +1 -1
  212. package/app/.next/server/app/api/translator/save/route.js +1 -1
  213. package/app/.next/server/app/api/translator/send/route.js +1 -1
  214. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  216. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  218. package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  220. package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  222. package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  224. package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  226. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  228. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  229. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +3 -3
  230. package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  232. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  233. package/app/.next/server/app/api/usage/api-keys/route.js +1 -1
  234. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  235. package/app/.next/server/app/api/usage/history/route.js +1 -1
  236. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  237. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  238. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  239. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  240. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  241. package/app/.next/server/app/api/usage/stream/route.js +2 -2
  242. package/app/.next/server/app/api/users/[id]/route.js +1 -1
  243. package/app/.next/server/app/api/users/route.js +1 -1
  244. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  245. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  246. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  247. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  249. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
  251. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  252. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  254. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
  256. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  258. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  259. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
  261. package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/v1/models/info/route.js +1 -1
  263. package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
  264. package/app/.next/server/app/api/v1/models/route.js +1 -1
  265. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  266. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  267. package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  269. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/v1/route.js +1 -1
  271. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  272. package/app/.next/server/app/api/v1/search/route.js +1 -1
  273. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  274. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  275. package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  277. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  279. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/version/route.js +1 -1
  281. package/app/.next/server/app/api/version/shutdown/route.js +1 -1
  282. package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/version/update/route.js +1 -1
  284. package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
  285. package/app/.next/server/app/callback/page.js +2 -2
  286. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  287. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  288. package/app/.next/server/app/callback.html +1 -1
  289. package/app/.next/server/app/callback.rsc +4 -4
  290. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  291. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  292. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  293. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  294. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  295. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  296. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  297. package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  298. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  299. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  300. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  301. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  302. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  303. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  304. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  305. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  306. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  307. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  308. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  309. package/app/.next/server/app/favicon.ico/route.js +1 -1
  310. package/app/.next/server/app/index.html +1 -1
  311. package/app/.next/server/app/index.rsc +4 -4
  312. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  313. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  314. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  315. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  316. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  317. package/app/.next/server/app/landing/page.js +2 -2
  318. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  319. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/landing.html +1 -1
  321. package/app/.next/server/app/landing.rsc +4 -4
  322. package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  323. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  324. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  325. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  326. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  327. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  328. package/app/.next/server/app/login/page.js +2 -2
  329. package/app/.next/server/app/login/page.js.nft.json +1 -1
  330. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  331. package/app/.next/server/app/login.html +1 -1
  332. package/app/.next/server/app/login.rsc +5 -5
  333. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  334. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  335. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  336. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  337. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  338. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  339. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  340. package/app/.next/server/app/page.js +2 -2
  341. package/app/.next/server/app/page.js.nft.json +1 -1
  342. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  343. package/app/.next/server/app-paths-manifest.json +5 -11
  344. package/app/.next/server/chunks/1172.js +1 -0
  345. package/app/.next/server/chunks/1350.js +2 -2
  346. package/app/.next/server/chunks/1476.js +1 -1
  347. package/app/.next/server/chunks/1531.js +1 -0
  348. package/app/.next/server/chunks/1900.js +1 -0
  349. package/app/.next/server/chunks/1998.js +1 -0
  350. package/app/.next/server/chunks/2409.js +1 -0
  351. package/app/.next/server/chunks/2574.js +1 -1
  352. package/app/.next/server/chunks/2722.js +2 -7
  353. package/app/.next/server/chunks/3104.js +43 -0
  354. package/app/.next/server/chunks/3110.js +10 -8
  355. package/app/.next/server/chunks/3205.js +1 -0
  356. package/app/.next/server/chunks/365.js +1 -0
  357. package/app/.next/server/chunks/3913.js +2 -2
  358. package/app/.next/server/chunks/412.js +2 -2
  359. package/app/.next/server/chunks/4177.js +1 -0
  360. package/app/.next/server/chunks/4404.js +1 -0
  361. package/app/.next/server/chunks/4922.js +9 -0
  362. package/app/.next/server/chunks/4989.js +1 -1
  363. package/app/.next/server/chunks/5217.js +1 -1
  364. package/app/.next/server/chunks/5681.js +1 -1
  365. package/app/.next/server/chunks/6001.js +1 -1
  366. package/app/.next/server/chunks/6096.js +1 -0
  367. package/app/.next/server/chunks/6108.js +1 -1
  368. package/app/.next/server/chunks/6457.js +4 -0
  369. package/app/.next/server/chunks/7341.js +1 -1
  370. package/app/.next/server/chunks/7879.js +10 -0
  371. package/app/.next/server/chunks/7937.js +186 -0
  372. package/app/.next/server/chunks/8220.js +1 -0
  373. package/app/.next/server/chunks/8279.js +1 -0
  374. package/app/.next/server/chunks/8473.js +8 -0
  375. package/app/.next/server/chunks/8750.js +1 -1
  376. package/app/.next/server/chunks/8895.js +8 -6
  377. package/app/.next/server/chunks/9203.js +1 -0
  378. package/app/.next/server/chunks/9259.js +3 -0
  379. package/app/.next/server/chunks/9460.js +1 -0
  380. package/app/.next/server/chunks/9489.js +1 -1
  381. package/app/.next/server/chunks/9501.js +63 -0
  382. package/app/.next/server/chunks/{9095.js → 9713.js} +1 -1
  383. package/app/.next/server/chunks/9718.js +1 -1
  384. package/app/.next/server/chunks/9856.js +1 -1
  385. package/app/.next/server/functions-config-manifest.json +0 -1
  386. package/app/.next/server/middleware-build-manifest.js +1 -1
  387. package/app/.next/server/middleware.js +1 -1
  388. package/app/.next/server/pages/404.html +1 -1
  389. package/app/.next/server/pages/500.html +1 -1
  390. package/app/.next/server/server-reference-manifest.js +1 -1
  391. package/app/.next/server/server-reference-manifest.json +1 -1
  392. package/app/.next/static/chunks/1321-9d7d6181b08dfcf4.js +1 -0
  393. package/app/.next/static/chunks/4072-e3cbc885320b3535.js +3 -0
  394. package/app/.next/static/chunks/5497-41bb54893ac4e384.js +7 -0
  395. package/app/.next/static/chunks/{6069-7c51e16aef293430.js → 6069-27d1adb0dbf83385.js} +9 -14
  396. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-ba3be29df191769b.js +1 -0
  397. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-a0eaec978d93b101.js +1 -0
  398. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-57065ce85ec52703.js +1 -0
  399. package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-e0f570e37fcc4d53.js → page-b52d2279e8eff62d.js} +1 -1
  400. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-011af574663dfa07.js +1 -0
  401. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-7cd7e81cc32bcf4d.js +3 -0
  402. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-77e1358581cbeecd.js +4 -0
  403. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-5f1623351681fa43.js +2 -0
  404. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-739dde37665780bc.js +1 -0
  405. package/app/.next/static/chunks/app/(dashboard)/layout-2b26025389c75878.js +1 -0
  406. package/app/.next/static/chunks/app/_global-error/page-739dde37665780bc.js +1 -0
  407. package/app/.next/static/chunks/app/api/auth/login/route-739dde37665780bc.js +1 -0
  408. package/app/.next/static/chunks/app/api/auth/logout/route-739dde37665780bc.js +1 -0
  409. package/app/.next/static/chunks/app/api/auth/me/route-739dde37665780bc.js +1 -0
  410. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-739dde37665780bc.js +1 -0
  411. package/app/.next/static/chunks/app/api/auth/oidc/start/route-739dde37665780bc.js +1 -0
  412. package/app/.next/static/chunks/app/api/auth/oidc/test/route-739dde37665780bc.js +1 -0
  413. package/app/.next/static/chunks/app/api/auth/status/route-739dde37665780bc.js +1 -0
  414. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-739dde37665780bc.js +1 -0
  415. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-739dde37665780bc.js +1 -0
  416. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-739dde37665780bc.js +1 -0
  417. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-739dde37665780bc.js +1 -0
  418. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-739dde37665780bc.js +1 -0
  419. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-739dde37665780bc.js +1 -0
  420. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-739dde37665780bc.js +1 -0
  421. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-739dde37665780bc.js +1 -0
  422. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-739dde37665780bc.js +1 -0
  423. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-739dde37665780bc.js +1 -0
  424. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-739dde37665780bc.js +1 -0
  425. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-739dde37665780bc.js +1 -0
  426. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-739dde37665780bc.js +1 -0
  427. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-739dde37665780bc.js +1 -0
  428. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-739dde37665780bc.js +1 -0
  429. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-739dde37665780bc.js +1 -0
  430. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-739dde37665780bc.js +1 -0
  431. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-739dde37665780bc.js +1 -0
  432. package/app/.next/static/chunks/app/api/combos/[id]/route-739dde37665780bc.js +1 -0
  433. package/app/.next/static/chunks/app/api/combos/route-739dde37665780bc.js +1 -0
  434. package/app/.next/static/chunks/app/api/health/route-739dde37665780bc.js +1 -0
  435. package/app/.next/static/chunks/app/api/init/route-739dde37665780bc.js +1 -0
  436. package/app/.next/static/chunks/app/api/keys/[id]/route-739dde37665780bc.js +1 -0
  437. package/app/.next/static/chunks/app/api/keys/route-739dde37665780bc.js +1 -0
  438. package/app/.next/static/chunks/app/api/locale/route-739dde37665780bc.js +1 -0
  439. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-739dde37665780bc.js +1 -0
  440. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-739dde37665780bc.js +1 -0
  441. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-739dde37665780bc.js +1 -0
  442. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-739dde37665780bc.js +1 -0
  443. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-739dde37665780bc.js +1 -0
  444. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-739dde37665780bc.js +1 -0
  445. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-739dde37665780bc.js +1 -0
  446. package/app/.next/static/chunks/app/api/models/alias/route-739dde37665780bc.js +1 -0
  447. package/app/.next/static/chunks/app/api/models/availability/route-739dde37665780bc.js +1 -0
  448. package/app/.next/static/chunks/app/api/models/custom/route-739dde37665780bc.js +1 -0
  449. package/app/.next/static/chunks/app/api/models/disabled/route-739dde37665780bc.js +1 -0
  450. package/app/.next/static/chunks/app/api/models/route-739dde37665780bc.js +1 -0
  451. package/app/.next/static/chunks/app/api/models/test/route-739dde37665780bc.js +1 -0
  452. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-739dde37665780bc.js +1 -0
  453. package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-739dde37665780bc.js +1 -0
  454. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-739dde37665780bc.js +1 -0
  455. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-739dde37665780bc.js +1 -0
  456. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-739dde37665780bc.js +1 -0
  457. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-739dde37665780bc.js +1 -0
  458. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-739dde37665780bc.js +1 -0
  459. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-739dde37665780bc.js +1 -0
  460. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-739dde37665780bc.js +1 -0
  461. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-739dde37665780bc.js +1 -0
  462. package/app/.next/static/chunks/app/api/pricing/route-739dde37665780bc.js +1 -0
  463. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-739dde37665780bc.js +1 -0
  464. package/app/.next/static/chunks/app/api/provider-nodes/route-739dde37665780bc.js +1 -0
  465. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-739dde37665780bc.js +1 -0
  466. package/app/.next/static/chunks/app/api/providers/[id]/models/route-739dde37665780bc.js +1 -0
  467. package/app/.next/static/chunks/app/api/providers/[id]/route-739dde37665780bc.js +1 -0
  468. package/app/.next/static/chunks/app/api/providers/[id]/test/route-739dde37665780bc.js +1 -0
  469. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-739dde37665780bc.js +1 -0
  470. package/app/.next/static/chunks/app/api/providers/client/route-739dde37665780bc.js +1 -0
  471. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-739dde37665780bc.js +1 -0
  472. package/app/.next/static/chunks/app/api/providers/route-739dde37665780bc.js +1 -0
  473. package/app/.next/static/chunks/app/api/providers/suggested-models/route-739dde37665780bc.js +1 -0
  474. package/app/.next/static/chunks/app/api/providers/test-batch/route-739dde37665780bc.js +1 -0
  475. package/app/.next/static/chunks/app/api/providers/validate/route-739dde37665780bc.js +1 -0
  476. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-739dde37665780bc.js +1 -0
  477. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-739dde37665780bc.js +1 -0
  478. package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-739dde37665780bc.js +1 -0
  479. package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-739dde37665780bc.js +1 -0
  480. package/app/.next/static/chunks/app/api/proxy-pools/route-739dde37665780bc.js +1 -0
  481. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-739dde37665780bc.js +1 -0
  482. package/app/.next/static/chunks/app/api/settings/database/route-739dde37665780bc.js +1 -0
  483. package/app/.next/static/chunks/app/api/settings/proxy-test/route-739dde37665780bc.js +1 -0
  484. package/app/.next/static/chunks/app/api/settings/require-login/route-739dde37665780bc.js +1 -0
  485. package/app/.next/static/chunks/app/api/settings/route-739dde37665780bc.js +1 -0
  486. package/app/.next/static/chunks/app/api/shutdown/route-739dde37665780bc.js +1 -0
  487. package/app/.next/static/chunks/app/api/tags/route-739dde37665780bc.js +1 -0
  488. package/app/.next/static/chunks/app/api/translator/console-logs/route-739dde37665780bc.js +1 -0
  489. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-739dde37665780bc.js +1 -0
  490. package/app/.next/static/chunks/app/api/translator/load/route-739dde37665780bc.js +1 -0
  491. package/app/.next/static/chunks/app/api/translator/save/route-739dde37665780bc.js +1 -0
  492. package/app/.next/static/chunks/app/api/translator/send/route-739dde37665780bc.js +1 -0
  493. package/app/.next/static/chunks/app/api/translator/translate/route-739dde37665780bc.js +1 -0
  494. package/app/.next/static/chunks/app/api/tunnel/disable/route-739dde37665780bc.js +1 -0
  495. package/app/.next/static/chunks/app/api/tunnel/enable/route-739dde37665780bc.js +1 -0
  496. package/app/.next/static/chunks/app/api/tunnel/status/route-739dde37665780bc.js +1 -0
  497. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-739dde37665780bc.js +1 -0
  498. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-739dde37665780bc.js +1 -0
  499. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-739dde37665780bc.js +1 -0
  500. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-739dde37665780bc.js +1 -0
  501. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-739dde37665780bc.js +1 -0
  502. package/app/.next/static/chunks/app/api/usage/api-keys/route-739dde37665780bc.js +1 -0
  503. package/app/.next/static/chunks/app/api/usage/chart/route-739dde37665780bc.js +1 -0
  504. package/app/.next/static/chunks/app/api/usage/history/route-739dde37665780bc.js +1 -0
  505. package/app/.next/static/chunks/app/api/usage/logs/route-739dde37665780bc.js +1 -0
  506. package/app/.next/static/chunks/app/api/usage/providers/route-739dde37665780bc.js +1 -0
  507. package/app/.next/static/chunks/app/api/usage/request-details/route-739dde37665780bc.js +1 -0
  508. package/app/.next/static/chunks/app/api/usage/request-logs/route-739dde37665780bc.js +1 -0
  509. package/app/.next/static/chunks/app/api/usage/stats/route-739dde37665780bc.js +1 -0
  510. package/app/.next/static/chunks/app/api/usage/stream/route-739dde37665780bc.js +1 -0
  511. package/app/.next/static/chunks/app/api/users/[id]/route-739dde37665780bc.js +1 -0
  512. package/app/.next/static/chunks/app/api/users/route-739dde37665780bc.js +1 -0
  513. package/app/.next/static/chunks/app/api/v1/api/chat/route-739dde37665780bc.js +1 -0
  514. package/app/.next/static/chunks/app/api/v1/audio/speech/route-739dde37665780bc.js +1 -0
  515. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-739dde37665780bc.js +1 -0
  516. package/app/.next/static/chunks/app/api/v1/audio/voices/route-739dde37665780bc.js +1 -0
  517. package/app/.next/static/chunks/app/api/v1/chat/completions/route-739dde37665780bc.js +1 -0
  518. package/app/.next/static/chunks/app/api/v1/embeddings/route-739dde37665780bc.js +1 -0
  519. package/app/.next/static/chunks/app/api/v1/images/generations/route-739dde37665780bc.js +1 -0
  520. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-739dde37665780bc.js +1 -0
  521. package/app/.next/static/chunks/app/api/v1/messages/route-739dde37665780bc.js +1 -0
  522. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-739dde37665780bc.js +1 -0
  523. package/app/.next/static/chunks/app/api/v1/models/info/route-739dde37665780bc.js +1 -0
  524. package/app/.next/static/chunks/app/api/v1/models/route-739dde37665780bc.js +1 -0
  525. package/app/.next/static/chunks/app/api/v1/responses/compact/route-739dde37665780bc.js +1 -0
  526. package/app/.next/static/chunks/app/api/v1/responses/route-739dde37665780bc.js +1 -0
  527. package/app/.next/static/chunks/app/api/v1/route-739dde37665780bc.js +1 -0
  528. package/app/.next/static/chunks/app/api/v1/search/route-739dde37665780bc.js +1 -0
  529. package/app/.next/static/chunks/app/api/v1/web/fetch/route-739dde37665780bc.js +1 -0
  530. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-739dde37665780bc.js +1 -0
  531. package/app/.next/static/chunks/app/api/v1beta/models/route-739dde37665780bc.js +1 -0
  532. package/app/.next/static/chunks/app/api/version/route-739dde37665780bc.js +1 -0
  533. package/app/.next/static/chunks/app/api/version/shutdown/route-739dde37665780bc.js +1 -0
  534. package/app/.next/static/chunks/app/api/version/update/route-739dde37665780bc.js +1 -0
  535. package/app/.next/static/chunks/app/login/page-bf4ffdfcf4ec19bf.js +1 -0
  536. package/app/.next/static/chunks/app/manifest.webmanifest/route-739dde37665780bc.js +1 -0
  537. package/app/.next/static/chunks/app/page-739dde37665780bc.js +1 -0
  538. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-739dde37665780bc.js +1 -0
  539. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-739dde37665780bc.js +1 -0
  540. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-739dde37665780bc.js +1 -0
  541. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-739dde37665780bc.js +1 -0
  542. package/app/.next/static/css/16b3fb40c238dedb.css +1 -0
  543. package/app/.next/static/jssxgK5Jb3snQyFlT_oQ6/_buildManifest.js +1 -0
  544. package/app/package.json +2 -2
  545. package/app/public/i18n/literals/ar.json +1 -27
  546. package/app/public/i18n/literals/bn.json +1 -27
  547. package/app/public/i18n/literals/cs.json +1 -27
  548. package/app/public/i18n/literals/da.json +1 -27
  549. package/app/public/i18n/literals/de.json +1 -27
  550. package/app/public/i18n/literals/el.json +1 -27
  551. package/app/public/i18n/literals/es.json +1 -27
  552. package/app/public/i18n/literals/fi.json +1 -27
  553. package/app/public/i18n/literals/fr.json +1 -27
  554. package/app/public/i18n/literals/he.json +1 -27
  555. package/app/public/i18n/literals/hi.json +1 -27
  556. package/app/public/i18n/literals/hu.json +1 -27
  557. package/app/public/i18n/literals/id.json +1 -27
  558. package/app/public/i18n/literals/it.json +1 -27
  559. package/app/public/i18n/literals/ja.json +1 -27
  560. package/app/public/i18n/literals/ko.json +1 -27
  561. package/app/public/i18n/literals/nl.json +1 -27
  562. package/app/public/i18n/literals/no.json +1 -27
  563. package/app/public/i18n/literals/pl.json +1 -27
  564. package/app/public/i18n/literals/pt-BR.json +1 -27
  565. package/app/public/i18n/literals/pt-PT.json +1 -27
  566. package/app/public/i18n/literals/ro.json +1 -27
  567. package/app/public/i18n/literals/ru.json +1 -27
  568. package/app/public/i18n/literals/sv.json +1 -27
  569. package/app/public/i18n/literals/th.json +1 -27
  570. package/app/public/i18n/literals/tl.json +1 -27
  571. package/app/public/i18n/literals/tr.json +1 -27
  572. package/app/public/i18n/literals/uk.json +1 -27
  573. package/app/public/i18n/literals/ur.json +1 -27
  574. package/app/public/i18n/literals/vi.json +1 -27
  575. package/app/public/i18n/literals/zh-CN.json +4 -28
  576. package/app/public/i18n/literals/zh-TW.json +1 -27
  577. package/app/public/providers/qoder.png +0 -0
  578. package/app/server.js +1 -1
  579. package/app/src/lib/oauth/services/qoder.js +216 -0
  580. package/app/src/lib/oauth/services/xai.js +238 -0
  581. package/app/src/lib/updater/updater.js +3 -4
  582. package/app/src/mitm/antigravityIdeVersion.js +50 -0
  583. package/app/src/mitm/cert/install.js +45 -21
  584. package/app/src/mitm/cert/rootCA.js +5 -20
  585. package/app/src/mitm/config.js +38 -39
  586. package/app/src/mitm/dns/dnsConfig.js +10 -162
  587. package/app/src/mitm/handlers/antigravity.js +2 -29
  588. package/app/src/mitm/handlers/base.js +164 -17
  589. package/app/src/mitm/handlers/copilot.js +2 -2
  590. package/app/src/mitm/handlers/kiro.js +242 -117
  591. package/app/src/mitm/logger.js +2 -15
  592. package/app/src/mitm/manager.js +78 -91
  593. package/app/src/mitm/paths.js +19 -8
  594. package/app/src/mitm/server.js +199 -292
  595. package/app/src/shared/constants/mitmToolHosts.js +1 -6
  596. package/hooks/postinstall.js +0 -92
  597. package/package.json +3 -3
  598. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js +0 -2
  599. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js.nft.json +0 -1
  600. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page_client-reference-manifest.js +0 -1
  601. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js +0 -2
  602. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js.nft.json +0 -1
  603. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page_client-reference-manifest.js +0 -1
  604. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js +0 -1
  605. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js.nft.json +0 -1
  606. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route_client-reference-manifest.js +0 -1
  607. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js +0 -1
  608. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js.nft.json +0 -1
  609. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route_client-reference-manifest.js +0 -1
  610. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js +0 -1
  611. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route_client-reference-manifest.js +0 -1
  612. package/app/.next/server/app/api/network-analysis/route.js +0 -2
  613. package/app/.next/server/app/api/network-analysis/route.js.nft.json +0 -1
  614. package/app/.next/server/app/api/network-analysis/route_client-reference-manifest.js +0 -1
  615. package/app/.next/server/app/api/startup-notices/route.js +0 -2
  616. package/app/.next/server/app/api/startup-notices/route.js.nft.json +0 -1
  617. package/app/.next/server/app/api/startup-notices/route_client-reference-manifest.js +0 -1
  618. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +0 -1
  619. package/app/.next/server/app/api/tunnel/tailscale-login/route_client-reference-manifest.js +0 -1
  620. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +0 -2
  621. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +0 -1
  622. package/app/.next/server/chunks/2415.js +0 -17
  623. package/app/.next/server/chunks/2506.js +0 -4
  624. package/app/.next/server/chunks/2560.js +0 -1
  625. package/app/.next/server/chunks/3245.js +0 -1
  626. package/app/.next/server/chunks/3493.js +0 -2
  627. package/app/.next/server/chunks/4394.js +0 -1
  628. package/app/.next/server/chunks/4664.js +0 -1
  629. package/app/.next/server/chunks/5330.js +0 -162
  630. package/app/.next/server/chunks/6182.js +0 -50
  631. package/app/.next/server/chunks/6393.js +0 -1
  632. package/app/.next/server/chunks/7177.js +0 -1
  633. package/app/.next/server/chunks/7568.js +0 -1
  634. package/app/.next/server/chunks/7595.js +0 -1
  635. package/app/.next/server/chunks/7828.js +0 -1
  636. package/app/.next/server/chunks/7930.js +0 -6
  637. package/app/.next/server/chunks/8574.js +0 -1
  638. package/app/.next/server/chunks/8590.js +0 -1
  639. package/app/.next/server/chunks/8651.js +0 -9
  640. package/app/.next/server/chunks/8760.js +0 -1
  641. package/app/.next/server/chunks/9609.js +0 -1
  642. package/app/.next/static/chunks/1321-f7d4f75925b79060.js +0 -1
  643. package/app/.next/static/chunks/4072-fdb34c3bf82582e6.js +0 -6
  644. package/app/.next/static/chunks/5095-47fe70cd930f3c59.js +0 -2
  645. package/app/.next/static/chunks/5497-b59396fb56e7b9b1.js +0 -7
  646. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-efbd0b93d35d25cc.js +0 -1
  647. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-acbac7a67319955a.js +0 -1
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-55598932923e41ce.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/focus-ui/page-329b3a170ddd28c6.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/network-analysis/page-0ad4db60f9d14f60.js +0 -1
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-f005d7a30159ce4f.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c3234f9c82b1a78e.js +0 -3
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-5040868a50d977bf.js +0 -4
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-e089ffa4138753d7.js +0 -1
  655. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-814b95c8fc310a6a.js +0 -1
  656. package/app/.next/static/chunks/app/(dashboard)/layout-00b66bc0e6b38a14.js +0 -1
  657. package/app/.next/static/chunks/app/_global-error/page-814b95c8fc310a6a.js +0 -1
  658. package/app/.next/static/chunks/app/api/auth/login/route-814b95c8fc310a6a.js +0 -1
  659. package/app/.next/static/chunks/app/api/auth/logout/route-814b95c8fc310a6a.js +0 -1
  660. package/app/.next/static/chunks/app/api/auth/me/route-814b95c8fc310a6a.js +0 -1
  661. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-814b95c8fc310a6a.js +0 -1
  662. package/app/.next/static/chunks/app/api/auth/oidc/start/route-814b95c8fc310a6a.js +0 -1
  663. package/app/.next/static/chunks/app/api/auth/oidc/test/route-814b95c8fc310a6a.js +0 -1
  664. package/app/.next/static/chunks/app/api/auth/status/route-814b95c8fc310a6a.js +0 -1
  665. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-814b95c8fc310a6a.js +0 -1
  666. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-814b95c8fc310a6a.js +0 -1
  667. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/inject-auth/route-814b95c8fc310a6a.js +0 -1
  668. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/restart/route-814b95c8fc310a6a.js +0 -1
  669. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-814b95c8fc310a6a.js +0 -1
  670. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/test/route-814b95c8fc310a6a.js +0 -1
  671. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-814b95c8fc310a6a.js +0 -1
  672. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-814b95c8fc310a6a.js +0 -1
  673. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-814b95c8fc310a6a.js +0 -1
  674. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-814b95c8fc310a6a.js +0 -1
  675. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-814b95c8fc310a6a.js +0 -1
  676. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-814b95c8fc310a6a.js +0 -1
  677. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-814b95c8fc310a6a.js +0 -1
  678. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-814b95c8fc310a6a.js +0 -1
  679. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-814b95c8fc310a6a.js +0 -1
  680. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-814b95c8fc310a6a.js +0 -1
  681. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-814b95c8fc310a6a.js +0 -1
  682. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-814b95c8fc310a6a.js +0 -1
  683. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-814b95c8fc310a6a.js +0 -1
  684. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-814b95c8fc310a6a.js +0 -1
  685. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-814b95c8fc310a6a.js +0 -1
  686. package/app/.next/static/chunks/app/api/combos/[id]/route-814b95c8fc310a6a.js +0 -1
  687. package/app/.next/static/chunks/app/api/combos/route-814b95c8fc310a6a.js +0 -1
  688. package/app/.next/static/chunks/app/api/health/route-814b95c8fc310a6a.js +0 -1
  689. package/app/.next/static/chunks/app/api/init/route-814b95c8fc310a6a.js +0 -1
  690. package/app/.next/static/chunks/app/api/keys/[id]/route-814b95c8fc310a6a.js +0 -1
  691. package/app/.next/static/chunks/app/api/keys/route-814b95c8fc310a6a.js +0 -1
  692. package/app/.next/static/chunks/app/api/locale/route-814b95c8fc310a6a.js +0 -1
  693. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-814b95c8fc310a6a.js +0 -1
  694. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-814b95c8fc310a6a.js +0 -1
  695. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-814b95c8fc310a6a.js +0 -1
  696. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-814b95c8fc310a6a.js +0 -1
  697. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-814b95c8fc310a6a.js +0 -1
  698. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-814b95c8fc310a6a.js +0 -1
  699. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-814b95c8fc310a6a.js +0 -1
  700. package/app/.next/static/chunks/app/api/models/alias/route-814b95c8fc310a6a.js +0 -1
  701. package/app/.next/static/chunks/app/api/models/availability/route-814b95c8fc310a6a.js +0 -1
  702. package/app/.next/static/chunks/app/api/models/custom/route-814b95c8fc310a6a.js +0 -1
  703. package/app/.next/static/chunks/app/api/models/disabled/route-814b95c8fc310a6a.js +0 -1
  704. package/app/.next/static/chunks/app/api/models/route-814b95c8fc310a6a.js +0 -1
  705. package/app/.next/static/chunks/app/api/models/test/route-814b95c8fc310a6a.js +0 -1
  706. package/app/.next/static/chunks/app/api/network-analysis/route-814b95c8fc310a6a.js +0 -1
  707. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-814b95c8fc310a6a.js +0 -1
  708. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-814b95c8fc310a6a.js +0 -1
  709. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-814b95c8fc310a6a.js +0 -1
  710. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-814b95c8fc310a6a.js +0 -1
  711. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-814b95c8fc310a6a.js +0 -1
  712. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-814b95c8fc310a6a.js +0 -1
  713. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-814b95c8fc310a6a.js +0 -1
  714. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-814b95c8fc310a6a.js +0 -1
  715. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-814b95c8fc310a6a.js +0 -1
  716. package/app/.next/static/chunks/app/api/pricing/route-814b95c8fc310a6a.js +0 -1
  717. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-814b95c8fc310a6a.js +0 -1
  718. package/app/.next/static/chunks/app/api/provider-nodes/route-814b95c8fc310a6a.js +0 -1
  719. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-814b95c8fc310a6a.js +0 -1
  720. package/app/.next/static/chunks/app/api/providers/[id]/models/route-814b95c8fc310a6a.js +0 -1
  721. package/app/.next/static/chunks/app/api/providers/[id]/route-814b95c8fc310a6a.js +0 -1
  722. package/app/.next/static/chunks/app/api/providers/[id]/test/route-814b95c8fc310a6a.js +0 -1
  723. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-814b95c8fc310a6a.js +0 -1
  724. package/app/.next/static/chunks/app/api/providers/client/route-814b95c8fc310a6a.js +0 -1
  725. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-814b95c8fc310a6a.js +0 -1
  726. package/app/.next/static/chunks/app/api/providers/route-814b95c8fc310a6a.js +0 -1
  727. package/app/.next/static/chunks/app/api/providers/suggested-models/route-814b95c8fc310a6a.js +0 -1
  728. package/app/.next/static/chunks/app/api/providers/test-batch/route-814b95c8fc310a6a.js +0 -1
  729. package/app/.next/static/chunks/app/api/providers/validate/route-814b95c8fc310a6a.js +0 -1
  730. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-814b95c8fc310a6a.js +0 -1
  731. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-814b95c8fc310a6a.js +0 -1
  732. package/app/.next/static/chunks/app/api/proxy-pools/route-814b95c8fc310a6a.js +0 -1
  733. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-814b95c8fc310a6a.js +0 -1
  734. package/app/.next/static/chunks/app/api/settings/database/route-814b95c8fc310a6a.js +0 -1
  735. package/app/.next/static/chunks/app/api/settings/proxy-test/route-814b95c8fc310a6a.js +0 -1
  736. package/app/.next/static/chunks/app/api/settings/require-login/route-814b95c8fc310a6a.js +0 -1
  737. package/app/.next/static/chunks/app/api/settings/route-814b95c8fc310a6a.js +0 -1
  738. package/app/.next/static/chunks/app/api/shutdown/route-814b95c8fc310a6a.js +0 -1
  739. package/app/.next/static/chunks/app/api/startup-notices/route-814b95c8fc310a6a.js +0 -1
  740. package/app/.next/static/chunks/app/api/tags/route-814b95c8fc310a6a.js +0 -1
  741. package/app/.next/static/chunks/app/api/translator/console-logs/route-814b95c8fc310a6a.js +0 -1
  742. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-814b95c8fc310a6a.js +0 -1
  743. package/app/.next/static/chunks/app/api/translator/load/route-814b95c8fc310a6a.js +0 -1
  744. package/app/.next/static/chunks/app/api/translator/save/route-814b95c8fc310a6a.js +0 -1
  745. package/app/.next/static/chunks/app/api/translator/send/route-814b95c8fc310a6a.js +0 -1
  746. package/app/.next/static/chunks/app/api/translator/translate/route-814b95c8fc310a6a.js +0 -1
  747. package/app/.next/static/chunks/app/api/tunnel/disable/route-814b95c8fc310a6a.js +0 -1
  748. package/app/.next/static/chunks/app/api/tunnel/enable/route-814b95c8fc310a6a.js +0 -1
  749. package/app/.next/static/chunks/app/api/tunnel/status/route-814b95c8fc310a6a.js +0 -1
  750. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-814b95c8fc310a6a.js +0 -1
  751. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-814b95c8fc310a6a.js +0 -1
  752. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-814b95c8fc310a6a.js +0 -1
  753. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-814b95c8fc310a6a.js +0 -1
  754. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-814b95c8fc310a6a.js +0 -1
  755. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-814b95c8fc310a6a.js +0 -1
  756. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-814b95c8fc310a6a.js +0 -1
  757. package/app/.next/static/chunks/app/api/usage/api-keys/route-814b95c8fc310a6a.js +0 -1
  758. package/app/.next/static/chunks/app/api/usage/chart/route-814b95c8fc310a6a.js +0 -1
  759. package/app/.next/static/chunks/app/api/usage/history/route-814b95c8fc310a6a.js +0 -1
  760. package/app/.next/static/chunks/app/api/usage/logs/route-814b95c8fc310a6a.js +0 -1
  761. package/app/.next/static/chunks/app/api/usage/providers/route-814b95c8fc310a6a.js +0 -1
  762. package/app/.next/static/chunks/app/api/usage/request-details/route-814b95c8fc310a6a.js +0 -1
  763. package/app/.next/static/chunks/app/api/usage/request-logs/route-814b95c8fc310a6a.js +0 -1
  764. package/app/.next/static/chunks/app/api/usage/stats/route-814b95c8fc310a6a.js +0 -1
  765. package/app/.next/static/chunks/app/api/usage/stream/route-814b95c8fc310a6a.js +0 -1
  766. package/app/.next/static/chunks/app/api/users/[id]/route-814b95c8fc310a6a.js +0 -1
  767. package/app/.next/static/chunks/app/api/users/route-814b95c8fc310a6a.js +0 -1
  768. package/app/.next/static/chunks/app/api/v1/api/chat/route-814b95c8fc310a6a.js +0 -1
  769. package/app/.next/static/chunks/app/api/v1/audio/speech/route-814b95c8fc310a6a.js +0 -1
  770. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-814b95c8fc310a6a.js +0 -1
  771. package/app/.next/static/chunks/app/api/v1/audio/voices/route-814b95c8fc310a6a.js +0 -1
  772. package/app/.next/static/chunks/app/api/v1/chat/completions/route-814b95c8fc310a6a.js +0 -1
  773. package/app/.next/static/chunks/app/api/v1/embeddings/route-814b95c8fc310a6a.js +0 -1
  774. package/app/.next/static/chunks/app/api/v1/images/generations/route-814b95c8fc310a6a.js +0 -1
  775. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-814b95c8fc310a6a.js +0 -1
  776. package/app/.next/static/chunks/app/api/v1/messages/route-814b95c8fc310a6a.js +0 -1
  777. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-814b95c8fc310a6a.js +0 -1
  778. package/app/.next/static/chunks/app/api/v1/models/info/route-814b95c8fc310a6a.js +0 -1
  779. package/app/.next/static/chunks/app/api/v1/models/route-814b95c8fc310a6a.js +0 -1
  780. package/app/.next/static/chunks/app/api/v1/responses/compact/route-814b95c8fc310a6a.js +0 -1
  781. package/app/.next/static/chunks/app/api/v1/responses/route-814b95c8fc310a6a.js +0 -1
  782. package/app/.next/static/chunks/app/api/v1/route-814b95c8fc310a6a.js +0 -1
  783. package/app/.next/static/chunks/app/api/v1/search/route-814b95c8fc310a6a.js +0 -1
  784. package/app/.next/static/chunks/app/api/v1/web/fetch/route-814b95c8fc310a6a.js +0 -1
  785. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-814b95c8fc310a6a.js +0 -1
  786. package/app/.next/static/chunks/app/api/v1beta/models/route-814b95c8fc310a6a.js +0 -1
  787. package/app/.next/static/chunks/app/api/version/route-814b95c8fc310a6a.js +0 -1
  788. package/app/.next/static/chunks/app/api/version/shutdown/route-814b95c8fc310a6a.js +0 -1
  789. package/app/.next/static/chunks/app/api/version/update/route-814b95c8fc310a6a.js +0 -1
  790. package/app/.next/static/chunks/app/login/page-ef8d8c379c2ef99b.js +0 -1
  791. package/app/.next/static/chunks/app/manifest.webmanifest/route-814b95c8fc310a6a.js +0 -1
  792. package/app/.next/static/chunks/app/page-814b95c8fc310a6a.js +0 -1
  793. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-814b95c8fc310a6a.js +0 -1
  794. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-814b95c8fc310a6a.js +0 -1
  795. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-814b95c8fc310a6a.js +0 -1
  796. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-814b95c8fc310a6a.js +0 -1
  797. package/app/.next/static/css/9b92fc8235e99d1e.css +0 -1
  798. package/app/.next/static/f8CJGNglm2tzojtq8hcMG/_buildManifest.js +0 -1
  799. package/app/src/mitm/antigravityAvailableModels.fixture.json +0 -632
  800. package/app/src/mitm/antigravityBootstrap.js +0 -53
  801. package/app/src/mitm/antigravityModels.js +0 -265
  802. package/app/src/mitm/handlers/openrouter.js +0 -201
  803. package/app/src/mitm/models.json +0 -244
  804. package/app/src/mitm/upstreamResolver.js +0 -123
  805. /package/app/.next/static/{f8CJGNglm2tzojtq8hcMG → jssxgK5Jb3snQyFlT_oQ6}/_ssgManifest.js +0 -0
@@ -0,0 +1,216 @@
1
+ import {
2
+ QODER_DEVICE_TOKEN_URL,
3
+ QODER_LOGIN_URL,
4
+ QODER_USERINFO_URL,
5
+ } from "../../qoder/constants.js";
6
+ import crypto from "crypto";
7
+ import { v4 as uuidv4 } from "uuid";
8
+
9
+ /**
10
+ * Qoder OAuth Service
11
+ * Implements the device-token flow:
12
+ * 1. Generate PKCE pair + nonce + machine_id locally.
13
+ * 2. Open https://qoder.com/device/selectAccounts?challenge=...&nonce=...
14
+ * in the user's browser.
15
+ * 3. Poll openapi.qoder.sh/api/v1/deviceToken/poll until the user authorizes
16
+ * and the upstream returns a `dt-...` access token.
17
+ *
18
+ * Tokens live ~30 days; refresh is a no-op (the upstream refresh endpoint
19
+ * returns 403 for our flow). Users re-run login when expired.
20
+ *
21
+ * Mirrors the structure of KiroService — the COSY signing / WAF-bypass body
22
+ * encoding / chat protocol live separately in src/lib/qoder/ because they're
23
+ * used by every signed request, not just OAuth.
24
+ */
25
+
26
+ // Timeout for OAuth helper calls. The OAuth modal polls every 2s for up to
27
+ // 5 minutes; an individual request that stalls beyond this is treated as a
28
+ // failed poll attempt and the next poll iteration retries.
29
+ const FETCH_TIMEOUT_MS = 15_000;
30
+
31
+ function base64Url(buf) {
32
+ return buf
33
+ .toString("base64")
34
+ .replace(/=/g, "")
35
+ .replace(/\+/g, "-")
36
+ .replace(/\//g, "_");
37
+ }
38
+
39
+ /**
40
+ * Wrap fetch with an AbortController-based timeout. Without this, a stalled
41
+ * upstream socket hangs on Node's default keepalive timeout (minutes) and
42
+ * abandoned polls accumulate hung sockets.
43
+ */
44
+ async function fetchWithTimeout(url, init = {}) {
45
+ const controller = new AbortController();
46
+ const timer = setTimeout(() => controller.abort("timeout"), FETCH_TIMEOUT_MS);
47
+ try {
48
+ return await fetch(url, { ...init, signal: controller.signal });
49
+ } finally {
50
+ clearTimeout(timer);
51
+ }
52
+ }
53
+
54
+ export class QoderService {
55
+ /**
56
+ * Generate a PKCE verifier + S256 challenge pair.
57
+ * Uses 32 random bytes (matches qodercli/Veria).
58
+ */
59
+ generatePkcePair() {
60
+ const verifier = base64Url(crypto.randomBytes(32));
61
+ const challenge = base64Url(crypto.createHash("sha256").update(verifier).digest());
62
+ return { verifier, challenge };
63
+ }
64
+
65
+ /**
66
+ * Initiate the device flow. Returns the URL to open in a browser plus the
67
+ * verifier/nonce/machineId we'll need to poll and to sign future requests.
68
+ */
69
+ initiateDeviceFlow() {
70
+ const { verifier, challenge } = this.generatePkcePair();
71
+ const nonce = uuidv4();
72
+ const machineId = uuidv4();
73
+
74
+ const params = new URLSearchParams({
75
+ challenge,
76
+ challenge_method: "S256",
77
+ machine_id: machineId,
78
+ nonce,
79
+ });
80
+
81
+ return {
82
+ verificationUriComplete: `${QODER_LOGIN_URL}?${params.toString()}`,
83
+ codeVerifier: verifier,
84
+ nonce,
85
+ machineId,
86
+ };
87
+ }
88
+
89
+ /**
90
+ * Single poll attempt. Returns one of:
91
+ * { status: "pending" } — keep polling
92
+ * { status: "ok", token, ... } — user authorized, tokens captured
93
+ * throws Error — terminal failure
94
+ *
95
+ * Upstream returns 202/404 while waiting; 200 with a JSON body when done.
96
+ */
97
+ async pollDeviceToken({ nonce, codeVerifier }) {
98
+ if (!nonce || !codeVerifier) {
99
+ throw new Error("pollDeviceToken: missing nonce or code verifier");
100
+ }
101
+ const url = `${QODER_DEVICE_TOKEN_URL}?nonce=${encodeURIComponent(nonce)}&verifier=${encodeURIComponent(codeVerifier)}&challenge_method=S256`;
102
+
103
+ const response = await fetchWithTimeout(url, {
104
+ method: "GET",
105
+ headers: {
106
+ Accept: "application/json",
107
+ "User-Agent": "Go-http-client/2.0",
108
+ },
109
+ });
110
+
111
+ // Pending — server has registered the device code but the user hasn't
112
+ // finished the browser flow yet. Both 202 and 404 mean "keep polling".
113
+ if (response.status === 202 || response.status === 404) {
114
+ return { status: "pending" };
115
+ }
116
+
117
+ const text = await response.text();
118
+
119
+ if (!response.ok) {
120
+ let message = `Qoder device token poll failed: HTTP ${response.status}`;
121
+ try {
122
+ const body = JSON.parse(text);
123
+ if (body.message) message = `Qoder device token poll failed: ${body.message}`;
124
+ } catch {}
125
+ throw new Error(message);
126
+ }
127
+
128
+ let body;
129
+ try {
130
+ body = JSON.parse(text);
131
+ } catch (err) {
132
+ throw new Error(`Qoder device token poll: invalid JSON response (${err.message})`);
133
+ }
134
+
135
+ // Defensive: 200 + empty token means the upstream changed shape.
136
+ if (!body.token) {
137
+ throw new Error("Qoder device token poll returned 200 but no token");
138
+ }
139
+
140
+ const expireMs = QoderService.parseExpiry(body.expires_at, body.expires_in);
141
+
142
+ return {
143
+ status: "ok",
144
+ accessToken: body.token,
145
+ refreshToken: body.refresh_token || "",
146
+ userId: body.user_id || "",
147
+ expireTime: expireMs,
148
+ rawResponse: body,
149
+ };
150
+ }
151
+
152
+ /**
153
+ * Fetch profile info for the freshly-issued token. Best-effort — failures
154
+ * shouldn't block login; returning empty strings is fine.
155
+ */
156
+ async fetchUserInfo(accessToken) {
157
+ try {
158
+ const response = await fetchWithTimeout(QODER_USERINFO_URL, {
159
+ method: "GET",
160
+ headers: {
161
+ Authorization: `Bearer ${accessToken}`,
162
+ Accept: "application/json",
163
+ "User-Agent": "Go-http-client/2.0",
164
+ },
165
+ });
166
+ if (!response.ok) return { name: "", email: "" };
167
+ const body = await response.json();
168
+ return {
169
+ name: (body.name || body.username || "").trim(),
170
+ email: (body.email || "").trim(),
171
+ organizationId: (body.organization_id || "").trim(),
172
+ };
173
+ } catch {
174
+ return { name: "", email: "" };
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Convert the upstream's expiry hint into a Unix-millisecond timestamp.
180
+ * Accepts:
181
+ * - numeric (ms-epoch): returned as-is
182
+ * - numeric string of ms-epoch: e.g. "1781594470000"
183
+ * - RFC3339 string: e.g. "2026-06-16T07:15:04Z"
184
+ * - seconds-from-now via expiresInSeconds (>= 0)
185
+ * Falls back to "now + 30 days" when both are missing.
186
+ *
187
+ * Order matters: try numeric (string or number) before Date.parse, since
188
+ * Date.parse accepts short numeric strings like "2026" as years and would
189
+ * otherwise return a misleading year-2026 timestamp instead of falling
190
+ * through to the integer branch.
191
+ *
192
+ * Static so callers (and tests) can use it without instantiating.
193
+ */
194
+ static parseExpiry(expiresAt, expiresInSeconds) {
195
+ if (typeof expiresAt === "number" && Number.isFinite(expiresAt) && expiresAt > 0) {
196
+ return expiresAt;
197
+ }
198
+ const trimmed = typeof expiresAt === "string" ? expiresAt.trim() : "";
199
+ if (trimmed) {
200
+ // Pure numeric string → ms-epoch (don't let Date.parse swallow short
201
+ // numerics as years).
202
+ if (/^\d+$/.test(trimmed)) {
203
+ const ms = Number.parseInt(trimmed, 10);
204
+ if (Number.isFinite(ms) && ms > 0) return ms;
205
+ }
206
+ const parsed = Date.parse(trimmed);
207
+ if (!Number.isNaN(parsed)) return parsed;
208
+ }
209
+ // expiresInSeconds === 0 means "already expired"; honor that by returning
210
+ // the current time rather than fabricating a 30-day default.
211
+ if (typeof expiresInSeconds === "number" && Number.isFinite(expiresInSeconds) && expiresInSeconds >= 0) {
212
+ return Date.now() + expiresInSeconds * 1000;
213
+ }
214
+ return Date.now() + 30 * 24 * 60 * 60 * 1000;
215
+ }
216
+ }
@@ -0,0 +1,238 @@
1
+ import open from "open";
2
+ import { OAuthService } from "./oauth.js";
3
+ import crypto from "crypto";
4
+ import { XAI_CONFIG, XAI_PKCE_VERIFIER_BYTES } from "../constants/xai.js";
5
+ import { startLocalServer } from "../utils/server.js";
6
+ import { generateCodeVerifier, generateCodeChallenge, generateState } from "../utils/pkce.js";
7
+ import { spinner as createSpinner } from "../utils/ui.js";
8
+
9
+ /**
10
+ * xAI (Grok) OAuth Service
11
+ *
12
+ * Source of truth: router-for-me/CLIProxyAPI internal/auth/xai/xai.go
13
+ *
14
+ * Flow:
15
+ * 1. Discover endpoints from `${XAI_ISSUER}/.well-known/openid-configuration`
16
+ * 2. Bind loopback server on 127.0.0.1:56121, path /callback
17
+ * 3. PKCE S256 with 96-byte verifier
18
+ * 4. Exchange code with form-urlencoded body
19
+ * 5. id_token email decode (no signature verify, mirrors Go)
20
+ */
21
+
22
+ const BASE64_BLOCK_SIZE = 4;
23
+
24
+ let cachedDiscovery = null;
25
+
26
+ export function validateOAuthEndpoint(rawUrl, field) {
27
+ const value = String(rawUrl || "").trim();
28
+ if (!value) throw new Error(`xai discovery ${field} is empty`);
29
+
30
+ let parsed;
31
+ try {
32
+ parsed = new URL(value);
33
+ } catch (err) {
34
+ throw new Error(`xai discovery ${field} is invalid: ${err.message}`);
35
+ }
36
+
37
+ if (parsed.protocol !== "https:") {
38
+ throw new Error(`xai discovery ${field} must use https: ${value}`);
39
+ }
40
+
41
+ const host = parsed.hostname.toLowerCase().trim();
42
+ if (host !== "x.ai" && !host.endsWith(".x.ai")) {
43
+ throw new Error(`xai discovery ${field} host ${host} is not on x.ai`);
44
+ }
45
+
46
+ return value;
47
+ }
48
+
49
+ /**
50
+ * Discover authorization + token endpoints. Cached process-wide.
51
+ */
52
+ export async function discoverEndpoints() {
53
+ if (cachedDiscovery) return cachedDiscovery;
54
+
55
+ try {
56
+ const res = await fetch(XAI_CONFIG.discoveryUrl, {
57
+ headers: { Accept: "application/json" },
58
+ });
59
+ if (res.ok) {
60
+ const data = await res.json();
61
+ cachedDiscovery = {
62
+ authorizeUrl: validateOAuthEndpoint(data.authorization_endpoint, "authorization_endpoint"),
63
+ tokenUrl: validateOAuthEndpoint(data.token_endpoint, "token_endpoint"),
64
+ };
65
+ return cachedDiscovery;
66
+ }
67
+ } catch {
68
+ // fall through to static fallback
69
+ }
70
+
71
+ cachedDiscovery = {
72
+ authorizeUrl: XAI_CONFIG.authorizeUrl,
73
+ tokenUrl: XAI_CONFIG.tokenUrl,
74
+ };
75
+ return cachedDiscovery;
76
+ }
77
+
78
+ /**
79
+ * Decode the `email` claim from an id_token JWT. No signature verification —
80
+ * mirrors CLIProxyAPI Go behavior. Returns undefined if not parseable.
81
+ */
82
+ export function decodeIdTokenEmail(idToken) {
83
+ if (!idToken || typeof idToken !== "string") return undefined;
84
+ const parts = idToken.split(".");
85
+ if (parts.length !== 3) return undefined;
86
+ try {
87
+ const base64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
88
+ const padding = (BASE64_BLOCK_SIZE - (base64.length % BASE64_BLOCK_SIZE)) % BASE64_BLOCK_SIZE;
89
+ const json = Buffer.from(base64 + "=".repeat(padding), "base64").toString("utf8");
90
+ const payload = JSON.parse(json);
91
+ return payload.email || payload.preferred_username || payload.sub || undefined;
92
+ } catch {
93
+ return undefined;
94
+ }
95
+ }
96
+
97
+ export class XaiService extends OAuthService {
98
+ constructor() {
99
+ super(XAI_CONFIG);
100
+ }
101
+
102
+ /**
103
+ * Build xAI authorization URL. Spaces in scope are encoded as %20.
104
+ */
105
+ buildXaiAuthUrl(redirectUri, state, codeChallenge, authorizeUrl) {
106
+ const nonce = crypto.randomBytes(16).toString("hex");
107
+ const params = {
108
+ response_type: "code",
109
+ client_id: XAI_CONFIG.clientId,
110
+ redirect_uri: redirectUri,
111
+ scope: XAI_CONFIG.scope,
112
+ code_challenge: codeChallenge,
113
+ code_challenge_method: XAI_CONFIG.codeChallengeMethod,
114
+ state,
115
+ nonce,
116
+ plan: "generic",
117
+ referrer: "cli-proxy-api",
118
+ };
119
+ const qs = Object.entries(params)
120
+ .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
121
+ .join("&");
122
+ return `${authorizeUrl}?${qs}`;
123
+ }
124
+
125
+ /**
126
+ * Exchange authorization code for tokens.
127
+ * xAI is a public PKCE client — no client_secret.
128
+ */
129
+ async exchangeXaiCode({ tokenUrl, code, redirectUri, codeVerifier }) {
130
+ const res = await fetch(tokenUrl, {
131
+ method: "POST",
132
+ headers: {
133
+ "Content-Type": "application/x-www-form-urlencoded",
134
+ Accept: "application/json",
135
+ },
136
+ body: new URLSearchParams({
137
+ grant_type: "authorization_code",
138
+ client_id: XAI_CONFIG.clientId,
139
+ code,
140
+ redirect_uri: redirectUri,
141
+ code_verifier: codeVerifier,
142
+ }),
143
+ });
144
+
145
+ if (!res.ok) {
146
+ const err = await res.text();
147
+ throw new Error(`xAI token exchange failed: ${err}`);
148
+ }
149
+ return await res.json();
150
+ }
151
+
152
+ /**
153
+ * Refresh an access token using a refresh_token.
154
+ */
155
+ async refreshAccessToken(refreshToken) {
156
+ const { tokenUrl } = await discoverEndpoints();
157
+ const res = await fetch(tokenUrl, {
158
+ method: "POST",
159
+ headers: {
160
+ "Content-Type": "application/x-www-form-urlencoded",
161
+ Accept: "application/json",
162
+ },
163
+ body: new URLSearchParams({
164
+ grant_type: "refresh_token",
165
+ client_id: XAI_CONFIG.clientId,
166
+ refresh_token: refreshToken,
167
+ }),
168
+ });
169
+ if (!res.ok) {
170
+ const err = await res.text();
171
+ throw new Error(`xAI token refresh failed: ${err}`);
172
+ }
173
+ return await res.json();
174
+ }
175
+
176
+ /**
177
+ * Complete xAI OAuth flow end-to-end (CLI entrypoint).
178
+ * Returns the raw token response plus extracted email.
179
+ */
180
+ async connect() {
181
+ const spinner = createSpinner("Starting xAI OAuth...").start();
182
+ try {
183
+ spinner.text = "Discovering xAI endpoints...";
184
+ const { authorizeUrl, tokenUrl } = await discoverEndpoints();
185
+
186
+ spinner.text = `Starting local server on port ${XAI_CONFIG.loopbackPort}...`;
187
+ let callbackParams = null;
188
+ const { port, close } = await startLocalServer((params) => {
189
+ callbackParams = params;
190
+ }, XAI_CONFIG.loopbackPort);
191
+ const redirectUri = `http://127.0.0.1:${port}${XAI_CONFIG.callbackPath}`;
192
+ spinner.succeed(`Local server started on port ${port}`);
193
+
194
+ const codeVerifier = generateCodeVerifier(XAI_PKCE_VERIFIER_BYTES);
195
+ const codeChallenge = generateCodeChallenge(codeVerifier);
196
+ const state = generateState();
197
+ const authUrl = this.buildXaiAuthUrl(redirectUri, state, codeChallenge, authorizeUrl);
198
+
199
+ console.log("\nOpening browser for xAI authentication...");
200
+ console.log(`If browser doesn't open, visit:\n${authUrl}\n`);
201
+ await open(authUrl);
202
+
203
+ spinner.start("Waiting for xAI authorization...");
204
+ await new Promise((resolve, reject) => {
205
+ const timeout = setTimeout(() => reject(new Error("Authentication timeout (5 minutes)")), 300000);
206
+ const iv = setInterval(() => {
207
+ if (callbackParams) {
208
+ clearInterval(iv);
209
+ clearTimeout(timeout);
210
+ resolve();
211
+ }
212
+ }, 100);
213
+ });
214
+ close();
215
+
216
+ if (callbackParams.error) {
217
+ throw new Error(callbackParams.error_description || callbackParams.error);
218
+ }
219
+ if (!callbackParams.code) throw new Error("No authorization code received");
220
+ if (callbackParams.state !== state) throw new Error("Invalid state parameter");
221
+
222
+ spinner.start("Exchanging code for tokens...");
223
+ const tokens = await this.exchangeXaiCode({
224
+ tokenUrl,
225
+ code: callbackParams.code,
226
+ redirectUri,
227
+ codeVerifier,
228
+ });
229
+
230
+ const email = decodeIdTokenEmail(tokens.id_token);
231
+ spinner.succeed("xAI connected successfully!");
232
+ return { tokens, email };
233
+ } catch (error) {
234
+ spinner.fail(`Failed: ${error.message}`);
235
+ throw error;
236
+ }
237
+ }
238
+ }
@@ -10,7 +10,6 @@ const fs = require("fs");
10
10
  const os = require("os");
11
11
 
12
12
  const packageName = process.env.UPDATER_PKG_NAME || "9router";
13
- const APP_DATA_DIR_NAME = "openrouterx";
14
13
  const port = parseInt(process.env.UPDATER_PORT || "20129", 10);
15
14
  const tailLines = parseInt(process.env.UPDATER_TAIL_LINES || "8", 10);
16
15
  const maxRetries = parseInt(process.env.UPDATER_RETRIES || "3", 10);
@@ -19,7 +18,7 @@ const lingerMs = parseInt(process.env.UPDATER_LINGER_MS || "30000", 10);
19
18
  const waitMinMs = parseInt(process.env.UPDATER_WAIT_MIN_MS || "3000", 10);
20
19
  const waitMaxMs = parseInt(process.env.UPDATER_WAIT_MAX_MS || "15000", 10);
21
20
  const waitCheckMs = parseInt(process.env.UPDATER_WAIT_CHECK_MS || "500", 10);
22
- const appPort = parseInt(process.env.UPDATER_APP_PORT || "20502", 10);
21
+ const appPort = parseInt(process.env.UPDATER_APP_PORT || "20128", 10);
23
22
 
24
23
  // Data directory (match mitm/paths.js logic)
25
24
  function getDataDir() {
@@ -27,10 +26,10 @@ function getDataDir() {
27
26
  if (process.platform === "win32") {
28
27
  return path.join(
29
28
  process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"),
30
- APP_DATA_DIR_NAME
29
+ "9router"
31
30
  );
32
31
  }
33
- return path.join(os.homedir(), `.${APP_DATA_DIR_NAME}`);
32
+ return path.join(os.homedir(), ".9router");
34
33
  }
35
34
  const updateDir = path.join(getDataDir(), "update");
36
35
  try { fs.mkdirSync(updateDir, { recursive: true }); } catch { /* best effort */ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ // Rewrite Antigravity IDE markers so upstream AG 2.x backend accepts the request.
4
+ // User-Agent header (antigravity/<old>) and body.metadata.ideVersion are forced
5
+ // to a known-good IDE version. Hardcoded MVP — toggle/version configurable later.
6
+
7
+ const ANTIGRAVITY_IDE_VERSION = "1.23.2";
8
+ const ANTIGRAVITY_IDE_VERSION_OVERRIDE_ENABLED = true;
9
+
10
+ function shouldRewriteMetadata(metadata) {
11
+ if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) return false;
12
+ if (String(metadata.ideName || "").toLowerCase() === "antigravity") return true;
13
+ if (String(metadata.ideType || "").toUpperCase() === "ANTIGRAVITY") return true;
14
+ return Object.prototype.hasOwnProperty.call(metadata, "ideVersion");
15
+ }
16
+
17
+ function rewriteAntigravityUserAgent(userAgent, version) {
18
+ if (typeof userAgent !== "string" || !userAgent.includes("antigravity/")) return userAgent;
19
+ return userAgent.replace(/antigravity\/[^\s]+/, `antigravity/${version}`);
20
+ }
21
+
22
+ function applyAntigravityIdeVersionOverride(bodyBuffer, headers) {
23
+ if (!ANTIGRAVITY_IDE_VERSION_OVERRIDE_ENABLED) {
24
+ return { bodyBuffer, headers, applied: false, version: ANTIGRAVITY_IDE_VERSION };
25
+ }
26
+
27
+ const nextHeaders = { ...headers };
28
+ const nextUserAgent = rewriteAntigravityUserAgent(nextHeaders["user-agent"], ANTIGRAVITY_IDE_VERSION);
29
+ const userAgentChanged = nextUserAgent !== nextHeaders["user-agent"];
30
+ if (userAgentChanged) nextHeaders["user-agent"] = nextUserAgent;
31
+
32
+ try {
33
+ const parsed = JSON.parse(bodyBuffer.toString());
34
+ if (!shouldRewriteMetadata(parsed?.metadata)) {
35
+ return { bodyBuffer, headers: nextHeaders, applied: userAgentChanged, version: ANTIGRAVITY_IDE_VERSION };
36
+ }
37
+
38
+ parsed.metadata.ideVersion = ANTIGRAVITY_IDE_VERSION;
39
+ const nextBodyBuffer = Buffer.from(JSON.stringify(parsed));
40
+ return { bodyBuffer: nextBodyBuffer, headers: nextHeaders, applied: true, version: ANTIGRAVITY_IDE_VERSION };
41
+ } catch {
42
+ return { bodyBuffer, headers: nextHeaders, applied: userAgentChanged, version: ANTIGRAVITY_IDE_VERSION };
43
+ }
44
+ }
45
+
46
+ module.exports = {
47
+ ANTIGRAVITY_IDE_VERSION,
48
+ applyAntigravityIdeVersionOverride,
49
+ rewriteAntigravityUserAgent,
50
+ };
@@ -4,14 +4,30 @@ const { exec } = require("child_process");
4
4
  const { execWithPassword, isSudoAvailable } = require("../dns/dnsConfig.js");
5
5
  const { runElevatedPowerShell, quotePs } = require("../winElevated.js");
6
6
  const { log, err } = require("../logger");
7
- const { ROOT_CA_CN } = require("./rootCA.js");
8
7
 
9
8
  const IS_WIN = process.platform === "win32";
10
9
  const IS_MAC = process.platform === "darwin";
11
- const LINUX_CERT_DIR = "/usr/local/share/ca-certificates";
12
- const LEGACY_ROOT_CA_CN = "9Router MITM Root CA";
13
- const LINUX_CERT_FILE = `${LINUX_CERT_DIR}/openrouterx-root-ca.crt`;
14
- const LEGACY_LINUX_CERT_FILE = `${LINUX_CERT_DIR}/9router-root-ca.crt`;
10
+ const LINUX_CERT_PATHS = [
11
+ // Debian / Ubuntu
12
+ { dir: "/usr/local/share/ca-certificates", cmd: "update-ca-certificates" },
13
+ // Arch Linux / CachyOS / Manjaro
14
+ { dir: "/etc/ca-certificates/trust-source/anchors", cmd: "update-ca-trust" },
15
+ // Fedora / RHEL / CentOS
16
+ { dir: "/etc/pki/ca-trust/source/anchors", cmd: "update-ca-trust" },
17
+ // openSUSE
18
+ { dir: "/etc/pki/trust/anchors", cmd: "update-ca-certificates" }
19
+ ];
20
+
21
+ function getLinuxCertConfig() {
22
+ for (const config of LINUX_CERT_PATHS) {
23
+ if (fs.existsSync(config.dir)) {
24
+ return config;
25
+ }
26
+ }
27
+ // Fallback to Debian default if none exist
28
+ return LINUX_CERT_PATHS[0];
29
+ }
30
+ const ROOT_CA_CN = "9Router MITM Root CA";
15
31
 
16
32
  // Get SHA1 fingerprint from cert file using Node.js crypto
17
33
  function getCertFingerprint(certPath) {
@@ -33,12 +49,14 @@ function checkCertInstalledMac(certPath) {
33
49
  return new Promise((resolve) => {
34
50
  try {
35
51
  const fingerprint = getCertFingerprint(certPath).replace(/:/g, "");
36
- // security verify-cert returns 0 only if cert is trusted by system policy
37
- exec(`security verify-cert -c "${certPath}" -p ssl -k /Library/Keychains/System.keychain 2>/dev/null`, { windowsHide: true }, (error) => {
38
- if (!error) return resolve(true);
39
- // Fallback: check if fingerprint appears in System keychain with trust
40
- exec(`security dump-trust-settings -d 2>/dev/null | grep -i "${fingerprint}"`, { windowsHide: true }, (err2, stdout2) => {
41
- resolve(!err2 && !!stdout2?.trim());
52
+ // Verify exact cert bytes match same CN with different fingerprint = stale cert
53
+ exec(`security find-certificate -a -c "${ROOT_CA_CN}" -Z /Library/Keychains/System.keychain 2>/dev/null`, { windowsHide: true }, (error, stdout) => {
54
+ if (error || !stdout) return resolve(false);
55
+ const match = new RegExp(`SHA-1 hash:\\s*${fingerprint}`, "i").test(stdout);
56
+ if (!match) return resolve(false);
57
+ // Cert exists with matching fingerprint — confirm trust policy
58
+ exec(`security verify-cert -c "${certPath}" -p ssl -k /Library/Keychains/System.keychain 2>/dev/null`, { windowsHide: true }, (err2) => {
59
+ resolve(!err2);
42
60
  });
43
61
  });
44
62
  } catch {
@@ -87,10 +105,7 @@ async function installCert(sudoPassword, certPath) {
87
105
 
88
106
  async function installCertMac(sudoPassword, certPath) {
89
107
  // Remove all old certs with same name first to avoid duplicate/stale cert conflict
90
- const deleteOld = [
91
- `security delete-certificate -c "${LEGACY_ROOT_CA_CN}" /Library/Keychains/System.keychain 2>/dev/null || true`,
92
- `security delete-certificate -c "${ROOT_CA_CN}" /Library/Keychains/System.keychain 2>/dev/null || true`,
93
- ].join(" && ");
108
+ const deleteOld = `security delete-certificate -c "9Router MITM Root CA" /Library/Keychains/System.keychain 2>/dev/null || true`;
94
109
  const install = `security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${certPath}"`;
95
110
  try {
96
111
  await execWithPassword(`${deleteOld} && ${install}`, sudoPassword);
@@ -105,7 +120,6 @@ async function installCertWindows(certPath) {
105
120
  // Auto-elevate via UAC popup if not admin (zero popup if already admin).
106
121
  // Delete any stale cert with same CN before adding to avoid duplicates.
107
122
  const script = `
108
- certutil -delstore Root ${quotePs(LEGACY_ROOT_CA_CN)} 2>$null | Out-Null
109
123
  certutil -delstore Root ${quotePs(ROOT_CA_CN)} 2>$null | Out-Null
110
124
  $exit = & certutil -addstore Root ${quotePs(certPath)} 2>&1
111
125
  if ($LASTEXITCODE -ne 0) { throw "certutil exit $LASTEXITCODE" }
@@ -160,7 +174,9 @@ async function uninstallCertWindows() {
160
174
  }
161
175
 
162
176
  function checkCertInstalledLinux() {
163
- return Promise.resolve(fs.existsSync(LINUX_CERT_FILE));
177
+ const config = getLinuxCertConfig();
178
+ const certFile = `${config.dir}/9router-root-ca.crt`;
179
+ return Promise.resolve(fs.existsSync(certFile));
164
180
  }
165
181
 
166
182
  async function updateNssDatabases(certPath, action = 'add') {
@@ -214,9 +230,13 @@ async function installCertLinux(sudoPassword, certPath) {
214
230
  await updateNssDatabases(certPath, 'add');
215
231
  return;
216
232
  }
217
- const destFile = LINUX_CERT_FILE;
218
- // Try update-ca-certificates (Debian/Ubuntu), fallback to update-ca-trust (Fedora/RHEL)
219
- const cmd = `rm -f "${LEGACY_LINUX_CERT_FILE}" && cp "${certPath}" "${destFile}" && (update-ca-certificates 2>/dev/null || update-ca-trust 2>/dev/null || true)`;
233
+
234
+ const config = getLinuxCertConfig();
235
+ const destFile = `${config.dir}/9router-root-ca.crt`;
236
+
237
+ // Copy to the discovered directory and execute the specific update command
238
+ const cmd = `cp "${certPath}" "${destFile}" && (${config.cmd} 2>/dev/null || true)`;
239
+
220
240
  try {
221
241
  await execWithPassword(cmd, sudoPassword);
222
242
  await updateNssDatabases(certPath, 'add');
@@ -233,7 +253,11 @@ async function uninstallCertLinux(sudoPassword) {
233
253
  if (!isSudoAvailable()) {
234
254
  return;
235
255
  }
236
- const cmd = `rm -f "${LINUX_CERT_FILE}" "${LEGACY_LINUX_CERT_FILE}" && (update-ca-certificates 2>/dev/null || update-ca-trust 2>/dev/null || true)`;
256
+
257
+ const config = getLinuxCertConfig();
258
+ const destFile = `${config.dir}/9router-root-ca.crt`;
259
+ const cmd = `rm -f "${destFile}" && (${config.cmd} 2>/dev/null || true)`;
260
+
237
261
  try {
238
262
  await execWithPassword(cmd, sudoPassword);
239
263
  log("🔐 Cert: ✅ uninstalled from Linux trust store and user browser databases");