@yina-npm/openrouterx 0.4.56 → 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 (806) 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 +7 -13
  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 +7 -13
  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)/dashboard/user/{page-614eca0369bfff22.js → page-12765c664b3c1f6d.js} +2 -2
  406. package/app/.next/static/chunks/app/(dashboard)/layout-2b26025389c75878.js +1 -0
  407. package/app/.next/static/chunks/app/_global-error/page-739dde37665780bc.js +1 -0
  408. package/app/.next/static/chunks/app/api/auth/login/route-739dde37665780bc.js +1 -0
  409. package/app/.next/static/chunks/app/api/auth/logout/route-739dde37665780bc.js +1 -0
  410. package/app/.next/static/chunks/app/api/auth/me/route-739dde37665780bc.js +1 -0
  411. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-739dde37665780bc.js +1 -0
  412. package/app/.next/static/chunks/app/api/auth/oidc/start/route-739dde37665780bc.js +1 -0
  413. package/app/.next/static/chunks/app/api/auth/oidc/test/route-739dde37665780bc.js +1 -0
  414. package/app/.next/static/chunks/app/api/auth/status/route-739dde37665780bc.js +1 -0
  415. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-739dde37665780bc.js +1 -0
  416. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-739dde37665780bc.js +1 -0
  417. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-739dde37665780bc.js +1 -0
  418. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-739dde37665780bc.js +1 -0
  419. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-739dde37665780bc.js +1 -0
  420. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-739dde37665780bc.js +1 -0
  421. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-739dde37665780bc.js +1 -0
  422. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-739dde37665780bc.js +1 -0
  423. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-739dde37665780bc.js +1 -0
  424. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-739dde37665780bc.js +1 -0
  425. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-739dde37665780bc.js +1 -0
  426. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-739dde37665780bc.js +1 -0
  427. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-739dde37665780bc.js +1 -0
  428. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-739dde37665780bc.js +1 -0
  429. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-739dde37665780bc.js +1 -0
  430. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-739dde37665780bc.js +1 -0
  431. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-739dde37665780bc.js +1 -0
  432. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-739dde37665780bc.js +1 -0
  433. package/app/.next/static/chunks/app/api/combos/[id]/route-739dde37665780bc.js +1 -0
  434. package/app/.next/static/chunks/app/api/combos/route-739dde37665780bc.js +1 -0
  435. package/app/.next/static/chunks/app/api/health/route-739dde37665780bc.js +1 -0
  436. package/app/.next/static/chunks/app/api/init/route-739dde37665780bc.js +1 -0
  437. package/app/.next/static/chunks/app/api/keys/[id]/route-739dde37665780bc.js +1 -0
  438. package/app/.next/static/chunks/app/api/keys/route-739dde37665780bc.js +1 -0
  439. package/app/.next/static/chunks/app/api/locale/route-739dde37665780bc.js +1 -0
  440. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-739dde37665780bc.js +1 -0
  441. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-739dde37665780bc.js +1 -0
  442. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-739dde37665780bc.js +1 -0
  443. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-739dde37665780bc.js +1 -0
  444. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-739dde37665780bc.js +1 -0
  445. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-739dde37665780bc.js +1 -0
  446. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-739dde37665780bc.js +1 -0
  447. package/app/.next/static/chunks/app/api/models/alias/route-739dde37665780bc.js +1 -0
  448. package/app/.next/static/chunks/app/api/models/availability/route-739dde37665780bc.js +1 -0
  449. package/app/.next/static/chunks/app/api/models/custom/route-739dde37665780bc.js +1 -0
  450. package/app/.next/static/chunks/app/api/models/disabled/route-739dde37665780bc.js +1 -0
  451. package/app/.next/static/chunks/app/api/models/route-739dde37665780bc.js +1 -0
  452. package/app/.next/static/chunks/app/api/models/test/route-739dde37665780bc.js +1 -0
  453. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-739dde37665780bc.js +1 -0
  454. package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-739dde37665780bc.js +1 -0
  455. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-739dde37665780bc.js +1 -0
  456. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-739dde37665780bc.js +1 -0
  457. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-739dde37665780bc.js +1 -0
  458. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-739dde37665780bc.js +1 -0
  459. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-739dde37665780bc.js +1 -0
  460. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-739dde37665780bc.js +1 -0
  461. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-739dde37665780bc.js +1 -0
  462. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-739dde37665780bc.js +1 -0
  463. package/app/.next/static/chunks/app/api/pricing/route-739dde37665780bc.js +1 -0
  464. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-739dde37665780bc.js +1 -0
  465. package/app/.next/static/chunks/app/api/provider-nodes/route-739dde37665780bc.js +1 -0
  466. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-739dde37665780bc.js +1 -0
  467. package/app/.next/static/chunks/app/api/providers/[id]/models/route-739dde37665780bc.js +1 -0
  468. package/app/.next/static/chunks/app/api/providers/[id]/route-739dde37665780bc.js +1 -0
  469. package/app/.next/static/chunks/app/api/providers/[id]/test/route-739dde37665780bc.js +1 -0
  470. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-739dde37665780bc.js +1 -0
  471. package/app/.next/static/chunks/app/api/providers/client/route-739dde37665780bc.js +1 -0
  472. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-739dde37665780bc.js +1 -0
  473. package/app/.next/static/chunks/app/api/providers/route-739dde37665780bc.js +1 -0
  474. package/app/.next/static/chunks/app/api/providers/suggested-models/route-739dde37665780bc.js +1 -0
  475. package/app/.next/static/chunks/app/api/providers/test-batch/route-739dde37665780bc.js +1 -0
  476. package/app/.next/static/chunks/app/api/providers/validate/route-739dde37665780bc.js +1 -0
  477. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-739dde37665780bc.js +1 -0
  478. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-739dde37665780bc.js +1 -0
  479. package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-739dde37665780bc.js +1 -0
  480. package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-739dde37665780bc.js +1 -0
  481. package/app/.next/static/chunks/app/api/proxy-pools/route-739dde37665780bc.js +1 -0
  482. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-739dde37665780bc.js +1 -0
  483. package/app/.next/static/chunks/app/api/settings/database/route-739dde37665780bc.js +1 -0
  484. package/app/.next/static/chunks/app/api/settings/proxy-test/route-739dde37665780bc.js +1 -0
  485. package/app/.next/static/chunks/app/api/settings/require-login/route-739dde37665780bc.js +1 -0
  486. package/app/.next/static/chunks/app/api/settings/route-739dde37665780bc.js +1 -0
  487. package/app/.next/static/chunks/app/api/shutdown/route-739dde37665780bc.js +1 -0
  488. package/app/.next/static/chunks/app/api/tags/route-739dde37665780bc.js +1 -0
  489. package/app/.next/static/chunks/app/api/translator/console-logs/route-739dde37665780bc.js +1 -0
  490. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-739dde37665780bc.js +1 -0
  491. package/app/.next/static/chunks/app/api/translator/load/route-739dde37665780bc.js +1 -0
  492. package/app/.next/static/chunks/app/api/translator/save/route-739dde37665780bc.js +1 -0
  493. package/app/.next/static/chunks/app/api/translator/send/route-739dde37665780bc.js +1 -0
  494. package/app/.next/static/chunks/app/api/translator/translate/route-739dde37665780bc.js +1 -0
  495. package/app/.next/static/chunks/app/api/tunnel/disable/route-739dde37665780bc.js +1 -0
  496. package/app/.next/static/chunks/app/api/tunnel/enable/route-739dde37665780bc.js +1 -0
  497. package/app/.next/static/chunks/app/api/tunnel/status/route-739dde37665780bc.js +1 -0
  498. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-739dde37665780bc.js +1 -0
  499. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-739dde37665780bc.js +1 -0
  500. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-739dde37665780bc.js +1 -0
  501. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-739dde37665780bc.js +1 -0
  502. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-739dde37665780bc.js +1 -0
  503. package/app/.next/static/chunks/app/api/usage/api-keys/route-739dde37665780bc.js +1 -0
  504. package/app/.next/static/chunks/app/api/usage/chart/route-739dde37665780bc.js +1 -0
  505. package/app/.next/static/chunks/app/api/usage/history/route-739dde37665780bc.js +1 -0
  506. package/app/.next/static/chunks/app/api/usage/logs/route-739dde37665780bc.js +1 -0
  507. package/app/.next/static/chunks/app/api/usage/providers/route-739dde37665780bc.js +1 -0
  508. package/app/.next/static/chunks/app/api/usage/request-details/route-739dde37665780bc.js +1 -0
  509. package/app/.next/static/chunks/app/api/usage/request-logs/route-739dde37665780bc.js +1 -0
  510. package/app/.next/static/chunks/app/api/usage/stats/route-739dde37665780bc.js +1 -0
  511. package/app/.next/static/chunks/app/api/usage/stream/route-739dde37665780bc.js +1 -0
  512. package/app/.next/static/chunks/app/api/users/[id]/route-739dde37665780bc.js +1 -0
  513. package/app/.next/static/chunks/app/api/users/route-739dde37665780bc.js +1 -0
  514. package/app/.next/static/chunks/app/api/v1/api/chat/route-739dde37665780bc.js +1 -0
  515. package/app/.next/static/chunks/app/api/v1/audio/speech/route-739dde37665780bc.js +1 -0
  516. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-739dde37665780bc.js +1 -0
  517. package/app/.next/static/chunks/app/api/v1/audio/voices/route-739dde37665780bc.js +1 -0
  518. package/app/.next/static/chunks/app/api/v1/chat/completions/route-739dde37665780bc.js +1 -0
  519. package/app/.next/static/chunks/app/api/v1/embeddings/route-739dde37665780bc.js +1 -0
  520. package/app/.next/static/chunks/app/api/v1/images/generations/route-739dde37665780bc.js +1 -0
  521. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-739dde37665780bc.js +1 -0
  522. package/app/.next/static/chunks/app/api/v1/messages/route-739dde37665780bc.js +1 -0
  523. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-739dde37665780bc.js +1 -0
  524. package/app/.next/static/chunks/app/api/v1/models/info/route-739dde37665780bc.js +1 -0
  525. package/app/.next/static/chunks/app/api/v1/models/route-739dde37665780bc.js +1 -0
  526. package/app/.next/static/chunks/app/api/v1/responses/compact/route-739dde37665780bc.js +1 -0
  527. package/app/.next/static/chunks/app/api/v1/responses/route-739dde37665780bc.js +1 -0
  528. package/app/.next/static/chunks/app/api/v1/route-739dde37665780bc.js +1 -0
  529. package/app/.next/static/chunks/app/api/v1/search/route-739dde37665780bc.js +1 -0
  530. package/app/.next/static/chunks/app/api/v1/web/fetch/route-739dde37665780bc.js +1 -0
  531. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-739dde37665780bc.js +1 -0
  532. package/app/.next/static/chunks/app/api/v1beta/models/route-739dde37665780bc.js +1 -0
  533. package/app/.next/static/chunks/app/api/version/route-739dde37665780bc.js +1 -0
  534. package/app/.next/static/chunks/app/api/version/shutdown/route-739dde37665780bc.js +1 -0
  535. package/app/.next/static/chunks/app/api/version/update/route-739dde37665780bc.js +1 -0
  536. package/app/.next/static/chunks/app/login/page-bf4ffdfcf4ec19bf.js +1 -0
  537. package/app/.next/static/chunks/app/manifest.webmanifest/route-739dde37665780bc.js +1 -0
  538. package/app/.next/static/chunks/app/page-739dde37665780bc.js +1 -0
  539. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-739dde37665780bc.js +1 -0
  540. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-739dde37665780bc.js +1 -0
  541. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-739dde37665780bc.js +1 -0
  542. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-739dde37665780bc.js +1 -0
  543. package/app/.next/static/css/16b3fb40c238dedb.css +1 -0
  544. package/app/.next/static/jssxgK5Jb3snQyFlT_oQ6/_buildManifest.js +1 -0
  545. package/app/package.json +2 -2
  546. package/app/public/i18n/literals/ar.json +1 -27
  547. package/app/public/i18n/literals/bn.json +1 -27
  548. package/app/public/i18n/literals/cs.json +1 -27
  549. package/app/public/i18n/literals/da.json +1 -27
  550. package/app/public/i18n/literals/de.json +1 -27
  551. package/app/public/i18n/literals/el.json +1 -27
  552. package/app/public/i18n/literals/es.json +1 -27
  553. package/app/public/i18n/literals/fi.json +1 -27
  554. package/app/public/i18n/literals/fr.json +1 -27
  555. package/app/public/i18n/literals/he.json +1 -27
  556. package/app/public/i18n/literals/hi.json +1 -27
  557. package/app/public/i18n/literals/hu.json +1 -27
  558. package/app/public/i18n/literals/id.json +1 -27
  559. package/app/public/i18n/literals/it.json +1 -27
  560. package/app/public/i18n/literals/ja.json +1 -27
  561. package/app/public/i18n/literals/ko.json +1 -27
  562. package/app/public/i18n/literals/nl.json +1 -27
  563. package/app/public/i18n/literals/no.json +1 -27
  564. package/app/public/i18n/literals/pl.json +1 -27
  565. package/app/public/i18n/literals/pt-BR.json +1 -27
  566. package/app/public/i18n/literals/pt-PT.json +1 -27
  567. package/app/public/i18n/literals/ro.json +1 -27
  568. package/app/public/i18n/literals/ru.json +1 -27
  569. package/app/public/i18n/literals/sv.json +1 -27
  570. package/app/public/i18n/literals/th.json +1 -27
  571. package/app/public/i18n/literals/tl.json +1 -27
  572. package/app/public/i18n/literals/tr.json +1 -27
  573. package/app/public/i18n/literals/uk.json +1 -27
  574. package/app/public/i18n/literals/ur.json +1 -27
  575. package/app/public/i18n/literals/vi.json +1 -27
  576. package/app/public/i18n/literals/zh-CN.json +4 -28
  577. package/app/public/i18n/literals/zh-TW.json +1 -27
  578. package/app/public/providers/qoder.png +0 -0
  579. package/app/server.js +1 -1
  580. package/app/src/lib/oauth/services/qoder.js +216 -0
  581. package/app/src/lib/oauth/services/xai.js +238 -0
  582. package/app/src/lib/updater/updater.js +3 -4
  583. package/app/src/mitm/antigravityIdeVersion.js +50 -0
  584. package/app/src/mitm/cert/install.js +45 -21
  585. package/app/src/mitm/cert/rootCA.js +5 -20
  586. package/app/src/mitm/config.js +38 -39
  587. package/app/src/mitm/dns/dnsConfig.js +10 -162
  588. package/app/src/mitm/handlers/antigravity.js +2 -29
  589. package/app/src/mitm/handlers/base.js +164 -17
  590. package/app/src/mitm/handlers/copilot.js +2 -2
  591. package/app/src/mitm/handlers/kiro.js +242 -117
  592. package/app/src/mitm/logger.js +2 -15
  593. package/app/src/mitm/manager.js +78 -91
  594. package/app/src/mitm/paths.js +19 -8
  595. package/app/src/mitm/server.js +199 -292
  596. package/app/src/shared/constants/mitmToolHosts.js +1 -6
  597. package/hooks/postinstall.js +0 -92
  598. package/package.json +3 -3
  599. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js +0 -2
  600. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js.nft.json +0 -1
  601. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page_client-reference-manifest.js +0 -1
  602. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js +0 -2
  603. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js.nft.json +0 -1
  604. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page_client-reference-manifest.js +0 -1
  605. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js +0 -1
  606. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js.nft.json +0 -1
  607. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route_client-reference-manifest.js +0 -1
  608. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js +0 -1
  609. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js.nft.json +0 -1
  610. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route_client-reference-manifest.js +0 -1
  611. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js +0 -1
  612. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route_client-reference-manifest.js +0 -1
  613. package/app/.next/server/app/api/network-analysis/route.js +0 -2
  614. package/app/.next/server/app/api/network-analysis/route.js.nft.json +0 -1
  615. package/app/.next/server/app/api/network-analysis/route_client-reference-manifest.js +0 -1
  616. package/app/.next/server/app/api/startup-notices/route.js +0 -2
  617. package/app/.next/server/app/api/startup-notices/route.js.nft.json +0 -1
  618. package/app/.next/server/app/api/startup-notices/route_client-reference-manifest.js +0 -1
  619. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +0 -1
  620. package/app/.next/server/app/api/tunnel/tailscale-login/route_client-reference-manifest.js +0 -1
  621. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +0 -2
  622. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +0 -1
  623. package/app/.next/server/chunks/2415.js +0 -17
  624. package/app/.next/server/chunks/2506.js +0 -4
  625. package/app/.next/server/chunks/2560.js +0 -1
  626. package/app/.next/server/chunks/3245.js +0 -1
  627. package/app/.next/server/chunks/3493.js +0 -2
  628. package/app/.next/server/chunks/4394.js +0 -1
  629. package/app/.next/server/chunks/4664.js +0 -1
  630. package/app/.next/server/chunks/5330.js +0 -162
  631. package/app/.next/server/chunks/6182.js +0 -50
  632. package/app/.next/server/chunks/6393.js +0 -1
  633. package/app/.next/server/chunks/7177.js +0 -1
  634. package/app/.next/server/chunks/7568.js +0 -1
  635. package/app/.next/server/chunks/7595.js +0 -1
  636. package/app/.next/server/chunks/7828.js +0 -1
  637. package/app/.next/server/chunks/7930.js +0 -6
  638. package/app/.next/server/chunks/8574.js +0 -1
  639. package/app/.next/server/chunks/8590.js +0 -1
  640. package/app/.next/server/chunks/8651.js +0 -9
  641. package/app/.next/server/chunks/8760.js +0 -1
  642. package/app/.next/server/chunks/9609.js +0 -1
  643. package/app/.next/static/AygZAfUJH9o858u8mFQv5/_buildManifest.js +0 -1
  644. package/app/.next/static/chunks/1321-d35114032a6899dd.js +0 -1
  645. package/app/.next/static/chunks/4072-fdb34c3bf82582e6.js +0 -6
  646. package/app/.next/static/chunks/5095-47fe70cd930f3c59.js +0 -2
  647. package/app/.next/static/chunks/5497-b59396fb56e7b9b1.js +0 -7
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-efbd0b93d35d25cc.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-acbac7a67319955a.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-55598932923e41ce.js +0 -1
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/focus-ui/page-329b3a170ddd28c6.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/network-analysis/page-0ad4db60f9d14f60.js +0 -1
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-f005d7a30159ce4f.js +0 -1
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c3234f9c82b1a78e.js +0 -3
  655. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-5040868a50d977bf.js +0 -4
  656. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-e089ffa4138753d7.js +0 -1
  657. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-814b95c8fc310a6a.js +0 -1
  658. package/app/.next/static/chunks/app/(dashboard)/layout-00b66bc0e6b38a14.js +0 -1
  659. package/app/.next/static/chunks/app/_global-error/page-814b95c8fc310a6a.js +0 -1
  660. package/app/.next/static/chunks/app/api/auth/login/route-814b95c8fc310a6a.js +0 -1
  661. package/app/.next/static/chunks/app/api/auth/logout/route-814b95c8fc310a6a.js +0 -1
  662. package/app/.next/static/chunks/app/api/auth/me/route-814b95c8fc310a6a.js +0 -1
  663. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-814b95c8fc310a6a.js +0 -1
  664. package/app/.next/static/chunks/app/api/auth/oidc/start/route-814b95c8fc310a6a.js +0 -1
  665. package/app/.next/static/chunks/app/api/auth/oidc/test/route-814b95c8fc310a6a.js +0 -1
  666. package/app/.next/static/chunks/app/api/auth/status/route-814b95c8fc310a6a.js +0 -1
  667. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-814b95c8fc310a6a.js +0 -1
  668. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-814b95c8fc310a6a.js +0 -1
  669. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/inject-auth/route-814b95c8fc310a6a.js +0 -1
  670. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/restart/route-814b95c8fc310a6a.js +0 -1
  671. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-814b95c8fc310a6a.js +0 -1
  672. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/test/route-814b95c8fc310a6a.js +0 -1
  673. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-814b95c8fc310a6a.js +0 -1
  674. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-814b95c8fc310a6a.js +0 -1
  675. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-814b95c8fc310a6a.js +0 -1
  676. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-814b95c8fc310a6a.js +0 -1
  677. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-814b95c8fc310a6a.js +0 -1
  678. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-814b95c8fc310a6a.js +0 -1
  679. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-814b95c8fc310a6a.js +0 -1
  680. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-814b95c8fc310a6a.js +0 -1
  681. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-814b95c8fc310a6a.js +0 -1
  682. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-814b95c8fc310a6a.js +0 -1
  683. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-814b95c8fc310a6a.js +0 -1
  684. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-814b95c8fc310a6a.js +0 -1
  685. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-814b95c8fc310a6a.js +0 -1
  686. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-814b95c8fc310a6a.js +0 -1
  687. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-814b95c8fc310a6a.js +0 -1
  688. package/app/.next/static/chunks/app/api/combos/[id]/route-814b95c8fc310a6a.js +0 -1
  689. package/app/.next/static/chunks/app/api/combos/route-814b95c8fc310a6a.js +0 -1
  690. package/app/.next/static/chunks/app/api/health/route-814b95c8fc310a6a.js +0 -1
  691. package/app/.next/static/chunks/app/api/init/route-814b95c8fc310a6a.js +0 -1
  692. package/app/.next/static/chunks/app/api/keys/[id]/route-814b95c8fc310a6a.js +0 -1
  693. package/app/.next/static/chunks/app/api/keys/route-814b95c8fc310a6a.js +0 -1
  694. package/app/.next/static/chunks/app/api/locale/route-814b95c8fc310a6a.js +0 -1
  695. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-814b95c8fc310a6a.js +0 -1
  696. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-814b95c8fc310a6a.js +0 -1
  697. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-814b95c8fc310a6a.js +0 -1
  698. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-814b95c8fc310a6a.js +0 -1
  699. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-814b95c8fc310a6a.js +0 -1
  700. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-814b95c8fc310a6a.js +0 -1
  701. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-814b95c8fc310a6a.js +0 -1
  702. package/app/.next/static/chunks/app/api/models/alias/route-814b95c8fc310a6a.js +0 -1
  703. package/app/.next/static/chunks/app/api/models/availability/route-814b95c8fc310a6a.js +0 -1
  704. package/app/.next/static/chunks/app/api/models/custom/route-814b95c8fc310a6a.js +0 -1
  705. package/app/.next/static/chunks/app/api/models/disabled/route-814b95c8fc310a6a.js +0 -1
  706. package/app/.next/static/chunks/app/api/models/route-814b95c8fc310a6a.js +0 -1
  707. package/app/.next/static/chunks/app/api/models/test/route-814b95c8fc310a6a.js +0 -1
  708. package/app/.next/static/chunks/app/api/network-analysis/route-814b95c8fc310a6a.js +0 -1
  709. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-814b95c8fc310a6a.js +0 -1
  710. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-814b95c8fc310a6a.js +0 -1
  711. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-814b95c8fc310a6a.js +0 -1
  712. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-814b95c8fc310a6a.js +0 -1
  713. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-814b95c8fc310a6a.js +0 -1
  714. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-814b95c8fc310a6a.js +0 -1
  715. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-814b95c8fc310a6a.js +0 -1
  716. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-814b95c8fc310a6a.js +0 -1
  717. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-814b95c8fc310a6a.js +0 -1
  718. package/app/.next/static/chunks/app/api/pricing/route-814b95c8fc310a6a.js +0 -1
  719. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-814b95c8fc310a6a.js +0 -1
  720. package/app/.next/static/chunks/app/api/provider-nodes/route-814b95c8fc310a6a.js +0 -1
  721. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-814b95c8fc310a6a.js +0 -1
  722. package/app/.next/static/chunks/app/api/providers/[id]/models/route-814b95c8fc310a6a.js +0 -1
  723. package/app/.next/static/chunks/app/api/providers/[id]/route-814b95c8fc310a6a.js +0 -1
  724. package/app/.next/static/chunks/app/api/providers/[id]/test/route-814b95c8fc310a6a.js +0 -1
  725. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-814b95c8fc310a6a.js +0 -1
  726. package/app/.next/static/chunks/app/api/providers/client/route-814b95c8fc310a6a.js +0 -1
  727. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-814b95c8fc310a6a.js +0 -1
  728. package/app/.next/static/chunks/app/api/providers/route-814b95c8fc310a6a.js +0 -1
  729. package/app/.next/static/chunks/app/api/providers/suggested-models/route-814b95c8fc310a6a.js +0 -1
  730. package/app/.next/static/chunks/app/api/providers/test-batch/route-814b95c8fc310a6a.js +0 -1
  731. package/app/.next/static/chunks/app/api/providers/validate/route-814b95c8fc310a6a.js +0 -1
  732. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-814b95c8fc310a6a.js +0 -1
  733. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-814b95c8fc310a6a.js +0 -1
  734. package/app/.next/static/chunks/app/api/proxy-pools/route-814b95c8fc310a6a.js +0 -1
  735. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-814b95c8fc310a6a.js +0 -1
  736. package/app/.next/static/chunks/app/api/settings/database/route-814b95c8fc310a6a.js +0 -1
  737. package/app/.next/static/chunks/app/api/settings/proxy-test/route-814b95c8fc310a6a.js +0 -1
  738. package/app/.next/static/chunks/app/api/settings/require-login/route-814b95c8fc310a6a.js +0 -1
  739. package/app/.next/static/chunks/app/api/settings/route-814b95c8fc310a6a.js +0 -1
  740. package/app/.next/static/chunks/app/api/shutdown/route-814b95c8fc310a6a.js +0 -1
  741. package/app/.next/static/chunks/app/api/startup-notices/route-814b95c8fc310a6a.js +0 -1
  742. package/app/.next/static/chunks/app/api/tags/route-814b95c8fc310a6a.js +0 -1
  743. package/app/.next/static/chunks/app/api/translator/console-logs/route-814b95c8fc310a6a.js +0 -1
  744. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-814b95c8fc310a6a.js +0 -1
  745. package/app/.next/static/chunks/app/api/translator/load/route-814b95c8fc310a6a.js +0 -1
  746. package/app/.next/static/chunks/app/api/translator/save/route-814b95c8fc310a6a.js +0 -1
  747. package/app/.next/static/chunks/app/api/translator/send/route-814b95c8fc310a6a.js +0 -1
  748. package/app/.next/static/chunks/app/api/translator/translate/route-814b95c8fc310a6a.js +0 -1
  749. package/app/.next/static/chunks/app/api/tunnel/disable/route-814b95c8fc310a6a.js +0 -1
  750. package/app/.next/static/chunks/app/api/tunnel/enable/route-814b95c8fc310a6a.js +0 -1
  751. package/app/.next/static/chunks/app/api/tunnel/status/route-814b95c8fc310a6a.js +0 -1
  752. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-814b95c8fc310a6a.js +0 -1
  753. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-814b95c8fc310a6a.js +0 -1
  754. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-814b95c8fc310a6a.js +0 -1
  755. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-814b95c8fc310a6a.js +0 -1
  756. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-814b95c8fc310a6a.js +0 -1
  757. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-814b95c8fc310a6a.js +0 -1
  758. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-814b95c8fc310a6a.js +0 -1
  759. package/app/.next/static/chunks/app/api/usage/api-keys/route-814b95c8fc310a6a.js +0 -1
  760. package/app/.next/static/chunks/app/api/usage/chart/route-814b95c8fc310a6a.js +0 -1
  761. package/app/.next/static/chunks/app/api/usage/history/route-814b95c8fc310a6a.js +0 -1
  762. package/app/.next/static/chunks/app/api/usage/logs/route-814b95c8fc310a6a.js +0 -1
  763. package/app/.next/static/chunks/app/api/usage/providers/route-814b95c8fc310a6a.js +0 -1
  764. package/app/.next/static/chunks/app/api/usage/request-details/route-814b95c8fc310a6a.js +0 -1
  765. package/app/.next/static/chunks/app/api/usage/request-logs/route-814b95c8fc310a6a.js +0 -1
  766. package/app/.next/static/chunks/app/api/usage/stats/route-814b95c8fc310a6a.js +0 -1
  767. package/app/.next/static/chunks/app/api/usage/stream/route-814b95c8fc310a6a.js +0 -1
  768. package/app/.next/static/chunks/app/api/users/[id]/route-814b95c8fc310a6a.js +0 -1
  769. package/app/.next/static/chunks/app/api/users/route-814b95c8fc310a6a.js +0 -1
  770. package/app/.next/static/chunks/app/api/v1/api/chat/route-814b95c8fc310a6a.js +0 -1
  771. package/app/.next/static/chunks/app/api/v1/audio/speech/route-814b95c8fc310a6a.js +0 -1
  772. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-814b95c8fc310a6a.js +0 -1
  773. package/app/.next/static/chunks/app/api/v1/audio/voices/route-814b95c8fc310a6a.js +0 -1
  774. package/app/.next/static/chunks/app/api/v1/chat/completions/route-814b95c8fc310a6a.js +0 -1
  775. package/app/.next/static/chunks/app/api/v1/embeddings/route-814b95c8fc310a6a.js +0 -1
  776. package/app/.next/static/chunks/app/api/v1/images/generations/route-814b95c8fc310a6a.js +0 -1
  777. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-814b95c8fc310a6a.js +0 -1
  778. package/app/.next/static/chunks/app/api/v1/messages/route-814b95c8fc310a6a.js +0 -1
  779. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-814b95c8fc310a6a.js +0 -1
  780. package/app/.next/static/chunks/app/api/v1/models/info/route-814b95c8fc310a6a.js +0 -1
  781. package/app/.next/static/chunks/app/api/v1/models/route-814b95c8fc310a6a.js +0 -1
  782. package/app/.next/static/chunks/app/api/v1/responses/compact/route-814b95c8fc310a6a.js +0 -1
  783. package/app/.next/static/chunks/app/api/v1/responses/route-814b95c8fc310a6a.js +0 -1
  784. package/app/.next/static/chunks/app/api/v1/route-814b95c8fc310a6a.js +0 -1
  785. package/app/.next/static/chunks/app/api/v1/search/route-814b95c8fc310a6a.js +0 -1
  786. package/app/.next/static/chunks/app/api/v1/web/fetch/route-814b95c8fc310a6a.js +0 -1
  787. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-814b95c8fc310a6a.js +0 -1
  788. package/app/.next/static/chunks/app/api/v1beta/models/route-814b95c8fc310a6a.js +0 -1
  789. package/app/.next/static/chunks/app/api/version/route-814b95c8fc310a6a.js +0 -1
  790. package/app/.next/static/chunks/app/api/version/shutdown/route-814b95c8fc310a6a.js +0 -1
  791. package/app/.next/static/chunks/app/api/version/update/route-814b95c8fc310a6a.js +0 -1
  792. package/app/.next/static/chunks/app/login/page-ef8d8c379c2ef99b.js +0 -1
  793. package/app/.next/static/chunks/app/manifest.webmanifest/route-814b95c8fc310a6a.js +0 -1
  794. package/app/.next/static/chunks/app/page-814b95c8fc310a6a.js +0 -1
  795. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-814b95c8fc310a6a.js +0 -1
  796. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-814b95c8fc310a6a.js +0 -1
  797. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-814b95c8fc310a6a.js +0 -1
  798. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-814b95c8fc310a6a.js +0 -1
  799. package/app/.next/static/css/9b92fc8235e99d1e.css +0 -1
  800. package/app/src/mitm/antigravityAvailableModels.fixture.json +0 -632
  801. package/app/src/mitm/antigravityBootstrap.js +0 -53
  802. package/app/src/mitm/antigravityModels.js +0 -265
  803. package/app/src/mitm/handlers/openrouter.js +0 -201
  804. package/app/src/mitm/models.json +0 -244
  805. package/app/src/mitm/upstreamResolver.js +0 -123
  806. /package/app/.next/static/{AygZAfUJH9o858u8mFQv5 → jssxgK5Jb3snQyFlT_oQ6}/_ssgManifest.js +0 -0
@@ -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");
@@ -5,8 +5,6 @@ const { MITM_DIR } = require("../paths");
5
5
 
6
6
  const ROOT_CA_KEY_PATH = path.join(MITM_DIR, "rootCA.key");
7
7
  const ROOT_CA_CERT_PATH = path.join(MITM_DIR, "rootCA.crt");
8
- const ROOT_CA_CN = "OpenrouterX MITM Root CA";
9
- const ROOT_CA_ORG = "OpenrouterX";
10
8
 
11
9
  /**
12
10
  * Check if cert file is expired or expiring within 30 days
@@ -21,29 +19,18 @@ function isCertExpired(certPath) {
21
19
  }
22
20
  }
23
21
 
24
- function isOpenrouterXRootCA(certPath) {
25
- try {
26
- const cert = forge.pki.certificateFromPem(fs.readFileSync(certPath, "utf8"));
27
- const cn = cert.subject.getField("CN")?.value;
28
- const org = cert.subject.getField("O")?.value;
29
- return cn === ROOT_CA_CN && org === ROOT_CA_ORG;
30
- } catch {
31
- return false;
32
- }
33
- }
34
-
35
22
  /**
36
23
  * Generate Root CA certificate (only once, auto-regenerate if expired)
37
24
  * This Root CA will sign all dynamic leaf certificates
38
25
  */
39
26
  async function generateRootCA() {
40
27
  const exists = fs.existsSync(ROOT_CA_KEY_PATH) && fs.existsSync(ROOT_CA_CERT_PATH);
41
- if (exists && !isCertExpired(ROOT_CA_CERT_PATH) && isOpenrouterXRootCA(ROOT_CA_CERT_PATH)) {
28
+ if (exists && !isCertExpired(ROOT_CA_CERT_PATH)) {
42
29
  console.log("✅ Root CA already exists");
43
30
  return { key: ROOT_CA_KEY_PATH, cert: ROOT_CA_CERT_PATH };
44
31
  }
45
32
  if (exists) {
46
- console.log("🔐 Root CA expired, stale, or branded for legacy 9Router — regenerating...");
33
+ console.log("🔐 Root CA expired or expiring soon — regenerating...");
47
34
  try { fs.unlinkSync(ROOT_CA_KEY_PATH); } catch { /* ignore */ }
48
35
  try { fs.unlinkSync(ROOT_CA_CERT_PATH); } catch { /* ignore */ }
49
36
  }
@@ -66,8 +53,8 @@ async function generateRootCA() {
66
53
  cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10);
67
54
 
68
55
  const attrs = [
69
- { name: "commonName", value: ROOT_CA_CN },
70
- { name: "organizationName", value: ROOT_CA_ORG },
56
+ { name: "commonName", value: "9Router MITM Root CA" },
57
+ { name: "organizationName", value: "9Router" },
71
58
  { name: "countryName", value: "US" }
72
59
  ];
73
60
 
@@ -182,7 +169,5 @@ module.exports = {
182
169
  generateLeafCert,
183
170
  isCertExpired,
184
171
  ROOT_CA_CERT_PATH,
185
- ROOT_CA_KEY_PATH,
186
- ROOT_CA_CN,
187
- ROOT_CA_ORG
172
+ ROOT_CA_KEY_PATH
188
173
  };
@@ -1,16 +1,24 @@
1
1
  // All intercepted domains + URL patterns per tool
2
2
 
3
+ const fs = require("fs");
4
+
3
5
  const IS_DEV = process.env.NODE_ENV === "development";
4
6
 
7
+ // Resolve lsof absolute path — packaged apps / sudo secure_path may strip /usr/sbin from PATH
8
+ const LSOF_BIN = (() => {
9
+ if (process.platform === "win32") return null;
10
+ for (const p of ["/usr/sbin/lsof", "/usr/bin/lsof", "/sbin/lsof"]) {
11
+ try { fs.accessSync(p, fs.constants.X_OK); return p; } catch { /* try next */ }
12
+ }
13
+ return "lsof"; // last-resort fallback (depends on PATH)
14
+ })();
15
+
5
16
  const TARGET_HOSTS = [
6
17
  "daily-cloudcode-pa.googleapis.com",
7
18
  "cloudcode-pa.googleapis.com",
8
- "daily-cloudcode-pa.sandbox.googleapis.com",
9
19
  "api.individual.githubcopilot.com",
10
20
  "q.us-east-1.amazonaws.com",
11
21
  "api2.cursor.sh",
12
- "openrouter.ai",
13
- "api.openrouter.ai",
14
22
  ];
15
23
 
16
24
  const URL_PATTERNS = {
@@ -18,38 +26,18 @@ const URL_PATTERNS = {
18
26
  copilot: ["/chat/completions", "/v1/messages", "/responses"],
19
27
  kiro: ["/generateAssistantResponse"],
20
28
  cursor: ["/BidiAppend", "/RunSSE", "/RunPoll", "/Run"],
21
- openrouter: [
22
- "/models",
23
- "/api/v1/models",
24
- "/api/v1/key",
25
- "/api/v1/auth/key",
26
- "/chat/completions",
27
- "/v1/chat/completions",
28
- "/api/v1/chat/completions",
29
- "/v1/messages",
30
- "/responses",
31
- "/api/v1/responses",
32
- ],
33
29
  };
34
30
 
35
31
  // Synonym map: rawModel from request → canonical alias key in mitmAlias DB
36
32
  const MODEL_SYNONYMS = {
37
33
  antigravity: {
38
- "gemini-default": "gemini-3-flash",
39
- "gemini-3-flash-agent": "gemini-3-flash",
40
- "gemini-3.1-flash-lite": "gemini-3-flash",
41
- "tab_flash_lite_preview": "gemini-3-flash",
42
- "gemini-2.5-flash-lite": "gemini-3-flash",
43
- "gemini-2.5-flash": "gemini-3-flash",
44
- __defaults: {
45
- "gemini-3.1-pro-high": "gemini-3.1-pro-high",
46
- "gemini-3.1-pro-low": "gemini-3.1-pro-low",
47
- "gemini-3-flash-agent": "cx/gpt-5.5",
48
- "gemini-3-flash": "cx/gpt-5.5",
49
- "claude-sonnet-4-6": "claude-sonnet-4-6",
50
- "claude-opus-4-6-thinking": "claude-opus-4-6-thinking",
51
- "gpt-oss-120b-medium": "gpt-oss-120b-medium",
52
- },
34
+ "gemini-default": "gemini-3.5-flash-low",
35
+ "gemini-3.5-flash-high": "gemini-3-flash-agent",
36
+ "gemini-3.5-flash-medium": "gemini-3.5-flash-low",
37
+ "gemini-3.5-flash-extra-low": "gemini-3.5-flash-extra-low",
38
+ "gemini-3.1-pro-high": "gemini-pro-agent",
39
+ "gemini-3-pro-high": "gemini-pro-agent",
40
+ "gemini-3-pro-low": "gemini-3.1-pro-low",
53
41
  },
54
42
  };
55
43
 
@@ -57,15 +45,27 @@ const MODEL_SYNONYMS = {
57
45
  // Order matters: more specific patterns first. Catches AG renamed variants (e.g. gemini-pro-agent)
58
46
  const MODEL_PATTERNS = {
59
47
  antigravity: [
60
- { match: /flash/i, alias: "gemini-3-flash" },
61
- { match: /pro.*low|low.*pro/i, alias: "gemini-3.1-pro-low" },
62
- { match: /gemini.*pro|pro.*gemini/i, alias: "gemini-3.1-pro-high" },
63
- { match: /opus/i, alias: "claude-opus-4-6-thinking" },
64
- { match: /sonnet|claude/i, alias: "claude-sonnet-4-6" },
65
- { match: /gpt.*oss|oss/i, alias: "gpt-oss-120b-medium" },
48
+ { match: /flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i, alias: "gemini-3.5-flash-extra-low" },
49
+ { match: /flash.*medium|medium.*flash/i, alias: "gemini-3.5-flash-low" },
50
+ { match: /flash.*agent|agent.*flash|flash/i, alias: "gemini-3-flash-agent" },
51
+ { match: /pro.*low|low.*pro/i, alias: "gemini-3.1-pro-low" },
52
+ { match: /gemini.*pro|pro.*gemini/i, alias: "gemini-pro-agent" },
53
+ { match: /opus/i, alias: "claude-opus-4-6-thinking" },
54
+ { match: /sonnet|claude/i, alias: "claude-sonnet-4-6" },
55
+ { match: /gpt.*oss|oss/i, alias: "gpt-oss-120b-medium" },
66
56
  ],
67
57
  };
68
58
 
59
+ // Models that must NEVER be re-routed — always passthrough to the real upstream, even when
60
+ // the tool's other models are mapped. Antigravity's tab-autocomplete (`tab_jump_flash_lite_preview`,
61
+ // `tab_flash_lite_preview`, requestType tab/tab_jump) is latency-critical inline completion; routing
62
+ // it through 9Router to an external chat model makes typing laggy and burns provider quota per
63
+ // keystroke. Without this guard the broad `flash` pattern in MODEL_PATTERNS hijacks them onto the
64
+ // flash-agent slot. Verified via MITM dump capture of streamGenerateContent (see AI_JOURNAL).
65
+ const MODEL_NO_MAP = {
66
+ antigravity: [/^tab[_-]/i],
67
+ };
68
+
69
69
  // URL substrings whose request/response should NOT be dumped to file (telemetry, polling, empty)
70
70
  const LOG_BLACKLIST_URL_PARTS = [
71
71
  "recordCodeAssistMetrics",
@@ -78,11 +78,10 @@ const LOG_BLACKLIST_URL_PARTS = [
78
78
  function getToolForHost(host) {
79
79
  const h = (host || "").split(":")[0];
80
80
  if (h === "api.individual.githubcopilot.com") return "copilot";
81
- if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com" || h === "daily-cloudcode-pa.sandbox.googleapis.com") return "antigravity";
81
+ if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
82
82
  if (h === "q.us-east-1.amazonaws.com") return "kiro";
83
83
  if (h === "api2.cursor.sh") return "cursor";
84
- if (h === "openrouter.ai" || h === "api.openrouter.ai") return "openrouter";
85
84
  return null;
86
85
  }
87
86
 
88
- module.exports = { IS_DEV, TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, MODEL_PATTERNS, LOG_BLACKLIST_URL_PARTS, getToolForHost };
87
+ module.exports = { IS_DEV, LSOF_BIN, TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, MODEL_PATTERNS, MODEL_NO_MAP, LOG_BLACKLIST_URL_PARTS, getToolForHost };
@@ -12,8 +12,8 @@ const { runElevatedPowerShell, isAdmin } = require("../winElevated.js");
12
12
  * If anything fails mid-way, restore from `.bak`. Same-volume renames are atomic on NTFS.
13
13
  */
14
14
  function atomicWriteHostsWin(target, originalContent, newContent) {
15
- const tmpNew = `${target}.openrouterx.new`;
16
- const tmpBak = `${target}.openrouterx.bak`;
15
+ const tmpNew = `${target}.9router.new`;
16
+ const tmpBak = `${target}.9router.bak`;
17
17
  try {
18
18
  fs.writeFileSync(tmpNew, newContent, "utf8");
19
19
  try { fs.unlinkSync(tmpBak); } catch { /* none */ }
@@ -36,48 +36,6 @@ const IS_MAC = process.platform === "darwin";
36
36
  const HOSTS_FILE = IS_WIN
37
37
  ? path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts")
38
38
  : "/etc/hosts";
39
- const MAC_PF_ANTIGRAVITY_ANCHOR = "com.apple/openrouterx-mitm-antigravity";
40
- const MAC_ANTIGRAVITY_FALLBACK_IPS = [
41
- "216.239.32.223",
42
- "216.239.34.223",
43
- "216.239.36.223",
44
- "216.239.38.223",
45
- ];
46
- const MAC_ANTIGRAVITY_LEGACY_SHARED_IP_PREFIXES = [
47
- "142.250.",
48
- "142.251.",
49
- "172.217.",
50
- ];
51
- const REQUIRED_HOST_LOOPBACKS = IS_WIN ? ["127.0.0.1"] : ["127.0.0.1", "::1"];
52
-
53
- function isMacAntigravityPfRedirectEnabled(env = process.env) {
54
- return String(env.OPENROUTERX_MITM_ANTIGRAVITY_PF || "").trim() === "1";
55
- }
56
-
57
- function lineHasHostEntry(line, address, host) {
58
- const trimmed = String(line || "").trim();
59
- if (!trimmed || trimmed.startsWith("#")) return false;
60
- const parts = trimmed.split(/\s+/);
61
- return parts[0] === address && parts.slice(1).includes(host);
62
- }
63
-
64
- function hasHostLoopback(content, host, address) {
65
- return String(content || "")
66
- .split(/\r?\n/)
67
- .some((line) => lineHasHostEntry(line, address, host));
68
- }
69
-
70
- function hostHasRequiredLoopbacks(content, host, loopbacks = REQUIRED_HOST_LOOPBACKS) {
71
- return loopbacks.every((address) => hasHostLoopback(content, host, address));
72
- }
73
-
74
- function getMissingHostsEntries(content, hosts, loopbacks = REQUIRED_HOST_LOOPBACKS) {
75
- return hosts.flatMap((host) =>
76
- loopbacks
77
- .filter((address) => !hasHostLoopback(content, host, address))
78
- .map((address) => `${address} ${host}`)
79
- );
80
- }
81
39
 
82
40
  /** True when `sudo` exists (e.g. missing on minimal Docker images like Alpine). */
83
41
  function isSudoAvailable() {
@@ -152,111 +110,15 @@ async function flushDNS(sudoPassword) {
152
110
  }
153
111
  }
154
112
 
155
- function shellQuoteSingle(str) {
156
- return `'${String(str).replace(/'/g, "'\\''")}'`;
157
- }
158
-
159
- function getDefaultMacInterface() {
160
- if (!IS_MAC) return "";
161
- try {
162
- const out = execSync("route -n get default 2>/dev/null | awk '/interface:/{print $2; exit}'", {
163
- encoding: "utf8",
164
- windowsHide: true,
165
- }).trim();
166
- return out || "en0";
167
- } catch {
168
- return "en0";
169
- }
170
- }
171
-
172
- async function getMacAntigravityRedirectIPs() {
173
- return [...MAC_ANTIGRAVITY_FALLBACK_IPS];
174
- }
175
-
176
- function getMacLoopbackIPv4Aliases() {
177
- if (!IS_MAC) return [];
178
- try {
179
- const out = execSync("ifconfig lo0", { encoding: "utf8", windowsHide: true });
180
- return [...out.matchAll(/^\s+inet\s+(\d+\.\d+\.\d+\.\d+)\s+/gm)].map((m) => m[1]);
181
- } catch {
182
- return [];
183
- }
184
- }
185
-
186
- function getMacLegacyAntigravityAliases() {
187
- return getMacLoopbackIPv4Aliases().filter((ip) =>
188
- MAC_ANTIGRAVITY_LEGACY_SHARED_IP_PREFIXES.some((prefix) => ip.startsWith(prefix))
189
- );
190
- }
191
-
192
- async function enableMacAntigravityRedirect(sudoPassword) {
193
- if (!IS_MAC) return;
194
- if (!isMacAntigravityPfRedirectEnabled()) {
195
- await disableMacAntigravityRedirect(sudoPassword);
196
- log("🌐 PF antigravity: skipped (hosts-only mode; set OPENROUTERX_MITM_ANTIGRAVITY_PF=1 to opt in)");
197
- return;
198
- }
199
- const ips = await getMacAntigravityRedirectIPs();
200
- if (ips.length === 0) return;
201
-
202
- await enableMacAntigravityLoopbackAliases(sudoPassword, ips);
203
-
204
- const iface = getDefaultMacInterface();
205
- const rules = [
206
- `table <openrouterx_antigravity> persist { ${ips.join(", ")} }`,
207
- `rdr pass on ${iface} inet proto tcp from any to <openrouterx_antigravity> port 443 -> 127.0.0.1 port 443`,
208
- "",
209
- ].join("\n");
210
- const command = [
211
- "pfctl -E >/dev/null 2>&1 || true",
212
- `printf '%s' ${shellQuoteSingle(rules)} | pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -f -`,
213
- ].join(" && ");
214
-
215
- await execWithPassword(command, sudoPassword);
216
- log(`🌐 PF antigravity: ✅ redirect active on ${iface} (${ips.length} IPs)`);
217
- }
218
-
219
- async function disableMacAntigravityRedirect(sudoPassword) {
220
- if (!IS_MAC) return;
221
- const ips = [...new Set([
222
- ...await getMacAntigravityRedirectIPs(),
223
- ...getMacLegacyAntigravityAliases(),
224
- ])];
225
- await execWithPassword(`pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -F all >/dev/null 2>&1 || true`, sudoPassword);
226
- await disableMacAntigravityLoopbackAliases(sudoPassword, ips);
227
- log("🌐 PF antigravity: ✅ redirect removed");
228
- }
229
-
230
- async function enableMacAntigravityLoopbackAliases(sudoPassword, ips) {
231
- if (!IS_MAC || !ips.length) return;
232
- const commands = ips.map((ip) => `ifconfig lo0 alias ${ip}/32 2>/dev/null || true`);
233
- await execWithPassword(commands.join("; "), sudoPassword);
234
- log(`🌐 lo0 antigravity: ✅ aliases active (${ips.length} IPs)`);
235
- }
236
-
237
- async function disableMacAntigravityLoopbackAliases(sudoPassword, ips) {
238
- if (!IS_MAC || !ips.length) return;
239
- const commands = ips.map((ip) => `ifconfig lo0 -alias ${ip} 2>/dev/null || true`);
240
- await execWithPassword(commands.join("; "), sudoPassword);
241
- }
242
-
243
- async function ensureToolNetworkRedirect(tool, sudoPassword) {
244
- if (tool === "antigravity") await enableMacAntigravityRedirect(sudoPassword);
245
- }
246
-
247
- async function removeToolNetworkRedirect(tool, sudoPassword) {
248
- if (tool === "antigravity") await disableMacAntigravityRedirect(sudoPassword);
249
- }
250
-
251
113
  /**
252
114
  * Check if DNS entry exists for a specific host
253
115
  */
254
116
  function checkDNSEntry(host = null) {
255
117
  try {
256
118
  const hostsContent = fs.readFileSync(HOSTS_FILE, "utf8");
257
- if (host) return hostHasRequiredLoopbacks(hostsContent, host);
119
+ if (host) return hostsContent.includes(host);
258
120
  // Legacy: check all antigravity hosts (backward compat)
259
- return TOOL_HOSTS.antigravity.every(h => hostHasRequiredLoopbacks(hostsContent, h));
121
+ return TOOL_HOSTS.antigravity.every(h => hostsContent.includes(h));
260
122
  } catch {
261
123
  return false;
262
124
  }
@@ -270,7 +132,7 @@ function checkAllDNSStatus() {
270
132
  const hostsContent = fs.readFileSync(HOSTS_FILE, "utf8");
271
133
  const result = {};
272
134
  for (const [tool, hosts] of Object.entries(TOOL_HOSTS)) {
273
- result[tool] = hosts.every(h => hostHasRequiredLoopbacks(hostsContent, h));
135
+ result[tool] = hosts.every(h => hostsContent.includes(h));
274
136
  }
275
137
  return result;
276
138
  } catch {
@@ -285,34 +147,31 @@ async function addDNSEntry(tool, sudoPassword) {
285
147
  const hosts = TOOL_HOSTS[tool];
286
148
  if (!hosts) throw new Error(`Unknown tool: ${tool}`);
287
149
 
288
- const currentContent = fs.readFileSync(HOSTS_FILE, "utf8");
289
- const entriesToAdd = getMissingHostsEntries(currentContent, hosts);
150
+ const entriesToAdd = hosts.filter(h => !checkDNSEntry(h));
290
151
  if (entriesToAdd.length === 0) {
291
152
  log(`🌐 DNS ${tool}: already active`);
292
- await ensureToolNetworkRedirect(tool, sudoPassword);
293
153
  return;
294
154
  }
295
155
 
296
156
  try {
297
157
  if (IS_WIN) {
298
158
  // Read → trim → append → atomic write (Node-side, no CLI size limit)
299
- const current = currentContent;
159
+ const current = fs.readFileSync(HOSTS_FILE, "utf8");
300
160
  const trimmed = current.replace(/[\r\n\s]+$/g, "");
301
- const toAppend = entriesToAdd.join("\r\n");
161
+ const toAppend = entriesToAdd.map(h => `127.0.0.1 ${h}`).join("\r\n");
302
162
  const next = `${trimmed}\r\n${toAppend}\r\n`;
303
163
  atomicWriteHostsWin(HOSTS_FILE, current, next);
304
164
  await runElevatedPowerShell("ipconfig /flushdns | Out-Null");
305
165
  } else {
306
- const current = currentContent;
166
+ const current = fs.readFileSync(HOSTS_FILE, "utf8");
307
167
  const trimmed = current.replace(/[\r\n\s]+$/g, "");
308
- const toAppend = entriesToAdd.join("\n");
168
+ const toAppend = entriesToAdd.map(h => `127.0.0.1 ${h}`).join("\n");
309
169
  const next = `${trimmed}\n${toAppend}\n`;
310
170
  // Use tee via sudo to overwrite atomically — escape single quotes in content
311
171
  const escaped = next.replace(/'/g, "'\\''");
312
172
  await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
313
173
  await flushDNS(sudoPassword);
314
174
  }
315
- await ensureToolNetworkRedirect(tool, sudoPassword);
316
175
  log(`🌐 DNS ${tool}: ✅ added ${entriesToAdd.join(", ")}`);
317
176
  } catch (error) {
318
177
  const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to add DNS entry: ${error.message}`;
@@ -330,7 +189,6 @@ async function removeDNSEntry(tool, sudoPassword) {
330
189
  const entriesToRemove = hosts.filter(h => checkDNSEntry(h));
331
190
  if (entriesToRemove.length === 0) {
332
191
  log(`🌐 DNS ${tool}: already inactive`);
333
- await removeToolNetworkRedirect(tool, sudoPassword);
334
192
  return;
335
193
  }
336
194
 
@@ -349,7 +207,6 @@ async function removeDNSEntry(tool, sudoPassword) {
349
207
  await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
350
208
  await flushDNS(sudoPassword);
351
209
  }
352
- await removeToolNetworkRedirect(tool, sudoPassword);
353
210
  log(`🌐 DNS ${tool}: ✅ removed ${entriesToRemove.join(", ")}`);
354
211
  } catch (error) {
355
212
  const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to remove DNS entry: ${error.message}`;
@@ -376,12 +233,6 @@ async function removeAllDNSEntries(sudoPassword) {
376
233
  */
377
234
  function removeAllDNSEntriesSync() {
378
235
  try {
379
- if (IS_MAC) {
380
- try { execSync(`pfctl -a ${MAC_PF_ANTIGRAVITY_ANCHOR} -F all >/dev/null 2>&1 || true`, { stdio: "ignore" }); } catch { /* ignore */ }
381
- for (const ip of MAC_ANTIGRAVITY_FALLBACK_IPS) {
382
- try { execSync(`ifconfig lo0 -alias ${ip} 2>/dev/null || true`, { stdio: "ignore" }); } catch { /* ignore */ }
383
- }
384
- }
385
236
  if (!fs.existsSync(HOSTS_FILE)) return;
386
237
  const allHosts = Object.values(TOOL_HOSTS).flat();
387
238
  const content = fs.readFileSync(HOSTS_FILE, "utf8");
@@ -412,7 +263,4 @@ module.exports = {
412
263
  isSudoPasswordRequired,
413
264
  checkDNSEntry,
414
265
  checkAllDNSStatus,
415
- getMissingHostsEntries,
416
- hostHasRequiredLoopbacks,
417
- isMacAntigravityPfRedirectEnabled,
418
266
  };
@@ -1,19 +1,13 @@
1
- const { log, err, createResponseDumper } = require("../logger");
1
+ const { err, createResponseDumper } = require("../logger");
2
2
  const { IS_DEV } = require("../config");
3
3
  const { fetchRouter, pipeSSE } = require("./base");
4
4
 
5
- const NO_CREDENTIALS_MARKER = "No active credentials for provider";
6
-
7
5
  /**
8
6
  * Intercept Antigravity request — forward Gemini body as-is to /v1/chat/completions.
9
7
  * Router auto-detects format via body.userAgent==="antigravity" + body.request.contents,
10
8
  * runs antigravity→openai→provider→openai→antigravity translators internally.
11
- *
12
- * Graceful fallback: if Router returns 404 because no provider credentials are
13
- * configured, passthrough to the real upstream so Antigravity works out-of-the-box
14
- * without requiring a login in the Router dashboard.
15
9
  */
16
- async function intercept(req, res, bodyBuffer, mappedModel, passthrough) {
10
+ async function intercept(req, res, bodyBuffer, mappedModel) {
17
11
  const dumper = IS_DEV ? createResponseDumper(req, "intercept-antigravity") : null;
18
12
  const isStream = req.url.includes(":streamGenerateContent");
19
13
  try {
@@ -21,27 +15,6 @@ async function intercept(req, res, bodyBuffer, mappedModel, passthrough) {
21
15
  if (body.model) body.model = mappedModel;
22
16
 
23
17
  const routerRes = await fetchRouter(body, "/v1/chat/completions", req.headers);
24
-
25
- // Graceful fallback: no credentials in Router → passthrough to real upstream
26
- if (routerRes.status === 404) {
27
- const text = await routerRes.text();
28
- if (text.includes(NO_CREDENTIALS_MARKER)) {
29
- log(`⏩ passthrough | antigravity | no credentials for mapped model "${mappedModel || "unknown"}" — forwarding to real upstream`);
30
- if (dumper) {
31
- dumper.writeHeader(routerRes.status, Object.fromEntries(routerRes.headers));
32
- dumper.writeChunk(text);
33
- dumper.end();
34
- }
35
- return passthrough(req, res, bodyBuffer);
36
- }
37
- // Other 404 errors: propagate as-is
38
- if (!res.headersSent) {
39
- res.writeHead(404, { "Content-Type": "application/json" });
40
- res.end(text);
41
- }
42
- return;
43
- }
44
-
45
18
  await pipeSSE(routerRes, res, dumper);
46
19
  } catch (error) {
47
20
  err(`[antigravity] ${error.message}`);