@yina-npm/openrouterx 0.4.21 → 0.4.23

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 (530) hide show
  1. package/README.md +2 -0
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +5 -2
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/routes-manifest.json +18 -0
  6. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -2
  7. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -2
  9. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  11. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  13. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  15. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  17. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  19. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  21. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  23. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +2 -2
  25. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  27. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  29. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  31. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  33. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  35. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  37. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  39. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +3 -3
  41. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  43. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  45. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  47. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  49. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
  51. package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/_global-error/page.js +3 -3
  53. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/_global-error.html +1 -1
  55. package/app/.next/server/app/_global-error.rsc +1 -1
  56. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  57. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  58. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  59. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  60. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  61. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  62. package/app/.next/server/app/_not-found/page.js +2 -2
  63. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/_not-found.html +1 -1
  65. package/app/.next/server/app/_not-found.rsc +4 -4
  66. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  67. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  68. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  69. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  70. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  71. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  72. package/app/.next/server/app/api/auth/login/route.js +1 -1
  73. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  74. package/app/.next/server/app/api/auth/me/route.js +1 -1
  75. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  76. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  77. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js +1 -0
  78. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js.nft.json +1 -0
  79. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route_client-reference-manifest.js +1 -0
  80. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js +1 -0
  81. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js.nft.json +1 -0
  82. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route_client-reference-manifest.js +1 -0
  83. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  84. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js +1 -0
  85. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js.nft.json +1 -0
  86. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route_client-reference-manifest.js +1 -0
  87. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  88. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  89. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +1 -1
  90. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  91. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  92. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  93. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +1 -1
  94. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  95. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  96. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  97. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  98. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  99. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  100. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  101. package/app/.next/server/app/api/combos/route.js +1 -1
  102. package/app/.next/server/app/api/health/route.js +1 -1
  103. package/app/.next/server/app/api/init/route.js +1 -1
  104. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  105. package/app/.next/server/app/api/keys/route.js +1 -1
  106. package/app/.next/server/app/api/locale/route.js +1 -1
  107. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  108. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  109. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  110. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  111. package/app/.next/server/app/api/models/alias/route.js +1 -1
  112. package/app/.next/server/app/api/models/availability/route.js +1 -1
  113. package/app/.next/server/app/api/models/custom/route.js +1 -1
  114. package/app/.next/server/app/api/models/disabled/route.js +1 -1
  115. package/app/.next/server/app/api/models/route.js +1 -1
  116. package/app/.next/server/app/api/models/test/route.js +1 -1
  117. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  118. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  119. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  120. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  121. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  122. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  123. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  124. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  125. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  126. package/app/.next/server/app/api/pricing/route.js +1 -1
  127. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  128. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  129. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  130. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  131. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  132. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  133. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  134. package/app/.next/server/app/api/providers/client/route.js +1 -1
  135. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  136. package/app/.next/server/app/api/providers/route.js +1 -1
  137. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  138. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  139. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  140. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  141. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  142. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  143. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  144. package/app/.next/server/app/api/settings/database/route.js +1 -1
  145. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  146. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  147. package/app/.next/server/app/api/settings/route.js +1 -1
  148. package/app/.next/server/app/api/shutdown/route.js +1 -1
  149. package/app/.next/server/app/api/tags/route.js +1 -1
  150. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  151. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  152. package/app/.next/server/app/api/translator/load/route.js +1 -1
  153. package/app/.next/server/app/api/translator/save/route.js +1 -1
  154. package/app/.next/server/app/api/translator/send/route.js +1 -1
  155. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  156. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  157. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  158. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  159. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  160. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  161. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  162. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  163. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +1 -1
  164. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  165. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  166. package/app/.next/server/app/api/usage/api-keys/route.js +1 -1
  167. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  168. package/app/.next/server/app/api/usage/history/route.js +1 -1
  169. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  170. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  171. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  172. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  173. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  174. package/app/.next/server/app/api/usage/stream/route.js +2 -2
  175. package/app/.next/server/app/api/users/[id]/route.js +1 -1
  176. package/app/.next/server/app/api/users/route.js +1 -1
  177. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  178. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  179. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  180. package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
  181. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  182. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  183. package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
  184. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  185. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  186. package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
  187. package/app/.next/server/app/api/v1/models/info/route.js +1 -1
  188. package/app/.next/server/app/api/v1/models/route.js +1 -1
  189. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  190. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  191. package/app/.next/server/app/api/v1/route.js +1 -1
  192. package/app/.next/server/app/api/v1/search/route.js +1 -1
  193. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  194. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  195. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  196. package/app/.next/server/app/api/version/route.js +1 -1
  197. package/app/.next/server/app/api/version/update/route.js +1 -1
  198. package/app/.next/server/app/callback/page.js +2 -2
  199. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/callback.html +1 -1
  201. package/app/.next/server/app/callback.rsc +4 -4
  202. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  203. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  204. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  205. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  206. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  207. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  208. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  209. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  210. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  211. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  212. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  213. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  214. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  215. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  216. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  217. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  218. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  219. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  220. package/app/.next/server/app/favicon.ico/route.js +1 -1
  221. package/app/.next/server/app/index.html +1 -1
  222. package/app/.next/server/app/index.rsc +4 -4
  223. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  224. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  225. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  226. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  227. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  228. package/app/.next/server/app/landing/page.js +2 -2
  229. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  230. package/app/.next/server/app/landing.html +1 -1
  231. package/app/.next/server/app/landing.rsc +4 -4
  232. package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  233. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  234. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  235. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  236. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  237. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  238. package/app/.next/server/app/login/page.js +2 -2
  239. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  240. package/app/.next/server/app/login.html +1 -1
  241. package/app/.next/server/app/login.rsc +5 -5
  242. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  243. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  244. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  245. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  246. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  247. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  248. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  249. package/app/.next/server/app/page.js +2 -2
  250. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  251. package/app/.next/server/app-paths-manifest.json +5 -2
  252. package/app/.next/server/chunks/4122.js +1 -1
  253. package/app/.next/server/chunks/5627.js +6 -4
  254. package/app/.next/server/chunks/6182.js +2 -2
  255. package/app/.next/server/chunks/7595.js +1 -1
  256. package/app/.next/server/chunks/7937.js +1 -1
  257. package/app/.next/server/chunks/9547.js +17 -2
  258. package/app/.next/server/functions-config-manifest.json +1 -0
  259. package/app/.next/server/middleware-build-manifest.js +1 -1
  260. package/app/.next/server/pages/404.html +1 -1
  261. package/app/.next/server/pages/500.html +1 -1
  262. package/app/.next/static/chunks/{1321-b84130cd27e8b78c.js → 1321-c90a1f54884edb62.js} +1 -1
  263. package/app/.next/static/chunks/{2336-5b3617dc05c223ff.js → 2336-4ac589bb36571207.js} +19 -4
  264. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-6ec61ce021cdb9a6.js +1 -0
  265. package/app/.next/static/chunks/app/_global-error/page-6ec61ce021cdb9a6.js +1 -0
  266. package/app/.next/static/chunks/app/api/auth/login/route-6ec61ce021cdb9a6.js +1 -0
  267. package/app/.next/static/chunks/app/api/auth/logout/route-6ec61ce021cdb9a6.js +1 -0
  268. package/app/.next/static/chunks/app/api/auth/me/route-6ec61ce021cdb9a6.js +1 -0
  269. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-6ec61ce021cdb9a6.js +1 -0
  270. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/inject-auth/route-6ec61ce021cdb9a6.js +1 -0
  271. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/restart/route-6ec61ce021cdb9a6.js +1 -0
  272. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-6ec61ce021cdb9a6.js +1 -0
  273. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/test/route-6ec61ce021cdb9a6.js +1 -0
  274. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-6ec61ce021cdb9a6.js +1 -0
  275. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-6ec61ce021cdb9a6.js +1 -0
  276. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-6ec61ce021cdb9a6.js +1 -0
  277. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-6ec61ce021cdb9a6.js +1 -0
  278. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-6ec61ce021cdb9a6.js +1 -0
  279. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-6ec61ce021cdb9a6.js +1 -0
  280. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-6ec61ce021cdb9a6.js +1 -0
  281. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-6ec61ce021cdb9a6.js +1 -0
  282. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-6ec61ce021cdb9a6.js +1 -0
  283. package/app/.next/static/chunks/app/api/cloud/auth/route-6ec61ce021cdb9a6.js +1 -0
  284. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-6ec61ce021cdb9a6.js +1 -0
  285. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-6ec61ce021cdb9a6.js +1 -0
  286. package/app/.next/static/chunks/app/api/cloud/models/alias/route-6ec61ce021cdb9a6.js +1 -0
  287. package/app/.next/static/chunks/app/api/combos/[id]/route-6ec61ce021cdb9a6.js +1 -0
  288. package/app/.next/static/chunks/app/api/combos/route-6ec61ce021cdb9a6.js +1 -0
  289. package/app/.next/static/chunks/app/api/health/route-6ec61ce021cdb9a6.js +1 -0
  290. package/app/.next/static/chunks/app/api/init/route-6ec61ce021cdb9a6.js +1 -0
  291. package/app/.next/static/chunks/app/api/keys/[id]/route-6ec61ce021cdb9a6.js +1 -0
  292. package/app/.next/static/chunks/app/api/keys/route-6ec61ce021cdb9a6.js +1 -0
  293. package/app/.next/static/chunks/app/api/locale/route-6ec61ce021cdb9a6.js +1 -0
  294. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-6ec61ce021cdb9a6.js +1 -0
  295. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-6ec61ce021cdb9a6.js +1 -0
  296. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-6ec61ce021cdb9a6.js +1 -0
  297. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-6ec61ce021cdb9a6.js +1 -0
  298. package/app/.next/static/chunks/app/api/models/alias/route-6ec61ce021cdb9a6.js +1 -0
  299. package/app/.next/static/chunks/app/api/models/availability/route-6ec61ce021cdb9a6.js +1 -0
  300. package/app/.next/static/chunks/app/api/models/custom/route-6ec61ce021cdb9a6.js +1 -0
  301. package/app/.next/static/chunks/app/api/models/disabled/route-6ec61ce021cdb9a6.js +1 -0
  302. package/app/.next/static/chunks/app/api/models/route-6ec61ce021cdb9a6.js +1 -0
  303. package/app/.next/static/chunks/app/api/models/test/route-6ec61ce021cdb9a6.js +1 -0
  304. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-6ec61ce021cdb9a6.js +1 -0
  305. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-6ec61ce021cdb9a6.js +1 -0
  306. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-6ec61ce021cdb9a6.js +1 -0
  307. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-6ec61ce021cdb9a6.js +1 -0
  308. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-6ec61ce021cdb9a6.js +1 -0
  309. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-6ec61ce021cdb9a6.js +1 -0
  310. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-6ec61ce021cdb9a6.js +1 -0
  311. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-6ec61ce021cdb9a6.js +1 -0
  312. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-6ec61ce021cdb9a6.js +1 -0
  313. package/app/.next/static/chunks/app/api/pricing/route-6ec61ce021cdb9a6.js +1 -0
  314. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-6ec61ce021cdb9a6.js +1 -0
  315. package/app/.next/static/chunks/app/api/provider-nodes/route-6ec61ce021cdb9a6.js +1 -0
  316. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-6ec61ce021cdb9a6.js +1 -0
  317. package/app/.next/static/chunks/app/api/providers/[id]/models/route-6ec61ce021cdb9a6.js +1 -0
  318. package/app/.next/static/chunks/app/api/providers/[id]/route-6ec61ce021cdb9a6.js +1 -0
  319. package/app/.next/static/chunks/app/api/providers/[id]/test/route-6ec61ce021cdb9a6.js +1 -0
  320. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-6ec61ce021cdb9a6.js +1 -0
  321. package/app/.next/static/chunks/app/api/providers/client/route-6ec61ce021cdb9a6.js +1 -0
  322. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-6ec61ce021cdb9a6.js +1 -0
  323. package/app/.next/static/chunks/app/api/providers/route-6ec61ce021cdb9a6.js +1 -0
  324. package/app/.next/static/chunks/app/api/providers/suggested-models/route-6ec61ce021cdb9a6.js +1 -0
  325. package/app/.next/static/chunks/app/api/providers/test-batch/route-6ec61ce021cdb9a6.js +1 -0
  326. package/app/.next/static/chunks/app/api/providers/validate/route-6ec61ce021cdb9a6.js +1 -0
  327. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-6ec61ce021cdb9a6.js +1 -0
  328. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-6ec61ce021cdb9a6.js +1 -0
  329. package/app/.next/static/chunks/app/api/proxy-pools/route-6ec61ce021cdb9a6.js +1 -0
  330. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-6ec61ce021cdb9a6.js +1 -0
  331. package/app/.next/static/chunks/app/api/settings/database/route-6ec61ce021cdb9a6.js +1 -0
  332. package/app/.next/static/chunks/app/api/settings/proxy-test/route-6ec61ce021cdb9a6.js +1 -0
  333. package/app/.next/static/chunks/app/api/settings/require-login/route-6ec61ce021cdb9a6.js +1 -0
  334. package/app/.next/static/chunks/app/api/settings/route-6ec61ce021cdb9a6.js +1 -0
  335. package/app/.next/static/chunks/app/api/shutdown/route-6ec61ce021cdb9a6.js +1 -0
  336. package/app/.next/static/chunks/app/api/tags/route-6ec61ce021cdb9a6.js +1 -0
  337. package/app/.next/static/chunks/app/api/translator/console-logs/route-6ec61ce021cdb9a6.js +1 -0
  338. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-6ec61ce021cdb9a6.js +1 -0
  339. package/app/.next/static/chunks/app/api/translator/load/route-6ec61ce021cdb9a6.js +1 -0
  340. package/app/.next/static/chunks/app/api/translator/save/route-6ec61ce021cdb9a6.js +1 -0
  341. package/app/.next/static/chunks/app/api/translator/send/route-6ec61ce021cdb9a6.js +1 -0
  342. package/app/.next/static/chunks/app/api/translator/translate/route-6ec61ce021cdb9a6.js +1 -0
  343. package/app/.next/static/chunks/app/api/tunnel/disable/route-6ec61ce021cdb9a6.js +1 -0
  344. package/app/.next/static/chunks/app/api/tunnel/enable/route-6ec61ce021cdb9a6.js +1 -0
  345. package/app/.next/static/chunks/app/api/tunnel/status/route-6ec61ce021cdb9a6.js +1 -0
  346. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-6ec61ce021cdb9a6.js +1 -0
  347. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-6ec61ce021cdb9a6.js +1 -0
  348. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-6ec61ce021cdb9a6.js +1 -0
  349. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-6ec61ce021cdb9a6.js +1 -0
  350. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-6ec61ce021cdb9a6.js +1 -0
  351. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-6ec61ce021cdb9a6.js +1 -0
  352. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-6ec61ce021cdb9a6.js +1 -0
  353. package/app/.next/static/chunks/app/api/usage/api-keys/route-6ec61ce021cdb9a6.js +1 -0
  354. package/app/.next/static/chunks/app/api/usage/chart/route-6ec61ce021cdb9a6.js +1 -0
  355. package/app/.next/static/chunks/app/api/usage/history/route-6ec61ce021cdb9a6.js +1 -0
  356. package/app/.next/static/chunks/app/api/usage/logs/route-6ec61ce021cdb9a6.js +1 -0
  357. package/app/.next/static/chunks/app/api/usage/providers/route-6ec61ce021cdb9a6.js +1 -0
  358. package/app/.next/static/chunks/app/api/usage/request-details/route-6ec61ce021cdb9a6.js +1 -0
  359. package/app/.next/static/chunks/app/api/usage/request-logs/route-6ec61ce021cdb9a6.js +1 -0
  360. package/app/.next/static/chunks/app/api/usage/stats/route-6ec61ce021cdb9a6.js +1 -0
  361. package/app/.next/static/chunks/app/api/usage/stream/route-6ec61ce021cdb9a6.js +1 -0
  362. package/app/.next/static/chunks/app/api/users/[id]/route-6ec61ce021cdb9a6.js +1 -0
  363. package/app/.next/static/chunks/app/api/users/route-6ec61ce021cdb9a6.js +1 -0
  364. package/app/.next/static/chunks/app/api/v1/api/chat/route-6ec61ce021cdb9a6.js +1 -0
  365. package/app/.next/static/chunks/app/api/v1/audio/speech/route-6ec61ce021cdb9a6.js +1 -0
  366. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-6ec61ce021cdb9a6.js +1 -0
  367. package/app/.next/static/chunks/app/api/v1/audio/voices/route-6ec61ce021cdb9a6.js +1 -0
  368. package/app/.next/static/chunks/app/api/v1/chat/completions/route-6ec61ce021cdb9a6.js +1 -0
  369. package/app/.next/static/chunks/app/api/v1/embeddings/route-6ec61ce021cdb9a6.js +1 -0
  370. package/app/.next/static/chunks/app/api/v1/images/generations/route-6ec61ce021cdb9a6.js +1 -0
  371. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-6ec61ce021cdb9a6.js +1 -0
  372. package/app/.next/static/chunks/app/api/v1/messages/route-6ec61ce021cdb9a6.js +1 -0
  373. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-6ec61ce021cdb9a6.js +1 -0
  374. package/app/.next/static/chunks/app/api/v1/models/info/route-6ec61ce021cdb9a6.js +1 -0
  375. package/app/.next/static/chunks/app/api/v1/models/route-6ec61ce021cdb9a6.js +1 -0
  376. package/app/.next/static/chunks/app/api/v1/responses/compact/route-6ec61ce021cdb9a6.js +1 -0
  377. package/app/.next/static/chunks/app/api/v1/responses/route-6ec61ce021cdb9a6.js +1 -0
  378. package/app/.next/static/chunks/app/api/v1/route-6ec61ce021cdb9a6.js +1 -0
  379. package/app/.next/static/chunks/app/api/v1/search/route-6ec61ce021cdb9a6.js +1 -0
  380. package/app/.next/static/chunks/app/api/v1/web/fetch/route-6ec61ce021cdb9a6.js +1 -0
  381. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-6ec61ce021cdb9a6.js +1 -0
  382. package/app/.next/static/chunks/app/api/v1beta/models/route-6ec61ce021cdb9a6.js +1 -0
  383. package/app/.next/static/chunks/app/api/version/route-6ec61ce021cdb9a6.js +1 -0
  384. package/app/.next/static/chunks/app/api/version/update/route-6ec61ce021cdb9a6.js +1 -0
  385. package/app/.next/static/chunks/app/manifest.webmanifest/route-6ec61ce021cdb9a6.js +1 -0
  386. package/app/.next/static/chunks/app/page-6ec61ce021cdb9a6.js +1 -0
  387. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-6ec61ce021cdb9a6.js +1 -0
  388. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-6ec61ce021cdb9a6.js +1 -0
  389. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-6ec61ce021cdb9a6.js +1 -0
  390. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6ec61ce021cdb9a6.js +1 -0
  391. package/app/.next/static/css/81b7abc9204a4458.css +1 -0
  392. package/app/.next/static/s_c_Y_7O0OBMovBwrwXBp/_buildManifest.js +1 -0
  393. package/app/package.json +1 -1
  394. package/app/src/mitm/antigravityAvailableModels.fixture.json +632 -0
  395. package/app/src/mitm/antigravityModels.js +265 -0
  396. package/app/src/mitm/config.js +18 -2
  397. package/app/src/mitm/dns/dnsConfig.js +113 -0
  398. package/app/src/mitm/handlers/antigravity.js +29 -2
  399. package/app/src/mitm/logger.js +1 -1
  400. package/app/src/mitm/manager.js +9 -1
  401. package/app/src/mitm/server.js +219 -18
  402. package/app/src/shared/constants/mitmToolHosts.js +5 -1
  403. package/package.json +1 -1
  404. package/app/.next/static/2TCKT7FIN7PE7ZJ20oAeb/_buildManifest.js +0 -1
  405. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-d1c369e2c3fb727b.js +0 -1
  406. package/app/.next/static/chunks/app/_global-error/page-d1c369e2c3fb727b.js +0 -1
  407. package/app/.next/static/chunks/app/api/auth/login/route-d1c369e2c3fb727b.js +0 -1
  408. package/app/.next/static/chunks/app/api/auth/logout/route-d1c369e2c3fb727b.js +0 -1
  409. package/app/.next/static/chunks/app/api/auth/me/route-d1c369e2c3fb727b.js +0 -1
  410. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d1c369e2c3fb727b.js +0 -1
  411. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d1c369e2c3fb727b.js +0 -1
  412. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d1c369e2c3fb727b.js +0 -1
  413. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d1c369e2c3fb727b.js +0 -1
  414. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-d1c369e2c3fb727b.js +0 -1
  415. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-d1c369e2c3fb727b.js +0 -1
  416. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-d1c369e2c3fb727b.js +0 -1
  417. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d1c369e2c3fb727b.js +0 -1
  418. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-d1c369e2c3fb727b.js +0 -1
  419. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d1c369e2c3fb727b.js +0 -1
  420. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-d1c369e2c3fb727b.js +0 -1
  421. package/app/.next/static/chunks/app/api/cloud/auth/route-d1c369e2c3fb727b.js +0 -1
  422. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-d1c369e2c3fb727b.js +0 -1
  423. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-d1c369e2c3fb727b.js +0 -1
  424. package/app/.next/static/chunks/app/api/cloud/models/alias/route-d1c369e2c3fb727b.js +0 -1
  425. package/app/.next/static/chunks/app/api/combos/[id]/route-d1c369e2c3fb727b.js +0 -1
  426. package/app/.next/static/chunks/app/api/combos/route-d1c369e2c3fb727b.js +0 -1
  427. package/app/.next/static/chunks/app/api/health/route-d1c369e2c3fb727b.js +0 -1
  428. package/app/.next/static/chunks/app/api/init/route-d1c369e2c3fb727b.js +0 -1
  429. package/app/.next/static/chunks/app/api/keys/[id]/route-d1c369e2c3fb727b.js +0 -1
  430. package/app/.next/static/chunks/app/api/keys/route-d1c369e2c3fb727b.js +0 -1
  431. package/app/.next/static/chunks/app/api/locale/route-d1c369e2c3fb727b.js +0 -1
  432. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-d1c369e2c3fb727b.js +0 -1
  433. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-d1c369e2c3fb727b.js +0 -1
  434. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-d1c369e2c3fb727b.js +0 -1
  435. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-d1c369e2c3fb727b.js +0 -1
  436. package/app/.next/static/chunks/app/api/models/alias/route-d1c369e2c3fb727b.js +0 -1
  437. package/app/.next/static/chunks/app/api/models/availability/route-d1c369e2c3fb727b.js +0 -1
  438. package/app/.next/static/chunks/app/api/models/custom/route-d1c369e2c3fb727b.js +0 -1
  439. package/app/.next/static/chunks/app/api/models/disabled/route-d1c369e2c3fb727b.js +0 -1
  440. package/app/.next/static/chunks/app/api/models/route-d1c369e2c3fb727b.js +0 -1
  441. package/app/.next/static/chunks/app/api/models/test/route-d1c369e2c3fb727b.js +0 -1
  442. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d1c369e2c3fb727b.js +0 -1
  443. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d1c369e2c3fb727b.js +0 -1
  444. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d1c369e2c3fb727b.js +0 -1
  445. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-d1c369e2c3fb727b.js +0 -1
  446. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-d1c369e2c3fb727b.js +0 -1
  447. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d1c369e2c3fb727b.js +0 -1
  448. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d1c369e2c3fb727b.js +0 -1
  449. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d1c369e2c3fb727b.js +0 -1
  450. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d1c369e2c3fb727b.js +0 -1
  451. package/app/.next/static/chunks/app/api/pricing/route-d1c369e2c3fb727b.js +0 -1
  452. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d1c369e2c3fb727b.js +0 -1
  453. package/app/.next/static/chunks/app/api/provider-nodes/route-d1c369e2c3fb727b.js +0 -1
  454. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d1c369e2c3fb727b.js +0 -1
  455. package/app/.next/static/chunks/app/api/providers/[id]/models/route-d1c369e2c3fb727b.js +0 -1
  456. package/app/.next/static/chunks/app/api/providers/[id]/route-d1c369e2c3fb727b.js +0 -1
  457. package/app/.next/static/chunks/app/api/providers/[id]/test/route-d1c369e2c3fb727b.js +0 -1
  458. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-d1c369e2c3fb727b.js +0 -1
  459. package/app/.next/static/chunks/app/api/providers/client/route-d1c369e2c3fb727b.js +0 -1
  460. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-d1c369e2c3fb727b.js +0 -1
  461. package/app/.next/static/chunks/app/api/providers/route-d1c369e2c3fb727b.js +0 -1
  462. package/app/.next/static/chunks/app/api/providers/suggested-models/route-d1c369e2c3fb727b.js +0 -1
  463. package/app/.next/static/chunks/app/api/providers/test-batch/route-d1c369e2c3fb727b.js +0 -1
  464. package/app/.next/static/chunks/app/api/providers/validate/route-d1c369e2c3fb727b.js +0 -1
  465. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-d1c369e2c3fb727b.js +0 -1
  466. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-d1c369e2c3fb727b.js +0 -1
  467. package/app/.next/static/chunks/app/api/proxy-pools/route-d1c369e2c3fb727b.js +0 -1
  468. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-d1c369e2c3fb727b.js +0 -1
  469. package/app/.next/static/chunks/app/api/settings/database/route-d1c369e2c3fb727b.js +0 -1
  470. package/app/.next/static/chunks/app/api/settings/proxy-test/route-d1c369e2c3fb727b.js +0 -1
  471. package/app/.next/static/chunks/app/api/settings/require-login/route-d1c369e2c3fb727b.js +0 -1
  472. package/app/.next/static/chunks/app/api/settings/route-d1c369e2c3fb727b.js +0 -1
  473. package/app/.next/static/chunks/app/api/shutdown/route-d1c369e2c3fb727b.js +0 -1
  474. package/app/.next/static/chunks/app/api/tags/route-d1c369e2c3fb727b.js +0 -1
  475. package/app/.next/static/chunks/app/api/translator/console-logs/route-d1c369e2c3fb727b.js +0 -1
  476. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-d1c369e2c3fb727b.js +0 -1
  477. package/app/.next/static/chunks/app/api/translator/load/route-d1c369e2c3fb727b.js +0 -1
  478. package/app/.next/static/chunks/app/api/translator/save/route-d1c369e2c3fb727b.js +0 -1
  479. package/app/.next/static/chunks/app/api/translator/send/route-d1c369e2c3fb727b.js +0 -1
  480. package/app/.next/static/chunks/app/api/translator/translate/route-d1c369e2c3fb727b.js +0 -1
  481. package/app/.next/static/chunks/app/api/tunnel/disable/route-d1c369e2c3fb727b.js +0 -1
  482. package/app/.next/static/chunks/app/api/tunnel/enable/route-d1c369e2c3fb727b.js +0 -1
  483. package/app/.next/static/chunks/app/api/tunnel/status/route-d1c369e2c3fb727b.js +0 -1
  484. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-d1c369e2c3fb727b.js +0 -1
  485. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-d1c369e2c3fb727b.js +0 -1
  486. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-d1c369e2c3fb727b.js +0 -1
  487. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-d1c369e2c3fb727b.js +0 -1
  488. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-d1c369e2c3fb727b.js +0 -1
  489. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-d1c369e2c3fb727b.js +0 -1
  490. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d1c369e2c3fb727b.js +0 -1
  491. package/app/.next/static/chunks/app/api/usage/api-keys/route-d1c369e2c3fb727b.js +0 -1
  492. package/app/.next/static/chunks/app/api/usage/chart/route-d1c369e2c3fb727b.js +0 -1
  493. package/app/.next/static/chunks/app/api/usage/history/route-d1c369e2c3fb727b.js +0 -1
  494. package/app/.next/static/chunks/app/api/usage/logs/route-d1c369e2c3fb727b.js +0 -1
  495. package/app/.next/static/chunks/app/api/usage/providers/route-d1c369e2c3fb727b.js +0 -1
  496. package/app/.next/static/chunks/app/api/usage/request-details/route-d1c369e2c3fb727b.js +0 -1
  497. package/app/.next/static/chunks/app/api/usage/request-logs/route-d1c369e2c3fb727b.js +0 -1
  498. package/app/.next/static/chunks/app/api/usage/stats/route-d1c369e2c3fb727b.js +0 -1
  499. package/app/.next/static/chunks/app/api/usage/stream/route-d1c369e2c3fb727b.js +0 -1
  500. package/app/.next/static/chunks/app/api/users/[id]/route-d1c369e2c3fb727b.js +0 -1
  501. package/app/.next/static/chunks/app/api/users/route-d1c369e2c3fb727b.js +0 -1
  502. package/app/.next/static/chunks/app/api/v1/api/chat/route-d1c369e2c3fb727b.js +0 -1
  503. package/app/.next/static/chunks/app/api/v1/audio/speech/route-d1c369e2c3fb727b.js +0 -1
  504. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-d1c369e2c3fb727b.js +0 -1
  505. package/app/.next/static/chunks/app/api/v1/audio/voices/route-d1c369e2c3fb727b.js +0 -1
  506. package/app/.next/static/chunks/app/api/v1/chat/completions/route-d1c369e2c3fb727b.js +0 -1
  507. package/app/.next/static/chunks/app/api/v1/embeddings/route-d1c369e2c3fb727b.js +0 -1
  508. package/app/.next/static/chunks/app/api/v1/images/generations/route-d1c369e2c3fb727b.js +0 -1
  509. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d1c369e2c3fb727b.js +0 -1
  510. package/app/.next/static/chunks/app/api/v1/messages/route-d1c369e2c3fb727b.js +0 -1
  511. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-d1c369e2c3fb727b.js +0 -1
  512. package/app/.next/static/chunks/app/api/v1/models/info/route-d1c369e2c3fb727b.js +0 -1
  513. package/app/.next/static/chunks/app/api/v1/models/route-d1c369e2c3fb727b.js +0 -1
  514. package/app/.next/static/chunks/app/api/v1/responses/compact/route-d1c369e2c3fb727b.js +0 -1
  515. package/app/.next/static/chunks/app/api/v1/responses/route-d1c369e2c3fb727b.js +0 -1
  516. package/app/.next/static/chunks/app/api/v1/route-d1c369e2c3fb727b.js +0 -1
  517. package/app/.next/static/chunks/app/api/v1/search/route-d1c369e2c3fb727b.js +0 -1
  518. package/app/.next/static/chunks/app/api/v1/web/fetch/route-d1c369e2c3fb727b.js +0 -1
  519. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d1c369e2c3fb727b.js +0 -1
  520. package/app/.next/static/chunks/app/api/v1beta/models/route-d1c369e2c3fb727b.js +0 -1
  521. package/app/.next/static/chunks/app/api/version/route-d1c369e2c3fb727b.js +0 -1
  522. package/app/.next/static/chunks/app/api/version/update/route-d1c369e2c3fb727b.js +0 -1
  523. package/app/.next/static/chunks/app/manifest.webmanifest/route-d1c369e2c3fb727b.js +0 -1
  524. package/app/.next/static/chunks/app/page-d1c369e2c3fb727b.js +0 -1
  525. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d1c369e2c3fb727b.js +0 -1
  526. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1c369e2c3fb727b.js +0 -1
  527. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d1c369e2c3fb727b.js +0 -1
  528. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1c369e2c3fb727b.js +0 -1
  529. package/app/.next/static/css/48caf49054c81db9.css +0 -1
  530. /package/app/.next/static/{2TCKT7FIN7PE7ZJ20oAeb → s_c_Y_7O0OBMovBwrwXBp}/_ssgManifest.js +0 -0
@@ -0,0 +1,265 @@
1
+ const REAL_AVAILABLE_MODELS_FIXTURE = require("./antigravityAvailableModels.fixture.json");
2
+
3
+ const BASE_MODEL_EXPERIMENTS = {
4
+ experiments: {
5
+ CASCADE_USE_EXPERIMENT_CHECKPOINTER: {
6
+ stringValue: JSON.stringify({
7
+ strategy: "CHECKPOINT_STRATEGY_SINGLE_PROMPT",
8
+ max_token_limit: "128000",
9
+ token_threshold: "50000",
10
+ max_overhead_ratio: "0.15",
11
+ moving_window_size: "1",
12
+ enabled: true,
13
+ max_output_tokens: "16384",
14
+ checkpoint_model: "MODEL_PLACEHOLDER_M50",
15
+ retry_config: {
16
+ max_retries: 0,
17
+ initial_sleep_duration_ms: 1000,
18
+ exponential_multiplier: 2,
19
+ include_error_feedback: false,
20
+ },
21
+ }, null, 4),
22
+ },
23
+ },
24
+ };
25
+
26
+ const COMMON_CODE_MIME_TYPES = {
27
+ "application/json": true,
28
+ "application/pdf": true,
29
+ "application/rtf": true,
30
+ "application/x-ipynb+json": true,
31
+ "application/x-javascript": true,
32
+ "application/x-python-code": true,
33
+ "application/x-typescript": true,
34
+ "image/heic": true,
35
+ "image/heif": true,
36
+ "image/jpeg": true,
37
+ "image/png": true,
38
+ "image/webp": true,
39
+ "text/css": true,
40
+ "text/csv": true,
41
+ "text/html": true,
42
+ "text/javascript": true,
43
+ "text/markdown": true,
44
+ "text/plain": true,
45
+ "text/rtf": true,
46
+ "text/x-python": true,
47
+ "text/x-python-script": true,
48
+ "text/x-typescript": true,
49
+ "text/xml": true,
50
+ "video/mp4": true,
51
+ "video/webm": true,
52
+ };
53
+
54
+ function quota(resetDays = 7) {
55
+ const resetTime = new Date(Date.now() + resetDays * 24 * 60 * 60 * 1000).toISOString();
56
+ return { remainingFraction: 1, resetTime };
57
+ }
58
+
59
+ function geminiModel(displayName, model, options = {}) {
60
+ return {
61
+ displayName,
62
+ supportsImages: true,
63
+ supportsThinking: true,
64
+ thinkingBudget: options.thinkingBudget ?? 1024,
65
+ minThinkingBudget: options.minThinkingBudget ?? 128,
66
+ recommended: true,
67
+ maxTokens: 1048576,
68
+ maxOutputTokens: 65535,
69
+ tokenizerType: "LLAMA_WITH_SPECIAL",
70
+ quotaInfo: quota(options.resetDays),
71
+ model,
72
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
73
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
74
+ supportsVideo: true,
75
+ supportedMimeTypes: COMMON_CODE_MIME_TYPES,
76
+ requiresImageOutputOutsideFunctionResponses: options.requiresImageOutputOutsideFunctionResponses,
77
+ modelExperiments: BASE_MODEL_EXPERIMENTS,
78
+ };
79
+ }
80
+
81
+ function anthropicModel(displayName, model) {
82
+ return {
83
+ displayName,
84
+ supportsImages: true,
85
+ supportsThinking: true,
86
+ thinkingBudget: 1024,
87
+ recommended: true,
88
+ maxTokens: 250000,
89
+ maxOutputTokens: 64000,
90
+ tokenizerType: "LLAMA_WITH_SPECIAL",
91
+ quotaInfo: quota(),
92
+ model,
93
+ apiProvider: "API_PROVIDER_ANTHROPIC_VERTEX",
94
+ modelProvider: "MODEL_PROVIDER_ANTHROPIC",
95
+ supportedMimeTypes: {
96
+ "image/heic": true,
97
+ "image/heif": true,
98
+ "image/jpeg": true,
99
+ "image/png": true,
100
+ "image/webp": true,
101
+ },
102
+ modelExperiments: BASE_MODEL_EXPERIMENTS,
103
+ };
104
+ }
105
+
106
+ function openAiModel(displayName, model) {
107
+ return {
108
+ displayName,
109
+ supportsThinking: true,
110
+ thinkingBudget: 8192,
111
+ recommended: true,
112
+ maxTokens: 131072,
113
+ maxOutputTokens: 32768,
114
+ tokenizerType: "LLAMA_WITH_SPECIAL",
115
+ quotaInfo: quota(),
116
+ model,
117
+ apiProvider: "API_PROVIDER_OPENAI_VERTEX",
118
+ modelProvider: "MODEL_PROVIDER_OPENAI",
119
+ modelExperiments: BASE_MODEL_EXPERIMENTS,
120
+ };
121
+ }
122
+
123
+ function tabModel(model, maxTokens = 16384) {
124
+ return {
125
+ maxTokens,
126
+ maxOutputTokens: 4096,
127
+ tokenizerType: "QWEN2",
128
+ quotaInfo: { remainingFraction: 1 },
129
+ model,
130
+ apiProvider: "API_PROVIDER_INTERNAL",
131
+ supportsCumulativeContext: true,
132
+ supportsEstimateTokenCounter: true,
133
+ isInternal: true,
134
+ promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
135
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
136
+ requiresLeadInGeneration: true,
137
+ };
138
+ }
139
+
140
+ function googleTabModel(model, maxTokens = 16384) {
141
+ return {
142
+ maxTokens,
143
+ maxOutputTokens: 4096,
144
+ tokenizerType: "LLAMA_WITH_SPECIAL",
145
+ quotaInfo: { remainingFraction: 1 },
146
+ model,
147
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
148
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
149
+ supportsCumulativeContext: true,
150
+ supportsEstimateTokenCounter: true,
151
+ isInternal: true,
152
+ promptTemplaterType: "PROMPT_TEMPLATER_TYPE_CHATML",
153
+ toolFormatterType: "TOOL_FORMATTER_TYPE_XML",
154
+ requiresLeadInGeneration: true,
155
+ };
156
+ }
157
+
158
+ function imageModel(displayName, model) {
159
+ return {
160
+ displayName,
161
+ supportsImages: true,
162
+ maxTokens: 32768,
163
+ maxOutputTokens: 8192,
164
+ tokenizerType: "LLAMA_WITH_SPECIAL",
165
+ quotaInfo: quota(),
166
+ model,
167
+ apiProvider: "API_PROVIDER_GOOGLE_GEMINI",
168
+ modelProvider: "MODEL_PROVIDER_GOOGLE",
169
+ supportedMimeTypes: COMMON_CODE_MIME_TYPES,
170
+ };
171
+ }
172
+
173
+ function freshResetTime(days = 7) {
174
+ return new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString();
175
+ }
176
+
177
+ function cloneFixtureWithFreshQuota() {
178
+ const payload = JSON.parse(JSON.stringify(REAL_AVAILABLE_MODELS_FIXTURE));
179
+ const agentIds = new Set(
180
+ (payload.agentModelSorts || [])
181
+ .flatMap((sort) => sort.groups || [])
182
+ .flatMap((group) => group.modelIds || []),
183
+ );
184
+
185
+ for (const [id, model] of Object.entries(payload.models || {})) {
186
+ if (!model.quotaInfo) model.quotaInfo = { remainingFraction: 1 };
187
+ model.quotaInfo.remainingFraction = typeof model.quotaInfo.remainingFraction === "number"
188
+ ? model.quotaInfo.remainingFraction
189
+ : 1;
190
+ if (model.quotaInfo.resetTime) {
191
+ model.quotaInfo.resetTime = freshResetTime(agentIds.has(id) ? 7 : 1);
192
+ }
193
+ }
194
+
195
+ return payload;
196
+ }
197
+
198
+ function buildAntigravityAvailableModelsResponse() {
199
+ if (REAL_AVAILABLE_MODELS_FIXTURE?.models) return cloneFixtureWithFreshQuota();
200
+
201
+ const models = {
202
+ "gemini-2.5-flash-thinking": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING"),
203
+ "gemini-2.5-pro": geminiModel("Gemini 2.5 Pro", "MODEL_GOOGLE_GEMINI_2_5_PRO", {
204
+ requiresImageOutputOutsideFunctionResponses: true,
205
+ }),
206
+ "gemini-2.5-flash-lite": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE"),
207
+ "gemini-2.5-flash": geminiModel("Gemini 3.1 Flash Lite", "MODEL_GOOGLE_GEMINI_2_5_FLASH"),
208
+ "gemini-3.1-flash-lite": geminiModel("Gemini 3.1 Flash Lite", "MODEL_PLACEHOLDER_M50"),
209
+ "gemini-3.1-pro-high": geminiModel("Gemini 3.1 Pro (High)", "MODEL_PLACEHOLDER_M37", {
210
+ thinkingBudget: 10001,
211
+ }),
212
+ "gemini-3.1-pro-low": geminiModel("Gemini 3.1 Pro (Low)", "MODEL_PLACEHOLDER_M36", {
213
+ thinkingBudget: 1001,
214
+ }),
215
+ "gemini-3-flash-agent": geminiModel("Gemini 3 Flash", "MODEL_PLACEHOLDER_M84", {
216
+ thinkingBudget: -1,
217
+ minThinkingBudget: 32,
218
+ }),
219
+ "gemini-3-flash": geminiModel("Gemini 3 Flash", "MODEL_PLACEHOLDER_M18", {
220
+ thinkingBudget: -1,
221
+ minThinkingBudget: 32,
222
+ }),
223
+ "gemini-3.1-flash-image": imageModel("Gemini 3.1 Flash Image", "MODEL_PLACEHOLDER_M21"),
224
+ "claude-sonnet-4-6": anthropicModel("Claude Sonnet 4.6 (Thinking)", "MODEL_PLACEHOLDER_M35"),
225
+ "claude-opus-4-6-thinking": anthropicModel("Claude Opus 4.6 (Thinking)", "MODEL_PLACEHOLDER_M26"),
226
+ "gpt-oss-120b-medium": openAiModel("GPT-OSS 120B (Medium)", "MODEL_OPENAI_GPT_OSS_120B_MEDIUM"),
227
+ "tab_flash_lite_preview": googleTabModel("MODEL_PLACEHOLDER_M19"),
228
+ "tab_jump_flash_lite_preview": googleTabModel("MODEL_PLACEHOLDER_M28"),
229
+ "chat_20706": tabModel("MODEL_CHAT_20706"),
230
+ "chat_23310": tabModel("MODEL_CHAT_23310", 32768),
231
+ };
232
+
233
+ return {
234
+ models,
235
+ defaultAgentModelId: "gemini-3.1-pro-high",
236
+ agentModelSorts: [
237
+ {
238
+ displayName: "Recommended",
239
+ groups: [
240
+ {
241
+ modelIds: [
242
+ "gemini-3.1-pro-high",
243
+ "gemini-3.1-pro-low",
244
+ "gemini-3-flash-agent",
245
+ "claude-sonnet-4-6",
246
+ "claude-opus-4-6-thinking",
247
+ "gpt-oss-120b-medium",
248
+ ],
249
+ },
250
+ ],
251
+ },
252
+ ],
253
+ commandModelIds: ["gemini-3-flash"],
254
+ tabModelIds: ["chat_20706", "chat_23310"],
255
+ imageGenerationModelIds: [],
256
+ mqueryModelIds: ["gemini-3.1-flash-lite"],
257
+ webSearchModelIds: ["gemini-3.1-flash-lite"],
258
+ commitMessageModelIds: ["gemini-3-flash"],
259
+ audioTranscriptionModelIds: [],
260
+ experimentIds: [],
261
+ tieredModelIds: {},
262
+ };
263
+ }
264
+
265
+ module.exports = { buildAntigravityAvailableModelsResponse };
@@ -3,6 +3,7 @@
3
3
  const TARGET_HOSTS = [
4
4
  "daily-cloudcode-pa.googleapis.com",
5
5
  "cloudcode-pa.googleapis.com",
6
+ "daily-cloudcode-pa.sandbox.googleapis.com",
6
7
  "api.individual.githubcopilot.com",
7
8
  "q.us-east-1.amazonaws.com",
8
9
  "api2.cursor.sh",
@@ -20,7 +21,22 @@ const URL_PATTERNS = {
20
21
 
21
22
  // Synonym map: rawModel from request → canonical alias key in mitmAlias DB
22
23
  const MODEL_SYNONYMS = {
23
- antigravity: { "gemini-default": "gemini-3-flash" },
24
+ antigravity: {
25
+ "gemini-default": "gemini-3-flash",
26
+ "gemini-3-flash-agent": "gemini-3-flash",
27
+ "gemini-3.1-flash-lite": "gemini-3-flash",
28
+ "gemini-2.5-flash-lite": "gemini-3-flash",
29
+ "gemini-2.5-flash": "gemini-3-flash",
30
+ __defaults: {
31
+ "gemini-3.1-pro-high": "gemini-3.1-pro-high",
32
+ "gemini-3.1-pro-low": "gemini-3.1-pro-low",
33
+ "gemini-3-flash-agent": "cx/gpt-5.5",
34
+ "gemini-3-flash": "cx/gpt-5.5",
35
+ "claude-sonnet-4-6": "claude-sonnet-4-6",
36
+ "claude-opus-4-6-thinking": "claude-opus-4-6-thinking",
37
+ "gpt-oss-120b-medium": "gpt-oss-120b-medium",
38
+ },
39
+ },
24
40
  };
25
41
 
26
42
  // URL substrings whose request/response should NOT be dumped to file (telemetry, polling, empty)
@@ -35,7 +51,7 @@ const LOG_BLACKLIST_URL_PARTS = [
35
51
  function getToolForHost(host) {
36
52
  const h = (host || "").split(":")[0];
37
53
  if (h === "api.individual.githubcopilot.com") return "copilot";
38
- if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
54
+ if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com" || h === "daily-cloudcode-pa.sandbox.googleapis.com") return "antigravity";
39
55
  if (h === "q.us-east-1.amazonaws.com") return "kiro";
40
56
  if (h === "api2.cursor.sh") return "cursor";
41
57
  if (h === "openrouter.ai" || h === "api.openrouter.ai") return "openrouter";
@@ -36,6 +36,18 @@ 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
+ ];
39
51
 
40
52
  /** True when `sudo` exists (e.g. missing on minimal Docker images like Alpine). */
41
53
  function isSudoAvailable() {
@@ -110,6 +122,97 @@ async function flushDNS(sudoPassword) {
110
122
  }
111
123
  }
112
124
 
125
+ function shellQuoteSingle(str) {
126
+ return `'${String(str).replace(/'/g, "'\\''")}'`;
127
+ }
128
+
129
+ function getDefaultMacInterface() {
130
+ if (!IS_MAC) return "";
131
+ try {
132
+ const out = execSync("route -n get default 2>/dev/null | awk '/interface:/{print $2; exit}'", {
133
+ encoding: "utf8",
134
+ windowsHide: true,
135
+ }).trim();
136
+ return out || "en0";
137
+ } catch {
138
+ return "en0";
139
+ }
140
+ }
141
+
142
+ async function getMacAntigravityRedirectIPs() {
143
+ return [...MAC_ANTIGRAVITY_FALLBACK_IPS];
144
+ }
145
+
146
+ function getMacLoopbackIPv4Aliases() {
147
+ if (!IS_MAC) return [];
148
+ try {
149
+ const out = execSync("ifconfig lo0", { encoding: "utf8", windowsHide: true });
150
+ return [...out.matchAll(/^\s+inet\s+(\d+\.\d+\.\d+\.\d+)\s+/gm)].map((m) => m[1]);
151
+ } catch {
152
+ return [];
153
+ }
154
+ }
155
+
156
+ function getMacLegacyAntigravityAliases() {
157
+ return getMacLoopbackIPv4Aliases().filter((ip) =>
158
+ MAC_ANTIGRAVITY_LEGACY_SHARED_IP_PREFIXES.some((prefix) => ip.startsWith(prefix))
159
+ );
160
+ }
161
+
162
+ async function enableMacAntigravityRedirect(sudoPassword) {
163
+ if (!IS_MAC) return;
164
+ const ips = await getMacAntigravityRedirectIPs();
165
+ if (ips.length === 0) return;
166
+
167
+ await enableMacAntigravityLoopbackAliases(sudoPassword, ips);
168
+
169
+ const iface = getDefaultMacInterface();
170
+ const rules = [
171
+ `table <openrouterx_antigravity> persist { ${ips.join(", ")} }`,
172
+ `rdr pass on ${iface} inet proto tcp from any to <openrouterx_antigravity> port 443 -> 127.0.0.1 port 443`,
173
+ "",
174
+ ].join("\n");
175
+ const command = [
176
+ "pfctl -E >/dev/null 2>&1 || true",
177
+ `printf '%s' ${shellQuoteSingle(rules)} | pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -f -`,
178
+ ].join(" && ");
179
+
180
+ await execWithPassword(command, sudoPassword);
181
+ log(`🌐 PF antigravity: ✅ redirect active on ${iface} (${ips.length} IPs)`);
182
+ }
183
+
184
+ async function disableMacAntigravityRedirect(sudoPassword) {
185
+ if (!IS_MAC) return;
186
+ const ips = [...new Set([
187
+ ...await getMacAntigravityRedirectIPs(),
188
+ ...getMacLegacyAntigravityAliases(),
189
+ ])];
190
+ await execWithPassword(`pfctl -a ${shellQuoteSingle(MAC_PF_ANTIGRAVITY_ANCHOR)} -F all >/dev/null 2>&1 || true`, sudoPassword);
191
+ await disableMacAntigravityLoopbackAliases(sudoPassword, ips);
192
+ log("🌐 PF antigravity: ✅ redirect removed");
193
+ }
194
+
195
+ async function enableMacAntigravityLoopbackAliases(sudoPassword, ips) {
196
+ if (!IS_MAC || !ips.length) return;
197
+ const commands = ips.map((ip) => `ifconfig lo0 alias ${ip}/32 2>/dev/null || true`);
198
+ await execWithPassword(commands.join("; "), sudoPassword);
199
+ log(`🌐 lo0 antigravity: ✅ aliases active (${ips.length} IPs)`);
200
+ }
201
+
202
+ async function disableMacAntigravityLoopbackAliases(sudoPassword, ips) {
203
+ if (!IS_MAC || !ips.length) return;
204
+ const commands = ips.map((ip) => `ifconfig lo0 -alias ${ip} 2>/dev/null || true`);
205
+ await execWithPassword(commands.join("; "), sudoPassword);
206
+ }
207
+
208
+ async function ensureToolNetworkRedirect(tool, sudoPassword) {
209
+ if (tool === "antigravity") await enableMacAntigravityRedirect(sudoPassword);
210
+ }
211
+
212
+ async function removeToolNetworkRedirect(tool, sudoPassword) {
213
+ if (tool === "antigravity") await disableMacAntigravityRedirect(sudoPassword);
214
+ }
215
+
113
216
  /**
114
217
  * Check if DNS entry exists for a specific host
115
218
  */
@@ -150,6 +253,7 @@ async function addDNSEntry(tool, sudoPassword) {
150
253
  const entriesToAdd = hosts.filter(h => !checkDNSEntry(h));
151
254
  if (entriesToAdd.length === 0) {
152
255
  log(`🌐 DNS ${tool}: already active`);
256
+ await ensureToolNetworkRedirect(tool, sudoPassword);
153
257
  return;
154
258
  }
155
259
 
@@ -172,6 +276,7 @@ async function addDNSEntry(tool, sudoPassword) {
172
276
  await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
173
277
  await flushDNS(sudoPassword);
174
278
  }
279
+ await ensureToolNetworkRedirect(tool, sudoPassword);
175
280
  log(`🌐 DNS ${tool}: ✅ added ${entriesToAdd.join(", ")}`);
176
281
  } catch (error) {
177
282
  const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to add DNS entry: ${error.message}`;
@@ -189,6 +294,7 @@ async function removeDNSEntry(tool, sudoPassword) {
189
294
  const entriesToRemove = hosts.filter(h => checkDNSEntry(h));
190
295
  if (entriesToRemove.length === 0) {
191
296
  log(`🌐 DNS ${tool}: already inactive`);
297
+ await removeToolNetworkRedirect(tool, sudoPassword);
192
298
  return;
193
299
  }
194
300
 
@@ -207,6 +313,7 @@ async function removeDNSEntry(tool, sudoPassword) {
207
313
  await execWithPassword(`printf '%s' '${escaped}' | tee ${HOSTS_FILE} > /dev/null`, sudoPassword);
208
314
  await flushDNS(sudoPassword);
209
315
  }
316
+ await removeToolNetworkRedirect(tool, sudoPassword);
210
317
  log(`🌐 DNS ${tool}: ✅ removed ${entriesToRemove.join(", ")}`);
211
318
  } catch (error) {
212
319
  const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to remove DNS entry: ${error.message}`;
@@ -233,6 +340,12 @@ async function removeAllDNSEntries(sudoPassword) {
233
340
  */
234
341
  function removeAllDNSEntriesSync() {
235
342
  try {
343
+ if (IS_MAC) {
344
+ try { execSync(`pfctl -a ${MAC_PF_ANTIGRAVITY_ANCHOR} -F all >/dev/null 2>&1 || true`, { stdio: "ignore" }); } catch { /* ignore */ }
345
+ for (const ip of MAC_ANTIGRAVITY_FALLBACK_IPS) {
346
+ try { execSync(`ifconfig lo0 -alias ${ip} 2>/dev/null || true`, { stdio: "ignore" }); } catch { /* ignore */ }
347
+ }
348
+ }
236
349
  if (!fs.existsSync(HOSTS_FILE)) return;
237
350
  const allHosts = Object.values(TOOL_HOSTS).flat();
238
351
  const content = fs.readFileSync(HOSTS_FILE, "utf8");
@@ -1,12 +1,18 @@
1
- const { err, createResponseDumper } = require("../logger");
1
+ const { log, err, createResponseDumper } = require("../logger");
2
2
  const { fetchRouter, pipeSSE } = require("./base");
3
3
 
4
+ const NO_CREDENTIALS_MARKER = "No active credentials for provider";
5
+
4
6
  /**
5
7
  * Intercept Antigravity request — forward Gemini body as-is to /v1/chat/completions.
6
8
  * Router auto-detects format via body.userAgent==="antigravity" + body.request.contents,
7
9
  * runs antigravity→openai→provider→openai→antigravity translators internally.
10
+ *
11
+ * Graceful fallback: if Router returns 404 because no provider credentials are
12
+ * configured, passthrough to the real upstream so Antigravity works out-of-the-box
13
+ * without requiring a login in the Router dashboard.
8
14
  */
9
- async function intercept(req, res, bodyBuffer, mappedModel) {
15
+ async function intercept(req, res, bodyBuffer, mappedModel, passthrough) {
10
16
  const dumper = createResponseDumper(req, "intercept-antigravity");
11
17
  const isStream = req.url.includes(":streamGenerateContent");
12
18
  try {
@@ -14,6 +20,27 @@ async function intercept(req, res, bodyBuffer, mappedModel) {
14
20
  if (body.model) body.model = mappedModel;
15
21
 
16
22
  const routerRes = await fetchRouter(body, "/v1/chat/completions", req.headers);
23
+
24
+ // Graceful fallback: no credentials in Router → passthrough to real upstream
25
+ if (routerRes.status === 404) {
26
+ const text = await routerRes.text();
27
+ if (text.includes(NO_CREDENTIALS_MARKER)) {
28
+ log(`⏩ passthrough | antigravity | no credentials for mapped model "${mappedModel || "unknown"}" — forwarding to real upstream`);
29
+ if (dumper) {
30
+ dumper.writeHeader(routerRes.status, Object.fromEntries(routerRes.headers));
31
+ dumper.writeChunk(text);
32
+ dumper.end();
33
+ }
34
+ return passthrough(req, res, bodyBuffer);
35
+ }
36
+ // Other 404 errors: propagate as-is
37
+ if (!res.headersSent) {
38
+ res.writeHead(404, { "Content-Type": "application/json" });
39
+ res.end(text);
40
+ }
41
+ return;
42
+ }
43
+
17
44
  await pipeSSE(routerRes, res, dumper);
18
45
  } catch (error) {
19
46
  err(`[antigravity] ${error.message}`);
@@ -14,7 +14,7 @@ const err = (msg) => console.error(`[${time()}] ❌ [MITM] ${msg}`);
14
14
  function ensureDumpDir() {
15
15
  const candidates = [
16
16
  path.join(DATA_DIR, "logs", "mitm"),
17
- path.join(require("os").tmpdir(), "9router", "logs", "mitm"),
17
+ path.join(require("os").tmpdir(), "openrouterx", "logs", "mitm"),
18
18
  ];
19
19
  for (const dir of candidates) {
20
20
  try {
@@ -528,6 +528,9 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
528
528
  }
529
529
  }
530
530
  const mitmRouterBase = await resolveMitmRouterBaseUrl();
531
+ const mitmServerCwd = MITM_DIR || os.homedir();
532
+ fs.mkdirSync(mitmServerCwd, { recursive: true });
533
+ const agMockBootstrap = process.env.OPENROUTERX_AG_MOCK_BOOTSTRAP === "1" ? "1" : "0";
531
534
  log(`🚀 Starting server... (router: ${mitmRouterBase})`);
532
535
  if (IS_WIN) {
533
536
  // Check port 443 — ask user before killing
@@ -549,6 +552,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
549
552
  process.execPath,
550
553
  [effectiveServerPath],
551
554
  {
555
+ cwd: mitmServerCwd,
552
556
  detached: false,
553
557
  windowsHide: true,
554
558
  stdio: ["ignore", "pipe", "pipe"],
@@ -557,6 +561,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
557
561
  ROUTER_API_KEY: apiKey,
558
562
  NODE_ENV: "production",
559
563
  MITM_ROUTER_BASE: mitmRouterBase,
564
+ OPENROUTERX_AG_MOCK_BOOTSTRAP: agMockBootstrap,
560
565
  },
561
566
  }
562
567
  );
@@ -569,19 +574,21 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
569
574
  `HOME=${shellQuoteSingle(os.homedir())}`,
570
575
  `ROUTER_API_KEY=${shellQuoteSingle(apiKey)}`,
571
576
  `MITM_ROUTER_BASE=${shellQuoteSingle(mitmRouterBase)}`,
577
+ `OPENROUTERX_AG_MOCK_BOOTSTRAP=${shellQuoteSingle(agMockBootstrap)}`,
572
578
  "NODE_ENV=production",
573
579
  shellQuoteSingle(process.execPath),
574
580
  shellQuoteSingle(effectiveServerPath),
575
581
  ].join(" ");
576
582
  serverProcess = spawn(
577
583
  "sudo", ["-S", "-E", "sh", "-c", inlineCmd],
578
- { detached: false, windowsHide: true, stdio: ["pipe", "pipe", "pipe"] }
584
+ { cwd: mitmServerCwd, detached: false, windowsHide: true, stdio: ["pipe", "pipe", "pipe"] }
579
585
  );
580
586
  serverProcess.stdin.write(`${sudoPassword}\n`);
581
587
  serverProcess.stdin.end();
582
588
  } else {
583
589
  // Docker/minimal images: no sudo — same as Windows-style direct spawn
584
590
  serverProcess = spawn(process.execPath, [effectiveServerPath], {
591
+ cwd: mitmServerCwd,
585
592
  detached: false,
586
593
  windowsHide: true,
587
594
  stdio: ["ignore", "pipe", "pipe"],
@@ -590,6 +597,7 @@ async function startServer(apiKey, sudoPassword, forceKillPort443 = false) {
590
597
  ROUTER_API_KEY: apiKey,
591
598
  NODE_ENV: "production",
592
599
  MITM_ROUTER_BASE: mitmRouterBase,
600
+ OPENROUTERX_AG_MOCK_BOOTSTRAP: agMockBootstrap,
593
601
  },
594
602
  });
595
603
  }