@yina-npm/openrouterx 0.4.55 → 0.4.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/README.md +1 -1
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +5 -11
  4. package/app/.next/build-manifest.json +2 -2
  5. package/app/.next/prerender-manifest.json +3 -3
  6. package/app/.next/required-server-files.json +1 -1
  7. package/app/.next/routes-manifest.json +15 -51
  8. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -2
  9. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js.nft.json +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -2
  12. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js.nft.json +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  15. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +3 -3
  18. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  21. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  24. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  27. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  30. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +3 -3
  33. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  34. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  36. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  37. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +3 -3
  39. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  40. package/app/.next/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  42. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  43. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  45. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  46. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  48. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  49. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  51. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  52. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  54. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  55. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  57. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  58. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  60. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  61. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +4 -4
  63. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  64. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +3 -2
  66. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  67. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js +2 -2
  69. package/app/.next/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  70. package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  72. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  73. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  75. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  76. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/(dashboard)/dashboard/user/page.js +3 -3
  78. package/app/.next/server/app/(dashboard)/dashboard/user/page.js.nft.json +1 -1
  79. package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/_global-error/page.js +2 -2
  81. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/_global-error.html +1 -1
  83. package/app/.next/server/app/_global-error.rsc +1 -1
  84. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  85. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  86. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  87. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  88. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  89. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  90. package/app/.next/server/app/_not-found/page.js +2 -2
  91. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  92. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/_not-found.html +1 -1
  94. package/app/.next/server/app/_not-found.rsc +4 -4
  95. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  96. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  97. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  98. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  99. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  100. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  101. package/app/.next/server/app/api/auth/login/route.js +1 -1
  102. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  103. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  104. package/app/.next/server/app/api/auth/me/route.js +1 -1
  105. package/app/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  106. package/app/.next/server/app/api/auth/oidc/start/route.js +1 -1
  107. package/app/.next/server/app/api/auth/oidc/test/route.js +1 -1
  108. package/app/.next/server/app/api/auth/status/route.js +1 -1
  109. package/app/.next/server/app/api/cli-tools/all-statuses/route.js +4 -4
  110. package/app/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  112. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  114. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  116. package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
  117. package/app/.next/server/app/api/cli-tools/codex-settings/activate-account/route.js +2 -2
  118. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  119. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  120. package/app/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  121. package/app/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  122. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  123. package/app/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  124. package/app/.next/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  125. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
  126. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  127. package/app/.next/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  128. package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  129. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  130. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  131. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  132. package/app/.next/server/app/api/combos/route.js +1 -1
  133. package/app/.next/server/app/api/health/route.js +1 -1
  134. package/app/.next/server/app/api/init/route.js +1 -1
  135. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  136. package/app/.next/server/app/api/keys/route.js +1 -1
  137. package/app/.next/server/app/api/locale/route.js +1 -1
  138. package/app/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  139. package/app/.next/server/app/api/mcp/[plugin]/sse/route.js +1 -4
  140. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  141. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  142. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  143. package/app/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  144. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  145. package/app/.next/server/app/api/models/alias/route.js +1 -1
  146. package/app/.next/server/app/api/models/availability/route.js +1 -1
  147. package/app/.next/server/app/api/models/custom/route.js +1 -1
  148. package/app/.next/server/app/api/models/disabled/route.js +1 -1
  149. package/app/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
  150. package/app/.next/server/app/api/models/route.js +1 -1
  151. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  152. package/app/.next/server/app/api/models/test/route.js +1 -1
  153. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  154. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -6
  155. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  156. package/app/.next/server/app/api/oauth/codex/import-token/route.js +1 -0
  157. package/app/.next/server/app/api/{cli-tools/antigravity-mitm/test → oauth/codex/import-token}/route.js.nft.json +1 -1
  158. package/app/.next/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -0
  159. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  160. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  161. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  162. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  163. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  164. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  165. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  166. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  167. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  168. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  169. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  170. package/app/.next/server/app/api/pricing/route.js +1 -1
  171. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  172. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  173. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  174. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  175. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  176. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  177. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  178. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  180. package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  181. package/app/.next/server/app/api/providers/client/route.js +1 -1
  182. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  184. package/app/.next/server/app/api/providers/route.js +1 -1
  185. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  186. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  187. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  188. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  190. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  192. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  193. package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +43 -0
  194. package/app/.next/server/app/api/{tunnel/tailscale-login → proxy-pools/cloudflare-deploy}/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -0
  196. package/app/.next/server/app/api/proxy-pools/deno-deploy/route.js +40 -0
  197. package/app/.next/server/app/api/{tunnel/tailscale-start-daemon → proxy-pools/deno-deploy}/route.js.nft.json +1 -1
  198. package/app/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -0
  199. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  200. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  201. package/app/.next/server/app/api/settings/database/route.js +1 -1
  202. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  203. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  204. package/app/.next/server/app/api/settings/route.js +1 -1
  205. package/app/.next/server/app/api/shutdown/route.js +1 -1
  206. package/app/.next/server/app/api/tags/route.js +1 -1
  207. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  208. package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  210. package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/translator/load/route.js +1 -1
  212. package/app/.next/server/app/api/translator/save/route.js +1 -1
  213. package/app/.next/server/app/api/translator/send/route.js +1 -1
  214. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  216. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  218. package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  220. package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  222. package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  224. package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  226. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  228. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  229. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +3 -3
  230. package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  231. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  232. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  233. package/app/.next/server/app/api/usage/api-keys/route.js +1 -1
  234. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  235. package/app/.next/server/app/api/usage/history/route.js +1 -1
  236. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  237. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  238. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  239. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  240. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  241. package/app/.next/server/app/api/usage/stream/route.js +2 -2
  242. package/app/.next/server/app/api/users/[id]/route.js +1 -1
  243. package/app/.next/server/app/api/users/route.js +1 -1
  244. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  245. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  246. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  247. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  249. package/app/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/v1/audio/voices/route.js +1 -1
  251. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  252. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  253. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  254. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  255. package/app/.next/server/app/api/v1/images/generations/route.js +2 -2
  256. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  257. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  258. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  259. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/v1/models/[kind]/route.js +1 -1
  261. package/app/.next/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  262. package/app/.next/server/app/api/v1/models/info/route.js +1 -1
  263. package/app/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
  264. package/app/.next/server/app/api/v1/models/route.js +1 -1
  265. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  266. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  267. package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  268. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  269. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  270. package/app/.next/server/app/api/v1/route.js +1 -1
  271. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  272. package/app/.next/server/app/api/v1/search/route.js +1 -1
  273. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  274. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -1
  275. package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  276. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  277. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  278. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  279. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  280. package/app/.next/server/app/api/version/route.js +1 -1
  281. package/app/.next/server/app/api/version/shutdown/route.js +1 -1
  282. package/app/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
  283. package/app/.next/server/app/api/version/update/route.js +1 -1
  284. package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
  285. package/app/.next/server/app/callback/page.js +2 -2
  286. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  287. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  288. package/app/.next/server/app/callback.html +1 -1
  289. package/app/.next/server/app/callback.rsc +4 -4
  290. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  291. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  292. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  293. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  294. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  295. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  296. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  297. package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  298. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  299. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  300. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  301. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  302. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  303. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  304. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  305. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  306. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  307. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  308. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  309. package/app/.next/server/app/favicon.ico/route.js +1 -1
  310. package/app/.next/server/app/index.html +1 -1
  311. package/app/.next/server/app/index.rsc +4 -4
  312. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  313. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  314. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  315. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  316. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  317. package/app/.next/server/app/landing/page.js +2 -2
  318. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  319. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  320. package/app/.next/server/app/landing.html +1 -1
  321. package/app/.next/server/app/landing.rsc +4 -4
  322. package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  323. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  324. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  325. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  326. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  327. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  328. package/app/.next/server/app/login/page.js +2 -2
  329. package/app/.next/server/app/login/page.js.nft.json +1 -1
  330. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  331. package/app/.next/server/app/login.html +1 -1
  332. package/app/.next/server/app/login.rsc +5 -5
  333. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  334. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  335. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  336. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  337. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  338. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  339. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  340. package/app/.next/server/app/page.js +2 -2
  341. package/app/.next/server/app/page.js.nft.json +1 -1
  342. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  343. package/app/.next/server/app-paths-manifest.json +5 -11
  344. package/app/.next/server/chunks/1172.js +1 -0
  345. package/app/.next/server/chunks/1350.js +2 -2
  346. package/app/.next/server/chunks/1476.js +1 -1
  347. package/app/.next/server/chunks/1531.js +1 -0
  348. package/app/.next/server/chunks/1900.js +1 -0
  349. package/app/.next/server/chunks/1998.js +1 -0
  350. package/app/.next/server/chunks/2409.js +1 -0
  351. package/app/.next/server/chunks/2574.js +1 -1
  352. package/app/.next/server/chunks/2722.js +2 -7
  353. package/app/.next/server/chunks/3104.js +43 -0
  354. package/app/.next/server/chunks/3110.js +10 -8
  355. package/app/.next/server/chunks/3205.js +1 -0
  356. package/app/.next/server/chunks/365.js +1 -0
  357. package/app/.next/server/chunks/3913.js +2 -2
  358. package/app/.next/server/chunks/412.js +2 -2
  359. package/app/.next/server/chunks/4177.js +1 -0
  360. package/app/.next/server/chunks/4404.js +1 -0
  361. package/app/.next/server/chunks/4922.js +9 -0
  362. package/app/.next/server/chunks/4989.js +1 -1
  363. package/app/.next/server/chunks/5217.js +1 -1
  364. package/app/.next/server/chunks/5681.js +1 -1
  365. package/app/.next/server/chunks/6001.js +1 -1
  366. package/app/.next/server/chunks/6096.js +1 -0
  367. package/app/.next/server/chunks/6108.js +1 -1
  368. package/app/.next/server/chunks/6457.js +4 -0
  369. package/app/.next/server/chunks/7341.js +1 -1
  370. package/app/.next/server/chunks/7879.js +10 -0
  371. package/app/.next/server/chunks/7937.js +186 -0
  372. package/app/.next/server/chunks/8220.js +1 -0
  373. package/app/.next/server/chunks/8279.js +1 -0
  374. package/app/.next/server/chunks/8473.js +8 -0
  375. package/app/.next/server/chunks/8750.js +1 -1
  376. package/app/.next/server/chunks/8895.js +8 -6
  377. package/app/.next/server/chunks/9203.js +1 -0
  378. package/app/.next/server/chunks/9259.js +3 -0
  379. package/app/.next/server/chunks/9460.js +1 -0
  380. package/app/.next/server/chunks/9489.js +1 -1
  381. package/app/.next/server/chunks/9501.js +63 -0
  382. package/app/.next/server/chunks/{9095.js → 9713.js} +1 -1
  383. package/app/.next/server/chunks/9718.js +1 -1
  384. package/app/.next/server/chunks/9856.js +1 -1
  385. package/app/.next/server/functions-config-manifest.json +0 -1
  386. package/app/.next/server/middleware-build-manifest.js +1 -1
  387. package/app/.next/server/middleware.js +1 -1
  388. package/app/.next/server/pages/404.html +1 -1
  389. package/app/.next/server/pages/500.html +1 -1
  390. package/app/.next/server/server-reference-manifest.js +1 -1
  391. package/app/.next/server/server-reference-manifest.json +1 -1
  392. package/app/.next/static/chunks/1321-9d7d6181b08dfcf4.js +1 -0
  393. package/app/.next/static/chunks/4072-e3cbc885320b3535.js +3 -0
  394. package/app/.next/static/chunks/5497-41bb54893ac4e384.js +7 -0
  395. package/app/.next/static/chunks/{6069-7c51e16aef293430.js → 6069-27d1adb0dbf83385.js} +9 -14
  396. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-ba3be29df191769b.js +1 -0
  397. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-a0eaec978d93b101.js +1 -0
  398. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-57065ce85ec52703.js +1 -0
  399. package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/{page-e0f570e37fcc4d53.js → page-b52d2279e8eff62d.js} +1 -1
  400. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-011af574663dfa07.js +1 -0
  401. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-7cd7e81cc32bcf4d.js +3 -0
  402. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-77e1358581cbeecd.js +4 -0
  403. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-5f1623351681fa43.js +2 -0
  404. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-739dde37665780bc.js +1 -0
  405. package/app/.next/static/chunks/app/(dashboard)/layout-2b26025389c75878.js +1 -0
  406. package/app/.next/static/chunks/app/_global-error/page-739dde37665780bc.js +1 -0
  407. package/app/.next/static/chunks/app/api/auth/login/route-739dde37665780bc.js +1 -0
  408. package/app/.next/static/chunks/app/api/auth/logout/route-739dde37665780bc.js +1 -0
  409. package/app/.next/static/chunks/app/api/auth/me/route-739dde37665780bc.js +1 -0
  410. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-739dde37665780bc.js +1 -0
  411. package/app/.next/static/chunks/app/api/auth/oidc/start/route-739dde37665780bc.js +1 -0
  412. package/app/.next/static/chunks/app/api/auth/oidc/test/route-739dde37665780bc.js +1 -0
  413. package/app/.next/static/chunks/app/api/auth/status/route-739dde37665780bc.js +1 -0
  414. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-739dde37665780bc.js +1 -0
  415. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-739dde37665780bc.js +1 -0
  416. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-739dde37665780bc.js +1 -0
  417. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-739dde37665780bc.js +1 -0
  418. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-739dde37665780bc.js +1 -0
  419. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-739dde37665780bc.js +1 -0
  420. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-739dde37665780bc.js +1 -0
  421. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-739dde37665780bc.js +1 -0
  422. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-739dde37665780bc.js +1 -0
  423. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-739dde37665780bc.js +1 -0
  424. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-739dde37665780bc.js +1 -0
  425. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-739dde37665780bc.js +1 -0
  426. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-739dde37665780bc.js +1 -0
  427. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-739dde37665780bc.js +1 -0
  428. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-739dde37665780bc.js +1 -0
  429. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-739dde37665780bc.js +1 -0
  430. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-739dde37665780bc.js +1 -0
  431. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-739dde37665780bc.js +1 -0
  432. package/app/.next/static/chunks/app/api/combos/[id]/route-739dde37665780bc.js +1 -0
  433. package/app/.next/static/chunks/app/api/combos/route-739dde37665780bc.js +1 -0
  434. package/app/.next/static/chunks/app/api/health/route-739dde37665780bc.js +1 -0
  435. package/app/.next/static/chunks/app/api/init/route-739dde37665780bc.js +1 -0
  436. package/app/.next/static/chunks/app/api/keys/[id]/route-739dde37665780bc.js +1 -0
  437. package/app/.next/static/chunks/app/api/keys/route-739dde37665780bc.js +1 -0
  438. package/app/.next/static/chunks/app/api/locale/route-739dde37665780bc.js +1 -0
  439. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-739dde37665780bc.js +1 -0
  440. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-739dde37665780bc.js +1 -0
  441. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-739dde37665780bc.js +1 -0
  442. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-739dde37665780bc.js +1 -0
  443. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-739dde37665780bc.js +1 -0
  444. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-739dde37665780bc.js +1 -0
  445. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-739dde37665780bc.js +1 -0
  446. package/app/.next/static/chunks/app/api/models/alias/route-739dde37665780bc.js +1 -0
  447. package/app/.next/static/chunks/app/api/models/availability/route-739dde37665780bc.js +1 -0
  448. package/app/.next/static/chunks/app/api/models/custom/route-739dde37665780bc.js +1 -0
  449. package/app/.next/static/chunks/app/api/models/disabled/route-739dde37665780bc.js +1 -0
  450. package/app/.next/static/chunks/app/api/models/route-739dde37665780bc.js +1 -0
  451. package/app/.next/static/chunks/app/api/models/test/route-739dde37665780bc.js +1 -0
  452. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-739dde37665780bc.js +1 -0
  453. package/app/.next/static/chunks/app/api/oauth/codex/import-token/route-739dde37665780bc.js +1 -0
  454. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-739dde37665780bc.js +1 -0
  455. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-739dde37665780bc.js +1 -0
  456. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-739dde37665780bc.js +1 -0
  457. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-739dde37665780bc.js +1 -0
  458. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-739dde37665780bc.js +1 -0
  459. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-739dde37665780bc.js +1 -0
  460. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-739dde37665780bc.js +1 -0
  461. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-739dde37665780bc.js +1 -0
  462. package/app/.next/static/chunks/app/api/pricing/route-739dde37665780bc.js +1 -0
  463. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-739dde37665780bc.js +1 -0
  464. package/app/.next/static/chunks/app/api/provider-nodes/route-739dde37665780bc.js +1 -0
  465. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-739dde37665780bc.js +1 -0
  466. package/app/.next/static/chunks/app/api/providers/[id]/models/route-739dde37665780bc.js +1 -0
  467. package/app/.next/static/chunks/app/api/providers/[id]/route-739dde37665780bc.js +1 -0
  468. package/app/.next/static/chunks/app/api/providers/[id]/test/route-739dde37665780bc.js +1 -0
  469. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-739dde37665780bc.js +1 -0
  470. package/app/.next/static/chunks/app/api/providers/client/route-739dde37665780bc.js +1 -0
  471. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-739dde37665780bc.js +1 -0
  472. package/app/.next/static/chunks/app/api/providers/route-739dde37665780bc.js +1 -0
  473. package/app/.next/static/chunks/app/api/providers/suggested-models/route-739dde37665780bc.js +1 -0
  474. package/app/.next/static/chunks/app/api/providers/test-batch/route-739dde37665780bc.js +1 -0
  475. package/app/.next/static/chunks/app/api/providers/validate/route-739dde37665780bc.js +1 -0
  476. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-739dde37665780bc.js +1 -0
  477. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-739dde37665780bc.js +1 -0
  478. package/app/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-739dde37665780bc.js +1 -0
  479. package/app/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-739dde37665780bc.js +1 -0
  480. package/app/.next/static/chunks/app/api/proxy-pools/route-739dde37665780bc.js +1 -0
  481. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-739dde37665780bc.js +1 -0
  482. package/app/.next/static/chunks/app/api/settings/database/route-739dde37665780bc.js +1 -0
  483. package/app/.next/static/chunks/app/api/settings/proxy-test/route-739dde37665780bc.js +1 -0
  484. package/app/.next/static/chunks/app/api/settings/require-login/route-739dde37665780bc.js +1 -0
  485. package/app/.next/static/chunks/app/api/settings/route-739dde37665780bc.js +1 -0
  486. package/app/.next/static/chunks/app/api/shutdown/route-739dde37665780bc.js +1 -0
  487. package/app/.next/static/chunks/app/api/tags/route-739dde37665780bc.js +1 -0
  488. package/app/.next/static/chunks/app/api/translator/console-logs/route-739dde37665780bc.js +1 -0
  489. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-739dde37665780bc.js +1 -0
  490. package/app/.next/static/chunks/app/api/translator/load/route-739dde37665780bc.js +1 -0
  491. package/app/.next/static/chunks/app/api/translator/save/route-739dde37665780bc.js +1 -0
  492. package/app/.next/static/chunks/app/api/translator/send/route-739dde37665780bc.js +1 -0
  493. package/app/.next/static/chunks/app/api/translator/translate/route-739dde37665780bc.js +1 -0
  494. package/app/.next/static/chunks/app/api/tunnel/disable/route-739dde37665780bc.js +1 -0
  495. package/app/.next/static/chunks/app/api/tunnel/enable/route-739dde37665780bc.js +1 -0
  496. package/app/.next/static/chunks/app/api/tunnel/status/route-739dde37665780bc.js +1 -0
  497. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-739dde37665780bc.js +1 -0
  498. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-739dde37665780bc.js +1 -0
  499. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-739dde37665780bc.js +1 -0
  500. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-739dde37665780bc.js +1 -0
  501. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-739dde37665780bc.js +1 -0
  502. package/app/.next/static/chunks/app/api/usage/api-keys/route-739dde37665780bc.js +1 -0
  503. package/app/.next/static/chunks/app/api/usage/chart/route-739dde37665780bc.js +1 -0
  504. package/app/.next/static/chunks/app/api/usage/history/route-739dde37665780bc.js +1 -0
  505. package/app/.next/static/chunks/app/api/usage/logs/route-739dde37665780bc.js +1 -0
  506. package/app/.next/static/chunks/app/api/usage/providers/route-739dde37665780bc.js +1 -0
  507. package/app/.next/static/chunks/app/api/usage/request-details/route-739dde37665780bc.js +1 -0
  508. package/app/.next/static/chunks/app/api/usage/request-logs/route-739dde37665780bc.js +1 -0
  509. package/app/.next/static/chunks/app/api/usage/stats/route-739dde37665780bc.js +1 -0
  510. package/app/.next/static/chunks/app/api/usage/stream/route-739dde37665780bc.js +1 -0
  511. package/app/.next/static/chunks/app/api/users/[id]/route-739dde37665780bc.js +1 -0
  512. package/app/.next/static/chunks/app/api/users/route-739dde37665780bc.js +1 -0
  513. package/app/.next/static/chunks/app/api/v1/api/chat/route-739dde37665780bc.js +1 -0
  514. package/app/.next/static/chunks/app/api/v1/audio/speech/route-739dde37665780bc.js +1 -0
  515. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-739dde37665780bc.js +1 -0
  516. package/app/.next/static/chunks/app/api/v1/audio/voices/route-739dde37665780bc.js +1 -0
  517. package/app/.next/static/chunks/app/api/v1/chat/completions/route-739dde37665780bc.js +1 -0
  518. package/app/.next/static/chunks/app/api/v1/embeddings/route-739dde37665780bc.js +1 -0
  519. package/app/.next/static/chunks/app/api/v1/images/generations/route-739dde37665780bc.js +1 -0
  520. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-739dde37665780bc.js +1 -0
  521. package/app/.next/static/chunks/app/api/v1/messages/route-739dde37665780bc.js +1 -0
  522. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-739dde37665780bc.js +1 -0
  523. package/app/.next/static/chunks/app/api/v1/models/info/route-739dde37665780bc.js +1 -0
  524. package/app/.next/static/chunks/app/api/v1/models/route-739dde37665780bc.js +1 -0
  525. package/app/.next/static/chunks/app/api/v1/responses/compact/route-739dde37665780bc.js +1 -0
  526. package/app/.next/static/chunks/app/api/v1/responses/route-739dde37665780bc.js +1 -0
  527. package/app/.next/static/chunks/app/api/v1/route-739dde37665780bc.js +1 -0
  528. package/app/.next/static/chunks/app/api/v1/search/route-739dde37665780bc.js +1 -0
  529. package/app/.next/static/chunks/app/api/v1/web/fetch/route-739dde37665780bc.js +1 -0
  530. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-739dde37665780bc.js +1 -0
  531. package/app/.next/static/chunks/app/api/v1beta/models/route-739dde37665780bc.js +1 -0
  532. package/app/.next/static/chunks/app/api/version/route-739dde37665780bc.js +1 -0
  533. package/app/.next/static/chunks/app/api/version/shutdown/route-739dde37665780bc.js +1 -0
  534. package/app/.next/static/chunks/app/api/version/update/route-739dde37665780bc.js +1 -0
  535. package/app/.next/static/chunks/app/login/page-bf4ffdfcf4ec19bf.js +1 -0
  536. package/app/.next/static/chunks/app/manifest.webmanifest/route-739dde37665780bc.js +1 -0
  537. package/app/.next/static/chunks/app/page-739dde37665780bc.js +1 -0
  538. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-739dde37665780bc.js +1 -0
  539. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-739dde37665780bc.js +1 -0
  540. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-739dde37665780bc.js +1 -0
  541. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-739dde37665780bc.js +1 -0
  542. package/app/.next/static/css/16b3fb40c238dedb.css +1 -0
  543. package/app/.next/static/jssxgK5Jb3snQyFlT_oQ6/_buildManifest.js +1 -0
  544. package/app/package.json +2 -2
  545. package/app/public/i18n/literals/ar.json +1 -27
  546. package/app/public/i18n/literals/bn.json +1 -27
  547. package/app/public/i18n/literals/cs.json +1 -27
  548. package/app/public/i18n/literals/da.json +1 -27
  549. package/app/public/i18n/literals/de.json +1 -27
  550. package/app/public/i18n/literals/el.json +1 -27
  551. package/app/public/i18n/literals/es.json +1 -27
  552. package/app/public/i18n/literals/fi.json +1 -27
  553. package/app/public/i18n/literals/fr.json +1 -27
  554. package/app/public/i18n/literals/he.json +1 -27
  555. package/app/public/i18n/literals/hi.json +1 -27
  556. package/app/public/i18n/literals/hu.json +1 -27
  557. package/app/public/i18n/literals/id.json +1 -27
  558. package/app/public/i18n/literals/it.json +1 -27
  559. package/app/public/i18n/literals/ja.json +1 -27
  560. package/app/public/i18n/literals/ko.json +1 -27
  561. package/app/public/i18n/literals/nl.json +1 -27
  562. package/app/public/i18n/literals/no.json +1 -27
  563. package/app/public/i18n/literals/pl.json +1 -27
  564. package/app/public/i18n/literals/pt-BR.json +1 -27
  565. package/app/public/i18n/literals/pt-PT.json +1 -27
  566. package/app/public/i18n/literals/ro.json +1 -27
  567. package/app/public/i18n/literals/ru.json +1 -27
  568. package/app/public/i18n/literals/sv.json +1 -27
  569. package/app/public/i18n/literals/th.json +1 -27
  570. package/app/public/i18n/literals/tl.json +1 -27
  571. package/app/public/i18n/literals/tr.json +1 -27
  572. package/app/public/i18n/literals/uk.json +1 -27
  573. package/app/public/i18n/literals/ur.json +1 -27
  574. package/app/public/i18n/literals/vi.json +1 -27
  575. package/app/public/i18n/literals/zh-CN.json +4 -28
  576. package/app/public/i18n/literals/zh-TW.json +1 -27
  577. package/app/public/providers/qoder.png +0 -0
  578. package/app/server.js +1 -1
  579. package/app/src/lib/oauth/services/qoder.js +216 -0
  580. package/app/src/lib/oauth/services/xai.js +238 -0
  581. package/app/src/lib/updater/updater.js +3 -4
  582. package/app/src/mitm/antigravityIdeVersion.js +50 -0
  583. package/app/src/mitm/cert/install.js +45 -21
  584. package/app/src/mitm/cert/rootCA.js +5 -20
  585. package/app/src/mitm/config.js +38 -39
  586. package/app/src/mitm/dns/dnsConfig.js +10 -162
  587. package/app/src/mitm/handlers/antigravity.js +2 -29
  588. package/app/src/mitm/handlers/base.js +164 -17
  589. package/app/src/mitm/handlers/copilot.js +2 -2
  590. package/app/src/mitm/handlers/kiro.js +242 -117
  591. package/app/src/mitm/logger.js +2 -15
  592. package/app/src/mitm/manager.js +78 -91
  593. package/app/src/mitm/paths.js +19 -8
  594. package/app/src/mitm/server.js +199 -292
  595. package/app/src/shared/constants/mitmToolHosts.js +1 -6
  596. package/hooks/postinstall.js +0 -92
  597. package/package.json +3 -3
  598. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js +0 -2
  599. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page.js.nft.json +0 -1
  600. package/app/.next/server/app/(dashboard)/dashboard/focus-ui/page_client-reference-manifest.js +0 -1
  601. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js +0 -2
  602. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page.js.nft.json +0 -1
  603. package/app/.next/server/app/(dashboard)/dashboard/network-analysis/page_client-reference-manifest.js +0 -1
  604. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js +0 -1
  605. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route.js.nft.json +0 -1
  606. package/app/.next/server/app/api/cli-tools/antigravity-mitm/inject-auth/route_client-reference-manifest.js +0 -1
  607. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js +0 -1
  608. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route.js.nft.json +0 -1
  609. package/app/.next/server/app/api/cli-tools/antigravity-mitm/restart/route_client-reference-manifest.js +0 -1
  610. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route.js +0 -1
  611. package/app/.next/server/app/api/cli-tools/antigravity-mitm/test/route_client-reference-manifest.js +0 -1
  612. package/app/.next/server/app/api/network-analysis/route.js +0 -2
  613. package/app/.next/server/app/api/network-analysis/route.js.nft.json +0 -1
  614. package/app/.next/server/app/api/network-analysis/route_client-reference-manifest.js +0 -1
  615. package/app/.next/server/app/api/startup-notices/route.js +0 -2
  616. package/app/.next/server/app/api/startup-notices/route.js.nft.json +0 -1
  617. package/app/.next/server/app/api/startup-notices/route_client-reference-manifest.js +0 -1
  618. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +0 -1
  619. package/app/.next/server/app/api/tunnel/tailscale-login/route_client-reference-manifest.js +0 -1
  620. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +0 -2
  621. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +0 -1
  622. package/app/.next/server/chunks/2415.js +0 -17
  623. package/app/.next/server/chunks/2506.js +0 -4
  624. package/app/.next/server/chunks/2560.js +0 -1
  625. package/app/.next/server/chunks/3245.js +0 -1
  626. package/app/.next/server/chunks/3493.js +0 -2
  627. package/app/.next/server/chunks/4394.js +0 -1
  628. package/app/.next/server/chunks/4664.js +0 -1
  629. package/app/.next/server/chunks/5330.js +0 -162
  630. package/app/.next/server/chunks/6182.js +0 -50
  631. package/app/.next/server/chunks/6393.js +0 -1
  632. package/app/.next/server/chunks/7177.js +0 -1
  633. package/app/.next/server/chunks/7568.js +0 -1
  634. package/app/.next/server/chunks/7595.js +0 -1
  635. package/app/.next/server/chunks/7828.js +0 -1
  636. package/app/.next/server/chunks/7930.js +0 -6
  637. package/app/.next/server/chunks/8574.js +0 -1
  638. package/app/.next/server/chunks/8590.js +0 -1
  639. package/app/.next/server/chunks/8651.js +0 -9
  640. package/app/.next/server/chunks/8760.js +0 -1
  641. package/app/.next/server/chunks/9609.js +0 -1
  642. package/app/.next/static/chunks/1321-f7d4f75925b79060.js +0 -1
  643. package/app/.next/static/chunks/4072-fdb34c3bf82582e6.js +0 -6
  644. package/app/.next/static/chunks/5095-47fe70cd930f3c59.js +0 -2
  645. package/app/.next/static/chunks/5497-b59396fb56e7b9b1.js +0 -7
  646. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-efbd0b93d35d25cc.js +0 -1
  647. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-acbac7a67319955a.js +0 -1
  648. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-55598932923e41ce.js +0 -1
  649. package/app/.next/static/chunks/app/(dashboard)/dashboard/focus-ui/page-329b3a170ddd28c6.js +0 -1
  650. package/app/.next/static/chunks/app/(dashboard)/dashboard/network-analysis/page-0ad4db60f9d14f60.js +0 -1
  651. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-f005d7a30159ce4f.js +0 -1
  652. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-c3234f9c82b1a78e.js +0 -3
  653. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-5040868a50d977bf.js +0 -4
  654. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-e089ffa4138753d7.js +0 -1
  655. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-814b95c8fc310a6a.js +0 -1
  656. package/app/.next/static/chunks/app/(dashboard)/layout-00b66bc0e6b38a14.js +0 -1
  657. package/app/.next/static/chunks/app/_global-error/page-814b95c8fc310a6a.js +0 -1
  658. package/app/.next/static/chunks/app/api/auth/login/route-814b95c8fc310a6a.js +0 -1
  659. package/app/.next/static/chunks/app/api/auth/logout/route-814b95c8fc310a6a.js +0 -1
  660. package/app/.next/static/chunks/app/api/auth/me/route-814b95c8fc310a6a.js +0 -1
  661. package/app/.next/static/chunks/app/api/auth/oidc/callback/route-814b95c8fc310a6a.js +0 -1
  662. package/app/.next/static/chunks/app/api/auth/oidc/start/route-814b95c8fc310a6a.js +0 -1
  663. package/app/.next/static/chunks/app/api/auth/oidc/test/route-814b95c8fc310a6a.js +0 -1
  664. package/app/.next/static/chunks/app/api/auth/status/route-814b95c8fc310a6a.js +0 -1
  665. package/app/.next/static/chunks/app/api/cli-tools/all-statuses/route-814b95c8fc310a6a.js +0 -1
  666. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-814b95c8fc310a6a.js +0 -1
  667. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/inject-auth/route-814b95c8fc310a6a.js +0 -1
  668. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/restart/route-814b95c8fc310a6a.js +0 -1
  669. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-814b95c8fc310a6a.js +0 -1
  670. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/test/route-814b95c8fc310a6a.js +0 -1
  671. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-814b95c8fc310a6a.js +0 -1
  672. package/app/.next/static/chunks/app/api/cli-tools/cline-settings/route-814b95c8fc310a6a.js +0 -1
  673. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/activate-account/route-814b95c8fc310a6a.js +0 -1
  674. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-814b95c8fc310a6a.js +0 -1
  675. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-814b95c8fc310a6a.js +0 -1
  676. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-814b95c8fc310a6a.js +0 -1
  677. package/app/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-814b95c8fc310a6a.js +0 -1
  678. package/app/.next/static/chunks/app/api/cli-tools/cowork-settings/route-814b95c8fc310a6a.js +0 -1
  679. package/app/.next/static/chunks/app/api/cli-tools/deepseek-tui-settings/route-814b95c8fc310a6a.js +0 -1
  680. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-814b95c8fc310a6a.js +0 -1
  681. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-814b95c8fc310a6a.js +0 -1
  682. package/app/.next/static/chunks/app/api/cli-tools/jcode-settings/route-814b95c8fc310a6a.js +0 -1
  683. package/app/.next/static/chunks/app/api/cli-tools/kilo-settings/route-814b95c8fc310a6a.js +0 -1
  684. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-814b95c8fc310a6a.js +0 -1
  685. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-814b95c8fc310a6a.js +0 -1
  686. package/app/.next/static/chunks/app/api/combos/[id]/route-814b95c8fc310a6a.js +0 -1
  687. package/app/.next/static/chunks/app/api/combos/route-814b95c8fc310a6a.js +0 -1
  688. package/app/.next/static/chunks/app/api/health/route-814b95c8fc310a6a.js +0 -1
  689. package/app/.next/static/chunks/app/api/init/route-814b95c8fc310a6a.js +0 -1
  690. package/app/.next/static/chunks/app/api/keys/[id]/route-814b95c8fc310a6a.js +0 -1
  691. package/app/.next/static/chunks/app/api/keys/route-814b95c8fc310a6a.js +0 -1
  692. package/app/.next/static/chunks/app/api/locale/route-814b95c8fc310a6a.js +0 -1
  693. package/app/.next/static/chunks/app/api/mcp/[plugin]/message/route-814b95c8fc310a6a.js +0 -1
  694. package/app/.next/static/chunks/app/api/mcp/[plugin]/sse/route-814b95c8fc310a6a.js +0 -1
  695. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-814b95c8fc310a6a.js +0 -1
  696. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-814b95c8fc310a6a.js +0 -1
  697. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-814b95c8fc310a6a.js +0 -1
  698. package/app/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-814b95c8fc310a6a.js +0 -1
  699. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-814b95c8fc310a6a.js +0 -1
  700. package/app/.next/static/chunks/app/api/models/alias/route-814b95c8fc310a6a.js +0 -1
  701. package/app/.next/static/chunks/app/api/models/availability/route-814b95c8fc310a6a.js +0 -1
  702. package/app/.next/static/chunks/app/api/models/custom/route-814b95c8fc310a6a.js +0 -1
  703. package/app/.next/static/chunks/app/api/models/disabled/route-814b95c8fc310a6a.js +0 -1
  704. package/app/.next/static/chunks/app/api/models/route-814b95c8fc310a6a.js +0 -1
  705. package/app/.next/static/chunks/app/api/models/test/route-814b95c8fc310a6a.js +0 -1
  706. package/app/.next/static/chunks/app/api/network-analysis/route-814b95c8fc310a6a.js +0 -1
  707. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-814b95c8fc310a6a.js +0 -1
  708. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-814b95c8fc310a6a.js +0 -1
  709. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-814b95c8fc310a6a.js +0 -1
  710. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-814b95c8fc310a6a.js +0 -1
  711. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-814b95c8fc310a6a.js +0 -1
  712. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-814b95c8fc310a6a.js +0 -1
  713. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-814b95c8fc310a6a.js +0 -1
  714. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-814b95c8fc310a6a.js +0 -1
  715. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-814b95c8fc310a6a.js +0 -1
  716. package/app/.next/static/chunks/app/api/pricing/route-814b95c8fc310a6a.js +0 -1
  717. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-814b95c8fc310a6a.js +0 -1
  718. package/app/.next/static/chunks/app/api/provider-nodes/route-814b95c8fc310a6a.js +0 -1
  719. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-814b95c8fc310a6a.js +0 -1
  720. package/app/.next/static/chunks/app/api/providers/[id]/models/route-814b95c8fc310a6a.js +0 -1
  721. package/app/.next/static/chunks/app/api/providers/[id]/route-814b95c8fc310a6a.js +0 -1
  722. package/app/.next/static/chunks/app/api/providers/[id]/test/route-814b95c8fc310a6a.js +0 -1
  723. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-814b95c8fc310a6a.js +0 -1
  724. package/app/.next/static/chunks/app/api/providers/client/route-814b95c8fc310a6a.js +0 -1
  725. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-814b95c8fc310a6a.js +0 -1
  726. package/app/.next/static/chunks/app/api/providers/route-814b95c8fc310a6a.js +0 -1
  727. package/app/.next/static/chunks/app/api/providers/suggested-models/route-814b95c8fc310a6a.js +0 -1
  728. package/app/.next/static/chunks/app/api/providers/test-batch/route-814b95c8fc310a6a.js +0 -1
  729. package/app/.next/static/chunks/app/api/providers/validate/route-814b95c8fc310a6a.js +0 -1
  730. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-814b95c8fc310a6a.js +0 -1
  731. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-814b95c8fc310a6a.js +0 -1
  732. package/app/.next/static/chunks/app/api/proxy-pools/route-814b95c8fc310a6a.js +0 -1
  733. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-814b95c8fc310a6a.js +0 -1
  734. package/app/.next/static/chunks/app/api/settings/database/route-814b95c8fc310a6a.js +0 -1
  735. package/app/.next/static/chunks/app/api/settings/proxy-test/route-814b95c8fc310a6a.js +0 -1
  736. package/app/.next/static/chunks/app/api/settings/require-login/route-814b95c8fc310a6a.js +0 -1
  737. package/app/.next/static/chunks/app/api/settings/route-814b95c8fc310a6a.js +0 -1
  738. package/app/.next/static/chunks/app/api/shutdown/route-814b95c8fc310a6a.js +0 -1
  739. package/app/.next/static/chunks/app/api/startup-notices/route-814b95c8fc310a6a.js +0 -1
  740. package/app/.next/static/chunks/app/api/tags/route-814b95c8fc310a6a.js +0 -1
  741. package/app/.next/static/chunks/app/api/translator/console-logs/route-814b95c8fc310a6a.js +0 -1
  742. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-814b95c8fc310a6a.js +0 -1
  743. package/app/.next/static/chunks/app/api/translator/load/route-814b95c8fc310a6a.js +0 -1
  744. package/app/.next/static/chunks/app/api/translator/save/route-814b95c8fc310a6a.js +0 -1
  745. package/app/.next/static/chunks/app/api/translator/send/route-814b95c8fc310a6a.js +0 -1
  746. package/app/.next/static/chunks/app/api/translator/translate/route-814b95c8fc310a6a.js +0 -1
  747. package/app/.next/static/chunks/app/api/tunnel/disable/route-814b95c8fc310a6a.js +0 -1
  748. package/app/.next/static/chunks/app/api/tunnel/enable/route-814b95c8fc310a6a.js +0 -1
  749. package/app/.next/static/chunks/app/api/tunnel/status/route-814b95c8fc310a6a.js +0 -1
  750. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-814b95c8fc310a6a.js +0 -1
  751. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-814b95c8fc310a6a.js +0 -1
  752. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-814b95c8fc310a6a.js +0 -1
  753. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-814b95c8fc310a6a.js +0 -1
  754. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-814b95c8fc310a6a.js +0 -1
  755. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-814b95c8fc310a6a.js +0 -1
  756. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-814b95c8fc310a6a.js +0 -1
  757. package/app/.next/static/chunks/app/api/usage/api-keys/route-814b95c8fc310a6a.js +0 -1
  758. package/app/.next/static/chunks/app/api/usage/chart/route-814b95c8fc310a6a.js +0 -1
  759. package/app/.next/static/chunks/app/api/usage/history/route-814b95c8fc310a6a.js +0 -1
  760. package/app/.next/static/chunks/app/api/usage/logs/route-814b95c8fc310a6a.js +0 -1
  761. package/app/.next/static/chunks/app/api/usage/providers/route-814b95c8fc310a6a.js +0 -1
  762. package/app/.next/static/chunks/app/api/usage/request-details/route-814b95c8fc310a6a.js +0 -1
  763. package/app/.next/static/chunks/app/api/usage/request-logs/route-814b95c8fc310a6a.js +0 -1
  764. package/app/.next/static/chunks/app/api/usage/stats/route-814b95c8fc310a6a.js +0 -1
  765. package/app/.next/static/chunks/app/api/usage/stream/route-814b95c8fc310a6a.js +0 -1
  766. package/app/.next/static/chunks/app/api/users/[id]/route-814b95c8fc310a6a.js +0 -1
  767. package/app/.next/static/chunks/app/api/users/route-814b95c8fc310a6a.js +0 -1
  768. package/app/.next/static/chunks/app/api/v1/api/chat/route-814b95c8fc310a6a.js +0 -1
  769. package/app/.next/static/chunks/app/api/v1/audio/speech/route-814b95c8fc310a6a.js +0 -1
  770. package/app/.next/static/chunks/app/api/v1/audio/transcriptions/route-814b95c8fc310a6a.js +0 -1
  771. package/app/.next/static/chunks/app/api/v1/audio/voices/route-814b95c8fc310a6a.js +0 -1
  772. package/app/.next/static/chunks/app/api/v1/chat/completions/route-814b95c8fc310a6a.js +0 -1
  773. package/app/.next/static/chunks/app/api/v1/embeddings/route-814b95c8fc310a6a.js +0 -1
  774. package/app/.next/static/chunks/app/api/v1/images/generations/route-814b95c8fc310a6a.js +0 -1
  775. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-814b95c8fc310a6a.js +0 -1
  776. package/app/.next/static/chunks/app/api/v1/messages/route-814b95c8fc310a6a.js +0 -1
  777. package/app/.next/static/chunks/app/api/v1/models/[kind]/route-814b95c8fc310a6a.js +0 -1
  778. package/app/.next/static/chunks/app/api/v1/models/info/route-814b95c8fc310a6a.js +0 -1
  779. package/app/.next/static/chunks/app/api/v1/models/route-814b95c8fc310a6a.js +0 -1
  780. package/app/.next/static/chunks/app/api/v1/responses/compact/route-814b95c8fc310a6a.js +0 -1
  781. package/app/.next/static/chunks/app/api/v1/responses/route-814b95c8fc310a6a.js +0 -1
  782. package/app/.next/static/chunks/app/api/v1/route-814b95c8fc310a6a.js +0 -1
  783. package/app/.next/static/chunks/app/api/v1/search/route-814b95c8fc310a6a.js +0 -1
  784. package/app/.next/static/chunks/app/api/v1/web/fetch/route-814b95c8fc310a6a.js +0 -1
  785. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-814b95c8fc310a6a.js +0 -1
  786. package/app/.next/static/chunks/app/api/v1beta/models/route-814b95c8fc310a6a.js +0 -1
  787. package/app/.next/static/chunks/app/api/version/route-814b95c8fc310a6a.js +0 -1
  788. package/app/.next/static/chunks/app/api/version/shutdown/route-814b95c8fc310a6a.js +0 -1
  789. package/app/.next/static/chunks/app/api/version/update/route-814b95c8fc310a6a.js +0 -1
  790. package/app/.next/static/chunks/app/login/page-ef8d8c379c2ef99b.js +0 -1
  791. package/app/.next/static/chunks/app/manifest.webmanifest/route-814b95c8fc310a6a.js +0 -1
  792. package/app/.next/static/chunks/app/page-814b95c8fc310a6a.js +0 -1
  793. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-814b95c8fc310a6a.js +0 -1
  794. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-814b95c8fc310a6a.js +0 -1
  795. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-814b95c8fc310a6a.js +0 -1
  796. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-814b95c8fc310a6a.js +0 -1
  797. package/app/.next/static/css/9b92fc8235e99d1e.css +0 -1
  798. package/app/.next/static/f8CJGNglm2tzojtq8hcMG/_buildManifest.js +0 -1
  799. package/app/src/mitm/antigravityAvailableModels.fixture.json +0 -632
  800. package/app/src/mitm/antigravityBootstrap.js +0 -53
  801. package/app/src/mitm/antigravityModels.js +0 -265
  802. package/app/src/mitm/handlers/openrouter.js +0 -201
  803. package/app/src/mitm/models.json +0 -244
  804. package/app/src/mitm/upstreamResolver.js +0 -123
  805. /package/app/.next/static/{f8CJGNglm2tzojtq8hcMG → jssxgK5Jb3snQyFlT_oQ6}/_ssgManifest.js +0 -0
@@ -1,22 +1,17 @@
1
1
  const https = require("https");
2
+ const http2 = require("http2");
3
+ const tls = require("tls");
2
4
  const fs = require("fs");
3
5
  const path = require("path");
4
6
  const dns = require("dns");
5
- const os = require("os");
6
- const zlib = require("zlib");
7
7
  const { promisify } = require("util");
8
8
  const { execSync } = require("child_process");
9
9
  const { log, err, dumpRequest, createResponseDumper, clearDumpDir } = require("./logger");
10
- const { IS_DEV, TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, MODEL_PATTERNS, getToolForHost } = require("./config");
11
- const { pickReachableAddress, createLocalAliasResolutionError } = require("./upstreamResolver");
12
- const {
13
- createLocalAntigravityLoadCodeAssistPayload,
14
- createLocalAntigravityOnboardUserPayload,
15
- } = require("./antigravityBootstrap");
16
- const { buildAntigravityAvailableModelsResponse } = require("./antigravityModels");
10
+ const { IS_DEV, LSOF_BIN, TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, MODEL_PATTERNS, MODEL_NO_MAP, getToolForHost } = require("./config");
17
11
  const { DATA_DIR, MITM_DIR } = require("./paths");
18
12
  const { getCertForDomain } = require("./cert/generate");
19
13
  const { getMitmAlias } = require("./dbReader");
14
+ const { applyAntigravityIdeVersionOverride } = require("./antigravityIdeVersion");
20
15
  const LOCAL_PORT = 443;
21
16
  const IS_WIN = process.platform === "win32";
22
17
  const ENABLE_FILE_LOG = IS_DEV;
@@ -29,7 +24,6 @@ const INTERNAL_REQUEST_HEADER = { name: "x-request-source", value: "local" };
29
24
  // daily-cloudcode-pa (dev endpoint) accepts same body+token. Same trick as open-sse.
30
25
  const HOST_REWRITE = {
31
26
  "cloudcode-pa.googleapis.com": "daily-cloudcode-pa.googleapis.com",
32
- "daily-cloudcode-pa.sandbox.googleapis.com": "daily-cloudcode-pa.googleapis.com",
33
27
  };
34
28
 
35
29
  const handlers = {
@@ -37,7 +31,6 @@ const handlers = {
37
31
  copilot: require("./handlers/copilot"),
38
32
  kiro: require("./handlers/kiro"),
39
33
  cursor: require("./handlers/cursor"),
40
- openrouter: require("./handlers/openrouter"),
41
34
  };
42
35
 
43
36
  // ── SSL / SNI ─────────────────────────────────────────────────
@@ -77,82 +70,18 @@ try {
77
70
 
78
71
  const cachedTargetIPs = {};
79
72
  const CACHE_TTL_MS = 5 * 60 * 1000;
80
- const PUBLIC_DNS_SERVERS = ["8.8.8.8", "1.1.1.1"];
81
- const DNS_QUERY_TIMEOUT_MS = 1500;
82
- const GOOGLE_FRONTEND_FALLBACK_HOSTS = ["storage.googleapis.com", "www.gstatic.com"];
83
- const GOOGLE_HOST_SUFFIXES = [".googleapis.com", ".google.com", ".gstatic.com"];
84
- const PASSTHROUGH_CONNECT_TIMEOUT_MS = 15000;
85
-
86
- function getLocalIPv4Aliases() {
87
- const addresses = [];
88
- for (const iface of Object.values(os.networkInterfaces())) {
89
- for (const address of iface || []) {
90
- if (address.family === "IPv4" || address.family === 4) addresses.push(address.address);
91
- }
92
- }
93
- if (process.platform !== "darwin") return [...new Set(addresses)];
94
- try {
95
- const out = execSync("ifconfig lo0", { encoding: "utf8", windowsHide: true });
96
- addresses.push(...[...out.matchAll(/^\s+inet\s+(\d+\.\d+\.\d+\.\d+)\s+/gm)].map((m) => m[1]));
97
- } catch {
98
- // Best effort; networkInterfaces still covers normal local addresses.
99
- }
100
- return [...new Set(addresses)];
101
- }
102
73
 
103
- async function resolveTargetIP(hostname, options = {}) {
104
- const avoidAddresses = options.avoidAddresses || [];
105
- const force = options.force === true || avoidAddresses.length > 0;
74
+ async function resolveTargetIP(hostname) {
106
75
  const cached = cachedTargetIPs[hostname];
107
- const localAliases = getLocalIPv4Aliases();
108
- if (!force && cached && Date.now() - cached.ts < CACHE_TTL_MS) {
109
- const ip = pickReachableAddress([cached.ip], { localAddresses: localAliases });
110
- if (ip) return ip;
111
- }
112
- const addresses = await resolveIPv4Candidates(hostname);
113
- let ip = pickReachableAddress(addresses, { localAddresses: localAliases, avoidAddresses });
114
- if (!ip && isGoogleHost(hostname)) {
115
- const fallbackAddresses = (await Promise.all(
116
- GOOGLE_FRONTEND_FALLBACK_HOSTS.map((host) => resolveIPv4Candidates(host).catch(() => []))
117
- )).flat();
118
- ip = pickReachableAddress(fallbackAddresses, { localAddresses: localAliases, avoidAddresses });
119
- if (ip) log(`⏩ upstream fallback | ${hostname} via Google frontend ${ip}`);
120
- }
121
- if (!ip) throw createLocalAliasResolutionError(hostname, addresses, { localAddresses: localAliases, avoidAddresses });
122
- cachedTargetIPs[hostname] = { ip, ts: Date.now() };
76
+ if (cached && Date.now() - cached.ts < CACHE_TTL_MS) return cached.ip;
77
+ const resolver = new dns.Resolver();
78
+ resolver.setServers(["8.8.8.8"]);
79
+ const resolve4 = promisify(resolver.resolve4.bind(resolver));
80
+ const addresses = await resolve4(hostname);
81
+ cachedTargetIPs[hostname] = { ip: addresses[0], ts: Date.now() };
123
82
  return cachedTargetIPs[hostname].ip;
124
83
  }
125
84
 
126
- function isGoogleHost(hostname) {
127
- return GOOGLE_HOST_SUFFIXES.some((suffix) => hostname === suffix.slice(1) || hostname.endsWith(suffix));
128
- }
129
-
130
- async function resolveIPv4Candidates(hostname) {
131
- const attempts = await Promise.all(PUBLIC_DNS_SERVERS.map(async (server) => {
132
- const resolver = new dns.Resolver();
133
- resolver.setServers([server]);
134
- const resolve4 = promisify(resolver.resolve4.bind(resolver));
135
- return withTimeout(resolve4(hostname), DNS_QUERY_TIMEOUT_MS).catch(() => []);
136
- }));
137
- const addresses = [...new Set(attempts.flat())];
138
- if (addresses.length > 0) return addresses;
139
-
140
- const lookup = promisify(dns.lookup);
141
- const records = await lookup(hostname, { family: 4, all: true }).catch(() => []);
142
- if (records.length === 0) throw new Error(`DNS resolve failed for ${hostname}`);
143
- return [...new Set(records.map((record) => record.address))];
144
- }
145
-
146
- function withTimeout(promise, timeoutMs) {
147
- let timeout;
148
- return Promise.race([
149
- promise,
150
- new Promise((_, reject) => {
151
- timeout = setTimeout(() => reject(new Error("DNS query timed out")), timeoutMs);
152
- }),
153
- ]).finally(() => clearTimeout(timeout));
154
- }
155
-
156
85
  function collectBodyRaw(req) {
157
86
  return new Promise((resolve, reject) => {
158
87
  const chunks = [];
@@ -166,6 +95,10 @@ function collectBodyRaw(req) {
166
95
  function extractModel(url, body) {
167
96
  const urlMatch = url.match(/\/models\/([^/:]+)/);
168
97
  if (urlMatch) return urlMatch[1];
98
+
99
+ // Skip parsing if body is binary (AWS EventStream, Protocol Buffers, etc.)
100
+ if (isBinaryData(body)) return null;
101
+
169
102
  try {
170
103
  const parsed = JSON.parse(body.toString());
171
104
  if (parsed.conversationState) {
@@ -175,20 +108,38 @@ function extractModel(url, body) {
175
108
  } catch { return null; }
176
109
  }
177
110
 
111
+ // Detect binary data vs JSON text
112
+ function isBinaryData(buffer) {
113
+ if (!buffer || buffer.length === 0) return false;
114
+ // AWS EventStream signature: first 4 bytes = frame length (big-endian uint32)
115
+ // Check for non-printable chars in first 100 bytes (common in binary protocols)
116
+ const sample = buffer.slice(0, Math.min(100, buffer.length));
117
+ let nonPrintable = 0;
118
+ for (let i = 0; i < sample.length; i++) {
119
+ const byte = sample[i];
120
+ // Count non-ASCII printable chars (excluding whitespace)
121
+ if (byte < 0x20 && byte !== 0x09 && byte !== 0x0A && byte !== 0x0D) {
122
+ nonPrintable++;
123
+ }
124
+ if (byte > 0x7E) nonPrintable++;
125
+ }
126
+ // If >30% non-printable, treat as binary
127
+ return (nonPrintable / sample.length) > 0.3;
128
+ }
129
+
178
130
  function getMappedModel(tool, model) {
179
131
  if (!model) return null;
180
132
  try {
181
- const aliases = {
182
- ...(MODEL_SYNONYMS?.[tool]?.__defaults || {}),
183
- ...(getMitmAlias(tool) || {}),
184
- };
185
- // Normalize via synonym map (e.g., gemini-default → gemini-3-flash)
186
- const lookup = MODEL_SYNONYMS?.[tool]?.[model] || model;
133
+ const aliases = getMitmAlias(tool);
134
+ if (!aliases) return null;
135
+ // Normalize via synonym map (e.g., public AG names -> backend model ids)
136
+ const normalizedModel = String(model).replace(/^models\//, "");
137
+ const lookup = MODEL_SYNONYMS?.[tool]?.[normalizedModel] || normalizedModel;
187
138
  if (aliases[lookup]) return aliases[lookup];
188
139
  // Prefix match fallback
189
140
  const prefixKey = Object.keys(aliases).find(k => k && aliases[k] && (lookup.startsWith(k) || k.startsWith(lookup)));
190
141
  if (prefixKey) return aliases[prefixKey];
191
- // Pattern fallback: catches AG renamed variants (e.g. gemini-pro-agent → gemini-3.1-pro-high)
142
+ // Pattern fallback: catches AG renamed variants (e.g. deprecated pro IDs → gemini-pro-agent)
192
143
  const patterns = MODEL_PATTERNS?.[tool] || [];
193
144
  for (const { match, alias } of patterns) {
194
145
  if (match.test(lookup) && aliases[alias]) return aliases[alias];
@@ -197,220 +148,177 @@ function getMappedModel(tool, model) {
197
148
  } catch { return null; }
198
149
  }
199
150
 
200
- function respondJson(res, statusCode, payload) {
201
- const body = JSON.stringify(payload);
202
- res.writeHead(statusCode, {
203
- "Content-Type": "application/json; charset=UTF-8",
204
- "Content-Length": Buffer.byteLength(body),
205
- });
206
- res.end(body);
207
- }
208
-
209
- function shouldDumpRequest(req) {
210
- if (process.env.OPENROUTERX_MITM_DUMP_ALL === "1") return true;
211
- return !!getToolForHost(req.headers.host);
212
- }
213
-
214
- function handleLocalAntigravityBootstrap(req, res) {
215
- if (req.url.includes(":fetchAvailableModels") && process.env.OPENROUTERX_AG_LOCAL_MODELS !== "0") {
216
- const payload = buildAntigravityAvailableModelsResponse();
217
- respondJson(res, 200, payload);
218
- log(`🧩 bootstrap | antigravity | local fetchAvailableModels (${Object.keys(payload.models || {}).length} models)`);
219
- return true;
220
- }
221
-
222
- // The language server refreshes this cache next to the model list. Upstream
223
- // can reject the MITM-shaped request with INVALID_ARGUMENT, which then marks
224
- // the whole background cache refresh as failed even when models were local.
225
- if (req.url.includes(":fetchAdminControls")) {
226
- respondJson(res, 200, { adminControls: [] });
227
- log("🧩 bootstrap | antigravity | local fetchAdminControls");
228
- return true;
229
- }
230
-
231
- const localAuthBootstrap = process.env.OPENROUTERX_AG_LOCAL_AUTH !== "0"
232
- || process.env.OPENROUTERX_AG_MOCK_BOOTSTRAP === "1";
233
-
234
- if (!localAuthBootstrap) return false;
235
-
236
- if (req.url.includes(":loadCodeAssist")) {
237
- respondJson(res, 200, createLocalAntigravityLoadCodeAssistPayload());
238
- log("🧩 bootstrap | antigravity | local loadCodeAssist");
239
- return true;
240
- }
241
-
242
- if (req.url.includes(":onboardUser")) {
243
- respondJson(res, 200, createLocalAntigravityOnboardUserPayload());
244
- log("🧩 bootstrap | antigravity | local onboardUser");
245
- return true;
246
- }
247
-
248
- if (req.url.includes("/cascadeNuxes")) {
249
- respondJson(res, 200, {
250
- nuxes: [],
251
- completedNuxes: [],
252
- });
253
- log("🧩 bootstrap | antigravity | local cascadeNuxes");
254
- return true;
151
+ /**
152
+ * Forward request to real upstream.
153
+ * Optional onResponse(rawBuffer) callback — if provided, tees the response
154
+ * so it's both forwarded to client AND passed to the callback for inspection.
155
+ * Also tees full stream into a dump file when ENABLE_FILE_LOG is on.
156
+ */
157
+ async function passthrough(req, res, bodyBuffer, onResponse) {
158
+ const originalHost = (req.headers.host || TARGET_HOSTS[0]).split(":")[0];
159
+ // Only rewrite host for chat endpoints — daily-cloudcode-pa rejects auth/login requests
160
+ const isChatEndpoint = req.url.includes(":generateContent") || req.url.includes(":streamGenerateContent");
161
+ const targetHost = isChatEndpoint ? (HOST_REWRITE[originalHost] || originalHost) : originalHost;
162
+ const dumper = ENABLE_FILE_LOG ? createResponseDumper(req, "passthrough") : null;
163
+
164
+ const tool = getToolForHost(req.headers.host);
165
+ const versionOverride = tool === "antigravity"
166
+ ? applyAntigravityIdeVersionOverride(bodyBuffer, req.headers)
167
+ : { bodyBuffer, headers: req.headers };
168
+ const bodyForForwarding = versionOverride.bodyBuffer;
169
+ const headersForForwarding = { ...versionOverride.headers, host: targetHost };
170
+ if (bodyForForwarding !== bodyBuffer) {
171
+ headersForForwarding["content-length"] = String(bodyForForwarding.length);
255
172
  }
256
173
 
257
- return false;
258
- }
259
-
260
- function decodeResponseBody(buf, headers = {}) {
261
- if (!buf || buf.length === 0) return buf;
262
- const enc = String(headers["content-encoding"] || headers["Content-Encoding"] || "").toLowerCase();
174
+ // ALPN negotiate: try HTTP/2 first (like browsers/mitmweb), fallback HTTP/1.1
263
175
  try {
264
- if (enc.includes("gzip")) return zlib.gunzipSync(buf);
265
- if (enc.includes("br")) return zlib.brotliDecompressSync(buf);
266
- if (enc.includes("deflate")) return zlib.inflateSync(buf);
176
+ const proto = await negotiateAlpn(targetHost);
177
+ if (proto === "h2") {
178
+ return await passthroughHttp2(req, res, bodyForForwarding, headersForForwarding, targetHost, onResponse, dumper);
179
+ }
267
180
  } catch (e) {
268
- err(`loadCodeAssist decode failed: ${e.message}`);
181
+ err(`[mitm] ALPN negotiate failed: ${e.message}, fallback to HTTP/1.1`);
269
182
  }
270
- return buf;
271
- }
272
183
 
273
- function summarizeTier(tier) {
274
- if (!tier || typeof tier !== "object") return String(tier || "unknown");
275
- const id = tier.id || tier.tierId || tier.name || tier.displayName || "unknown";
276
- const name = tier.displayName || tier.name || "";
277
- const marker = tier.isDefault ? "*" : "";
278
- return name && name !== id ? `${id}${marker}(${name})` : `${id}${marker}`;
184
+ return passthroughHttps(req, res, bodyForForwarding, headersForForwarding, targetHost, onResponse, dumper);
279
185
  }
280
186
 
281
- function summarizeIneligibleTier(tier) {
282
- if (!tier || typeof tier !== "object") return String(tier || "unknown");
283
- const id = tier.id || tier.tierId || tier.name || tier.displayName || "unknown";
284
- const reason = tier.ineligibilityReason || tier.reason || tier.reasonCode || tier.code || "unknown";
285
- const message = tier.message || tier.ineligibilityMessage || tier.description || "";
286
- return message ? `${id}:${reason}:${message}` : `${id}:${reason}`;
187
+ // ── ALPN negotiation cache ────────────────────────────────────
188
+ const alpnCache = new Map(); // host "h2" | "http/1.1"
189
+ async function negotiateAlpn(host) {
190
+ if (alpnCache.has(host)) return alpnCache.get(host);
191
+ const ip = await resolveTargetIP(host);
192
+ return new Promise((resolve, reject) => {
193
+ const socket = tls.connect({
194
+ host: ip, port: 443, servername: host,
195
+ ALPNProtocols: ["h2", "http/1.1"], rejectUnauthorized: false,
196
+ }, () => {
197
+ const proto = socket.alpnProtocol || "http/1.1";
198
+ alpnCache.set(host, proto);
199
+ log(`🔗 [mitm] ALPN ${host} → ${proto}`);
200
+ socket.end();
201
+ resolve(proto);
202
+ });
203
+ socket.once("error", reject);
204
+ socket.setTimeout(5000, () => { socket.destroy(new Error("ALPN timeout")); });
205
+ });
287
206
  }
288
207
 
289
- function inspectAntigravityLoadCodeAssist(rawBuffer, headers) {
290
- const text = decodeResponseBody(rawBuffer, headers).toString("utf8");
291
- try {
292
- const payload = JSON.parse(text);
293
- const allowed = Array.isArray(payload.allowedTiers)
294
- ? payload.allowedTiers.map(summarizeTier)
295
- : [];
296
- const ineligible = Array.isArray(payload.ineligibleTiers)
297
- ? payload.ineligibleTiers.map(summarizeIneligibleTier)
298
- : [];
299
- const project = payload.cloudaicompanionProject || payload.cloudaicompanionProjectId || payload.project || "";
300
- const validationUrl = /https?:\/\/\S+/i.test(text) ? "present" : "none";
301
-
302
- log(
303
- `🧩 loadCodeAssist MITM | status=passthrough | project=${project || "none"} | ` +
304
- `allowed=${allowed.length ? allowed.join(", ") : "none"} | ` +
305
- `ineligible=${ineligible.length ? ineligible.join(" | ") : "none"} | validationUrl=${validationUrl}`
306
- );
307
- } catch {
308
- log(`🧩 loadCodeAssist MITM | status=passthrough | non-json response bytes=${rawBuffer.length}`);
208
+ // HTTP/2 passthrough using node:http2 native
209
+ async function passthroughHttp2(req, res, bodyBuffer, headers, targetHost, onResponse, dumper) {
210
+ const targetIP = await resolveTargetIP(targetHost);
211
+ // HTTP/2 pseudo-headers required; strip HTTP/1.1-only headers
212
+ const h2Headers = {};
213
+ for (const [k, v] of Object.entries(headers)) {
214
+ const lk = k.toLowerCase();
215
+ if (lk === "host" || lk === "connection" || lk === "keep-alive" ||
216
+ lk === "transfer-encoding" || lk === "upgrade" || lk === "proxy-connection") continue;
217
+ h2Headers[lk] = v;
309
218
  }
310
- }
311
-
312
- /**
313
- * Forward request to real upstream.
314
- * Optional onResponse(rawBuffer, headers) callback — if provided, tees the response
315
- * so it's both forwarded to client AND passed to the callback for inspection.
316
- * Optional transformResponse(rawBuffer, headers) callback — if provided, buffers
317
- * the full response, passes it to the callback, and sends the returned buffer
318
- * to the client instead of the original response.
319
- * Also tees full stream into a dump file when ENABLE_FILE_LOG is on.
320
- */
321
- async function passthrough(req, res, bodyBuffer, onResponse, transformResponse) {
322
- const originalHost = (req.headers.host || TARGET_HOSTS[0]).split(":")[0];
323
- const targetHost = HOST_REWRITE[originalHost] || originalHost;
324
- const dumper = ENABLE_FILE_LOG && shouldDumpRequest(req) ? createResponseDumper(req, "passthrough") : null;
325
- const writeResolveError = (e) => {
326
- err(`Passthrough resolve error for ${targetHost}: ${e.code || e.message}`);
327
- if (dumper) { dumper.writeChunk(`\n[ERROR] resolve ${targetHost}: ${e.message}\n`); dumper.end(); }
328
- if (!res.headersSent) res.writeHead(502, { "Content-Type": "application/json" });
329
- res.end(JSON.stringify({ error: { message: e.message || `DNS resolve failed for ${targetHost}`, type: "mitm_dns_error" } }));
330
- };
331
-
332
- const startForward = async (attempt = 0, avoidAddresses = []) => {
333
- let targetIP;
334
- try {
335
- targetIP = await resolveTargetIP(targetHost, { force: attempt > 0, avoidAddresses });
336
- } catch (e) {
337
- writeResolveError(e);
338
- return;
339
- }
219
+ h2Headers[":method"] = req.method;
220
+ h2Headers[":path"] = req.url;
221
+ h2Headers[":scheme"] = "https";
222
+ h2Headers[":authority"] = targetHost;
223
+
224
+ return new Promise((resolve) => {
225
+ const client = http2.connect(`https://${targetHost}`, {
226
+ createConnection: () => tls.connect({
227
+ host: targetIP, port: 443, servername: targetHost,
228
+ ALPNProtocols: ["h2"], rejectUnauthorized: false,
229
+ }),
230
+ });
231
+ client.once("error", (e) => {
232
+ err(`[mitm] http2 client error: ${e.message}`);
233
+ if (dumper) { dumper.writeChunk(`\n[ERROR h2] ${e.message}\n`); dumper.end(); }
234
+ if (!res.headersSent) res.writeHead(502);
235
+ if (!res.writableEnded) res.end("Bad Gateway");
236
+ try { client.close(); } catch {}
237
+ resolve();
238
+ });
340
239
 
341
- const forwardReq = https.request({
342
- hostname: targetIP,
343
- port: 443,
344
- path: req.url,
345
- method: req.method,
346
- headers: { ...req.headers, host: targetHost },
347
- servername: targetHost,
348
- rejectUnauthorized: false
349
- }, (forwardRes) => {
350
- // When transformResponse is provided, buffer the full response so we can
351
- // modify it before sending to the client.
352
- const shouldBuffer = transformResponse != null;
353
- if (!shouldBuffer) res.writeHead(forwardRes.statusCode, forwardRes.headers);
354
-
355
- if (!onResponse && !dumper && !shouldBuffer) {
356
- forwardRes.pipe(res);
357
- return;
240
+ const stream = client.request(h2Headers, { endStream: bodyBuffer.length === 0 });
241
+ if (bodyBuffer.length > 0) stream.end(bodyBuffer);
242
+
243
+ stream.once("response", (responseHeaders) => {
244
+ const status = responseHeaders[":status"];
245
+ // Filter pseudo-headers + connection-specific
246
+ const outHeaders = {};
247
+ for (const [k, v] of Object.entries(responseHeaders)) {
248
+ if (k.startsWith(":")) continue;
249
+ if (k === "connection" || k === "keep-alive" || k === "transfer-encoding") continue;
250
+ outHeaders[k] = v;
358
251
  }
252
+ res.writeHead(status, outHeaders);
253
+ if (dumper) dumper.writeHeader(status, outHeaders);
359
254
 
360
255
  const chunks = [];
361
- forwardRes.on("data", chunk => {
256
+ stream.on("data", chunk => {
362
257
  if (dumper) dumper.writeChunk(chunk);
363
- if (onResponse || shouldBuffer) chunks.push(chunk);
364
- if (!shouldBuffer) res.write(chunk);
258
+ if (onResponse) chunks.push(chunk);
259
+ res.write(chunk);
365
260
  });
366
- forwardRes.on("end", () => {
367
- const rawBuffer = Buffer.concat(chunks);
368
-
369
- if (shouldBuffer) {
370
- try {
371
- const modified = transformResponse(rawBuffer, forwardRes.headers);
372
- // Update Content-Length if present to match modified body
373
- const headers = { ...forwardRes.headers };
374
- if (headers["content-length"] != null) {
375
- headers["content-length"] = String(Buffer.byteLength(modified));
376
- }
377
- res.writeHead(forwardRes.statusCode, headers);
378
- res.end(modified);
379
- } catch (e) {
380
- err(`transformResponse error: ${e.message}`);
381
- if (!res.headersSent) res.writeHead(502);
382
- res.end("Bad Gateway");
383
- }
384
- } else {
385
- res.end();
386
- }
387
-
261
+ stream.on("end", () => {
388
262
  if (dumper) dumper.end();
389
- if (onResponse) try { onResponse(rawBuffer, forwardRes.headers); } catch { /* ignore */ }
263
+ if (!res.writableEnded) res.end();
264
+ if (onResponse) try { onResponse(Buffer.concat(chunks), outHeaders); } catch {}
265
+ try { client.close(); } catch {}
266
+ resolve();
390
267
  });
391
268
  });
392
-
393
- forwardReq.on("error", (e) => {
394
- if (attempt === 0 && (e.code === "EADDRNOTAVAIL" || /secure TLS connection/i.test(e.message || ""))) {
395
- delete cachedTargetIPs[targetHost];
396
- log(`⏩ passthrough retry | ${targetHost} | ${targetIP} failed: ${e.code || e.message}`);
397
- startForward(1, [targetIP]);
398
- return;
399
- }
400
- err(`Passthrough error: ${e.message}`);
401
- if (dumper) { dumper.writeChunk(`\n[ERROR] ${e.message}\n`); dumper.end(); }
269
+ stream.once("error", (e) => {
270
+ err(`[mitm] http2 stream error: ${e.message}`);
271
+ if (dumper) { dumper.writeChunk(`\n[ERROR h2-stream] ${e.message}\n`); dumper.end(); }
402
272
  if (!res.headersSent) res.writeHead(502);
403
- res.end("Bad Gateway");
273
+ if (!res.writableEnded) res.end();
274
+ try { client.close(); } catch {}
275
+ resolve();
404
276
  });
405
- forwardReq.setTimeout(PASSTHROUGH_CONNECT_TIMEOUT_MS, () => {
406
- forwardReq.destroy(new Error(`Passthrough timed out connecting to ${targetHost}`));
277
+ });
278
+ }
279
+
280
+ // Fallback: raw https.request HTTP/1.1 with custom DNS (bypasses /etc/hosts MITM loop)
281
+ async function passthroughHttps(req, res, bodyBuffer, headers, targetHost, onResponse, dumper) {
282
+ const targetIP = await resolveTargetIP(targetHost);
283
+ const forwardReq = https.request({
284
+ hostname: targetIP,
285
+ port: 443,
286
+ path: req.url,
287
+ method: req.method,
288
+ headers,
289
+ servername: targetHost,
290
+ rejectUnauthorized: false
291
+ }, (forwardRes) => {
292
+ res.writeHead(forwardRes.statusCode, forwardRes.headers);
293
+ if (dumper) dumper.writeHeader(forwardRes.statusCode, forwardRes.headers);
294
+
295
+ if (!onResponse && !dumper) {
296
+ forwardRes.pipe(res);
297
+ return;
298
+ }
299
+
300
+ const chunks = [];
301
+ forwardRes.on("data", chunk => {
302
+ if (dumper) dumper.writeChunk(chunk);
303
+ if (onResponse) chunks.push(chunk);
304
+ res.write(chunk);
407
305
  });
306
+ forwardRes.on("end", () => {
307
+ if (dumper) dumper.end();
308
+ res.end();
309
+ if (onResponse) try { onResponse(Buffer.concat(chunks), forwardRes.headers); } catch { /* ignore */ }
310
+ });
311
+ });
408
312
 
409
- if (bodyBuffer.length > 0) forwardReq.write(bodyBuffer);
410
- forwardReq.end();
411
- };
313
+ forwardReq.on("error", (e) => {
314
+ err(`Passthrough error: ${e.message}`);
315
+ if (dumper) { dumper.writeChunk(`\n[ERROR] ${e.message}\n`); dumper.end(); }
316
+ if (!res.headersSent) res.writeHead(502);
317
+ res.end("Bad Gateway");
318
+ });
412
319
 
413
- await startForward();
320
+ if (bodyBuffer.length > 0) forwardReq.write(bodyBuffer);
321
+ forwardReq.end();
414
322
  }
415
323
 
416
324
  // ── Request handler ───────────────────────────────────────────
@@ -424,9 +332,9 @@ const server = https.createServer(sslOptions, async (req, res) => {
424
332
  }
425
333
 
426
334
  const bodyBuffer = await collectBodyRaw(req);
427
- if (ENABLE_FILE_LOG && shouldDumpRequest(req)) dumpRequest(req, bodyBuffer, "raw");
335
+ if (ENABLE_FILE_LOG) dumpRequest(req, bodyBuffer, "raw");
428
336
 
429
- // Anti-loop: skip requests from OpenrouterX
337
+ // Anti-loop: skip requests from 9Router
430
338
  if (req.headers[INTERNAL_REQUEST_HEADER.name] === INTERNAL_REQUEST_HEADER.value) {
431
339
  return passthrough(req, res, bodyBuffer);
432
340
  }
@@ -434,12 +342,6 @@ const server = https.createServer(sslOptions, async (req, res) => {
434
342
  const tool = getToolForHost(req.headers.host);
435
343
  if (!tool) return passthrough(req, res, bodyBuffer);
436
344
 
437
- if (tool === "antigravity" && handleLocalAntigravityBootstrap(req, res)) return;
438
- if (tool === "antigravity" && req.url.includes(":loadCodeAssist")) {
439
- log("🧩 loadCodeAssist MITM | passthrough inspect");
440
- return passthrough(req, res, bodyBuffer, inspectAntigravityLoadCodeAssist);
441
- }
442
-
443
345
  const patterns = URL_PATTERNS[tool] || [];
444
346
  const isChat = patterns.some(p => req.url.includes(p));
445
347
  if (!isChat) return passthrough(req, res, bodyBuffer);
@@ -451,15 +353,20 @@ const server = https.createServer(sslOptions, async (req, res) => {
451
353
  }
452
354
 
453
355
  const model = extractModel(req.url, bodyBuffer);
356
+
357
+ // Intentional passthrough: some models must never be re-routed (e.g. Antigravity
358
+ // tab-autocomplete) so latency-critical inline completion stays native. Silent — this
359
+ // is by design, not a leak, and fires per keystroke. See MODEL_NO_MAP in config.js.
360
+ if (model && (MODEL_NO_MAP[tool] || []).some((re) => re.test(model))) {
361
+ return passthrough(req, res, bodyBuffer);
362
+ }
363
+
454
364
  const mappedModel = getMappedModel(tool, model);
455
- const aliasMappings = getMitmAlias(tool) || {};
456
- if (!mappedModel && tool !== "openrouter" && !req.url.includes("/models")) {
457
- log(`⏩ passthrough | no mapping | ${tool} | ${model || "unknown"}`);
365
+ if (!mappedModel) {
458
366
  return passthrough(req, res, bodyBuffer);
459
367
  }
460
368
 
461
- log(`⚡ intercept | ${tool} | ${model || req.url} → ${mappedModel || "dynamic"}`);
462
- return handlers[tool].intercept(req, res, bodyBuffer, mappedModel, passthrough, aliasMappings);
369
+ return handlers[tool].intercept(req, res, bodyBuffer, mappedModel, passthrough);
463
370
  } catch (e) {
464
371
  err(`Unhandled error: ${e.message}`);
465
372
  if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
@@ -478,7 +385,7 @@ function killPort(port) {
478
385
  if (!out) return;
479
386
  pidList = out.split(/\r?\n/).map(s => s.trim()).filter(p => p && Number(p) !== process.pid && Number(p) > 4);
480
387
  } else {
481
- const out = execSync(`lsof -nP -iTCP:${port} -sTCP:LISTEN -t`, { encoding: "utf-8", windowsHide: true }).trim();
388
+ const out = execSync(`${LSOF_BIN} -nP -iTCP:${port} -sTCP:LISTEN -t`, { encoding: "utf-8", windowsHide: true }).trim();
482
389
  if (!out) return;
483
390
  pidList = out.split("\n").filter(p => p && Number(p) !== process.pid);
484
391
  }
@@ -3,15 +3,10 @@
3
3
  * Kept in sync with MITM routing; shared by Node (dnsConfig) and dashboard UI.
4
4
  */
5
5
  const TOOL_HOSTS = {
6
- antigravity: [
7
- "daily-cloudcode-pa.googleapis.com",
8
- "cloudcode-pa.googleapis.com",
9
- "daily-cloudcode-pa.sandbox.googleapis.com",
10
- ],
6
+ antigravity: ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"],
11
7
  copilot: ["api.individual.githubcopilot.com"],
12
8
  kiro: ["q.us-east-1.amazonaws.com", "codewhisperer.us-east-1.amazonaws.com"],
13
9
  cursor: ["api2.cursor.sh"],
14
- openrouter: ["openrouter.ai", "api.openrouter.ai"],
15
10
  };
16
11
 
17
12
  module.exports = { TOOL_HOSTS };