@yina-npm/openrouterx 0.4.7 → 0.4.11

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 (908) hide show
  1. package/README.md +250 -1066
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +14 -1
  4. package/app/.next/build-manifest.json +3 -3
  5. package/app/.next/prerender-manifest.json +3 -315
  6. package/app/.next/react-loadable-manifest.json +1 -8
  7. package/app/.next/required-server-files.json +3 -3
  8. package/app/.next/routes-manifest.json +82 -0
  9. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js +2 -0
  10. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page.js.nft.json +1 -0
  11. package/app/.next/server/app/(dashboard)/dashboard/admin/keys/page_client-reference-manifest.js +1 -0
  12. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js +2 -0
  13. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page.js.nft.json +1 -0
  14. package/app/.next/server/app/(dashboard)/dashboard/admin/users/page_client-reference-manifest.js +1 -0
  15. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  16. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  19. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  22. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  25. package/app/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  28. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +16 -14
  31. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  34. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  35. package/app/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/combo/[id]/page.js +5 -0
  37. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/combo/[id]/page.js.nft.json +1 -0
  38. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/combo/[id]/page_client-reference-manifest.js +1 -0
  39. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -0
  40. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -0
  41. package/app/.next/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -0
  42. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  43. package/app/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  44. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  46. package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  47. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  49. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  50. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  52. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  53. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  55. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  56. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  58. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  59. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  61. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  62. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  64. package/app/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  65. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  67. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  68. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  70. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  71. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/(dashboard)/dashboard/user/page.js +5 -0
  73. package/app/.next/server/app/(dashboard)/dashboard/user/page.js.nft.json +1 -0
  74. package/app/.next/server/app/(dashboard)/dashboard/user/page_client-reference-manifest.js +1 -0
  75. package/app/.next/server/app/_global-error/page.js +2 -2
  76. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/_global-error.html +1 -1
  78. package/app/.next/server/app/_global-error.rsc +1 -1
  79. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  80. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  81. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  82. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  83. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  84. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  85. package/app/.next/server/app/_not-found/page.js +2 -2
  86. package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
  87. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/_not-found.html +1 -1
  89. package/app/.next/server/app/_not-found.rsc +4 -4
  90. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  91. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  92. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  93. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  94. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  95. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  96. package/app/.next/server/app/api/auth/login/route.js +1 -1
  97. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  98. package/app/.next/server/app/api/auth/logout/route.js +1 -1
  99. package/app/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  100. package/app/.next/server/app/api/auth/me/route.js +1 -0
  101. package/app/.next/server/app/api/auth/me/route.js.nft.json +1 -0
  102. package/app/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -0
  103. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  104. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  106. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  107. package/app/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  108. package/app/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  109. package/app/.next/server/app/api/cli-tools/codex-settings/route.js +3 -3
  110. package/app/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  112. package/app/.next/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  113. package/app/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  114. package/app/.next/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js +7 -7
  116. package/app/.next/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  117. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  118. package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  119. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  120. package/app/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  121. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  122. package/app/.next/server/app/api/cloud/auth/route.js.nft.json +1 -1
  123. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  124. package/app/.next/server/app/api/cloud/credentials/update/route.js.nft.json +1 -1
  125. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  126. package/app/.next/server/app/api/cloud/model/resolve/route.js.nft.json +1 -1
  127. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  128. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  129. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  130. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  131. package/app/.next/server/app/api/combos/route.js +1 -1
  132. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  133. package/app/.next/server/app/api/health/route.js +1 -1
  134. package/app/.next/server/app/api/health/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/init/route.js +1 -1
  136. package/app/.next/server/app/api/init/route.js.nft.json +1 -1
  137. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  138. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  139. package/app/.next/server/app/api/keys/route.js +1 -1
  140. package/app/.next/server/app/api/keys/route.js.nft.json +1 -1
  141. package/app/.next/server/app/api/locale/route.js +1 -1
  142. package/app/.next/server/app/api/locale/route.js.nft.json +1 -1
  143. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -0
  144. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -0
  145. package/app/.next/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -0
  146. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  147. package/app/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  148. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -0
  149. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -0
  150. package/app/.next/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -0
  151. package/app/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  152. package/app/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  153. package/app/.next/server/app/api/models/alias/route.js +1 -1
  154. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  155. package/app/.next/server/app/api/models/availability/route.js +1 -1
  156. package/app/.next/server/app/api/models/availability/route.js.nft.json +1 -1
  157. package/app/.next/server/app/api/models/custom/route.js +1 -1
  158. package/app/.next/server/app/api/models/custom/route.js.nft.json +1 -1
  159. package/app/.next/server/app/api/models/route.js +1 -1
  160. package/app/.next/server/app/api/models/route.js.nft.json +1 -1
  161. package/app/.next/server/app/api/models/test/route.js +1 -1
  162. package/app/.next/server/app/api/models/test/route.js.nft.json +1 -1
  163. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  164. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  165. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  166. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  167. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  168. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  169. package/app/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  170. package/app/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  171. package/app/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  172. package/app/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  173. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  174. package/app/.next/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  175. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  176. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  177. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  178. package/app/.next/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  179. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  180. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  181. package/app/.next/server/app/api/pricing/route.js +1 -1
  182. package/app/.next/server/app/api/pricing/route.js.nft.json +1 -1
  183. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  184. package/app/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  185. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  186. package/app/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  187. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  188. package/app/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  189. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  190. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  191. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  192. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  193. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  194. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  195. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  196. package/app/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  197. package/app/.next/server/app/api/providers/client/route.js +1 -1
  198. package/app/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  199. package/app/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  200. package/app/.next/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  201. package/app/.next/server/app/api/providers/route.js +1 -1
  202. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  203. package/app/.next/server/app/api/providers/suggested-models/route.js +1 -1
  204. package/app/.next/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  205. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  206. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  207. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  208. package/app/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  209. package/app/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  210. package/app/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  211. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  212. package/app/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  213. package/app/.next/server/app/api/proxy-pools/route.js +1 -1
  214. package/app/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
  215. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  216. package/app/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  217. package/app/.next/server/app/api/settings/database/route.js +1 -1
  218. package/app/.next/server/app/api/settings/database/route.js.nft.json +1 -1
  219. package/app/.next/server/app/api/settings/proxy-test/route.js +1 -1
  220. package/app/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  221. package/app/.next/server/app/api/settings/require-login/route.js +1 -1
  222. package/app/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  223. package/app/.next/server/app/api/settings/route.js +1 -1
  224. package/app/.next/server/app/api/settings/route.js.nft.json +1 -1
  225. package/app/.next/server/app/api/shutdown/route.js +1 -1
  226. package/app/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  227. package/app/.next/server/app/api/tags/route.js +1 -1
  228. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  229. package/app/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  230. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  231. package/app/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  232. package/app/.next/server/app/api/translator/load/route.js +1 -1
  233. package/app/.next/server/app/api/translator/load/route.js.nft.json +1 -1
  234. package/app/.next/server/app/api/translator/save/route.js +1 -1
  235. package/app/.next/server/app/api/translator/save/route.js.nft.json +1 -1
  236. package/app/.next/server/app/api/translator/send/route.js +1 -1
  237. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  238. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  239. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  240. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  241. package/app/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  242. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  243. package/app/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  244. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  245. package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  246. package/app/.next/server/app/api/tunnel/tailscale-check/route.js +23 -4
  247. package/app/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  248. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  249. package/app/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  250. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  251. package/app/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  252. package/app/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  253. package/app/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  254. package/app/.next/server/app/api/tunnel/tailscale-login/route.js +23 -4
  255. package/app/.next/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  256. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  257. package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  258. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  259. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  260. package/app/.next/server/app/api/usage/api-keys/route.js +1 -0
  261. package/app/.next/server/app/api/usage/api-keys/route.js.nft.json +1 -0
  262. package/app/.next/server/app/api/usage/api-keys/route_client-reference-manifest.js +1 -0
  263. package/app/.next/server/app/api/usage/chart/route.js +1 -1
  264. package/app/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
  265. package/app/.next/server/app/api/usage/history/route.js +1 -1
  266. package/app/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  267. package/app/.next/server/app/api/usage/logs/route.js +1 -1
  268. package/app/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  269. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  270. package/app/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  271. package/app/.next/server/app/api/usage/request-details/route.js +1 -1
  272. package/app/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
  273. package/app/.next/server/app/api/usage/request-logs/route.js +1 -1
  274. package/app/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  275. package/app/.next/server/app/api/usage/stats/route.js +1 -1
  276. package/app/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
  277. package/app/.next/server/app/api/usage/stream/route.js +4 -4
  278. package/app/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
  279. package/app/.next/server/app/api/users/[id]/route.js +1 -0
  280. package/app/.next/server/app/api/users/[id]/route.js.nft.json +1 -0
  281. package/app/.next/server/app/api/users/[id]/route_client-reference-manifest.js +1 -0
  282. package/app/.next/server/app/api/users/route.js +1 -0
  283. package/app/.next/server/app/api/users/route.js.nft.json +1 -0
  284. package/app/.next/server/app/api/users/route_client-reference-manifest.js +1 -0
  285. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  286. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  287. package/app/.next/server/app/api/v1/audio/speech/route.js +1 -1
  288. package/app/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  289. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  290. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  291. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  292. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  293. package/app/.next/server/app/api/v1/images/generations/route.js +4 -1
  294. package/app/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  295. package/app/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  296. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  297. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  298. package/app/.next/server/app/api/v1/models/route.js +1 -1
  299. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  300. package/app/.next/server/app/api/v1/responses/compact/route.js +1 -1
  301. package/app/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  302. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  303. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  304. package/app/.next/server/app/api/v1/route.js +1 -1
  305. package/app/.next/server/app/api/v1/search/route.js +1 -0
  306. package/app/.next/server/app/api/v1/search/route.js.nft.json +1 -0
  307. package/app/.next/server/app/api/v1/search/route_client-reference-manifest.js +1 -0
  308. package/app/.next/server/app/api/v1/web/fetch/route.js +1 -0
  309. package/app/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -0
  310. package/app/.next/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -0
  311. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  312. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  313. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  314. package/app/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  315. package/app/.next/server/app/api/version/route.js +1 -1
  316. package/app/.next/server/app/api/version/update/route.js +1 -1
  317. package/app/.next/server/app/api/version/update/route.js.nft.json +1 -1
  318. package/app/.next/server/app/callback/page.js +2 -2
  319. package/app/.next/server/app/callback/page.js.nft.json +1 -1
  320. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  321. package/app/.next/server/app/callback.html +1 -1
  322. package/app/.next/server/app/callback.rsc +4 -4
  323. package/app/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  324. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  325. package/app/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  326. package/app/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  327. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  328. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  329. package/app/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  330. package/app/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  331. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  332. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  333. package/app/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  334. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  335. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  336. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  337. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  338. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  339. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  340. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  341. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  342. package/app/.next/server/app/favicon.ico/route.js +1 -1
  343. package/app/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  344. package/app/.next/server/app/index.html +1 -1
  345. package/app/.next/server/app/index.rsc +4 -4
  346. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  347. package/app/.next/server/app/index.segments/_full.segment.rsc +4 -4
  348. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  349. package/app/.next/server/app/index.segments/_index.segment.rsc +4 -4
  350. package/app/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  351. package/app/.next/server/app/landing/page.js +2 -2
  352. package/app/.next/server/app/landing/page.js.nft.json +1 -1
  353. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  354. package/app/.next/server/app/landing.html +1 -1
  355. package/app/.next/server/app/landing.rsc +4 -4
  356. package/app/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  357. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  358. package/app/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  359. package/app/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  360. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  361. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  362. package/app/.next/server/app/login/page.js +2 -2
  363. package/app/.next/server/app/login/page.js.nft.json +1 -1
  364. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  365. package/app/.next/server/app/login.html +1 -1
  366. package/app/.next/server/app/login.rsc +5 -5
  367. package/app/.next/server/app/login.segments/_full.segment.rsc +5 -5
  368. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  369. package/app/.next/server/app/login.segments/_index.segment.rsc +4 -4
  370. package/app/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  371. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  372. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  373. package/app/.next/server/app/manifest.webmanifest/route.js +2 -2
  374. package/app/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  375. package/app/.next/server/app/page.js +2 -2
  376. package/app/.next/server/app/page.js.nft.json +1 -1
  377. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  378. package/app/.next/server/app-paths-manifest.json +14 -1
  379. package/app/.next/server/chunks/1256.js +1 -0
  380. package/app/.next/server/chunks/{1202.js → 1263.js} +2 -2
  381. package/app/.next/server/chunks/2417.js +1 -1
  382. package/app/.next/server/chunks/2506.js +2 -2
  383. package/app/.next/server/chunks/2549.js +1 -0
  384. package/app/.next/server/chunks/3245.js +1 -0
  385. package/app/.next/server/chunks/3855.js +1 -1
  386. package/app/.next/server/chunks/4013.js +1 -0
  387. package/app/.next/server/chunks/412.js +3 -3
  388. package/app/.next/server/chunks/4122.js +1 -1
  389. package/app/.next/server/chunks/4664.js +1 -0
  390. package/app/.next/server/chunks/4989.js +2 -2
  391. package/app/.next/server/chunks/5573.js +1 -1
  392. package/app/.next/server/chunks/5599.js +13 -13
  393. package/app/.next/server/chunks/5681.js +1 -0
  394. package/app/.next/server/chunks/6184.js +1 -0
  395. package/app/.next/server/chunks/6555.js +1 -0
  396. package/app/.next/server/chunks/7595.js +1 -1
  397. package/app/.next/server/chunks/7774.js +3 -3
  398. package/app/.next/server/chunks/7828.js +1 -0
  399. package/app/.next/server/chunks/7937.js +203 -0
  400. package/app/.next/server/chunks/8590.js +1 -1
  401. package/app/.next/server/chunks/8760.js +1 -0
  402. package/app/.next/server/chunks/8895.js +2 -2
  403. package/app/.next/server/chunks/9489.js +1 -0
  404. package/app/.next/server/chunks/9501.js +37 -5
  405. package/app/.next/server/chunks/{1220.js → 9641.js} +2 -2
  406. package/app/.next/server/chunks/9718.js +1 -1
  407. package/app/.next/server/middleware-build-manifest.js +1 -1
  408. package/app/.next/server/middleware-react-loadable-manifest.js +1 -1
  409. package/app/.next/server/middleware.js +1 -1
  410. package/app/.next/server/pages/404.html +1 -1
  411. package/app/.next/server/pages/500.html +1 -1
  412. package/app/.next/server/server-reference-manifest.js +1 -1
  413. package/app/.next/server/server-reference-manifest.json +1 -1
  414. package/app/.next/static/chunks/1321-e040e8704e8038e6.js +1 -0
  415. package/app/.next/static/chunks/5497-4da88480a15dec4c.js +7 -0
  416. package/app/.next/static/chunks/5555-91932fc7b159e521.js +3 -0
  417. package/app/.next/static/chunks/698-64c9bb7a1ba1f521.js +23 -0
  418. package/app/.next/static/chunks/app/(dashboard)/dashboard/admin/keys/page-e7d9455fb9021069.js +1 -0
  419. package/app/.next/static/chunks/app/(dashboard)/dashboard/admin/users/page-c8e5a4b31bc18425.js +1 -0
  420. package/app/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-ece69a38800356c3.js → page-a4b2b832a4892e6d.js} +1 -1
  421. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-4a745b1296f08667.js +1 -0
  422. package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-bc388a93f092e16d.js → page-842b00e6db9de7ae.js} +1 -1
  423. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-fbdc1506f7259342.js +1 -0
  424. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-0494f10cf7d2cae0.js +53 -0
  425. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-521aecf4ccb7b03e.js +1 -0
  426. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/combo/[id]/page-d594f315360645f3.js +4 -0
  427. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/web/page-ec14043bae22768d.js +1 -0
  428. package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-f8681cfb4c894f96.js +1 -0
  429. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-f0bbe6b3b1bfb85e.js +1 -0
  430. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-7985e45ad78144eb.js +1 -0
  431. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-d6d08994d9d6d690.js +1 -0
  432. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-b2443c6d810b0207.js +2 -0
  433. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-fae4c95586692227.js +1 -0
  434. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-24023a32c248257e.js +1 -0
  435. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-48fc1f090d936818.js +1 -0
  436. package/app/.next/static/chunks/app/(dashboard)/dashboard/user/page-e9ab0043e9b15204.js +4 -0
  437. package/app/.next/static/chunks/app/(dashboard)/layout-d368218e0e87c124.js +1 -0
  438. package/app/.next/static/chunks/app/_global-error/page-24023a32c248257e.js +1 -0
  439. package/app/.next/static/chunks/app/api/auth/login/route-24023a32c248257e.js +1 -0
  440. package/app/.next/static/chunks/app/api/auth/logout/route-24023a32c248257e.js +1 -0
  441. package/app/.next/static/chunks/app/api/auth/me/route-24023a32c248257e.js +1 -0
  442. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-24023a32c248257e.js +1 -0
  443. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-24023a32c248257e.js +1 -0
  444. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-24023a32c248257e.js +1 -0
  445. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-24023a32c248257e.js +1 -0
  446. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-24023a32c248257e.js +1 -0
  447. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-24023a32c248257e.js +1 -0
  448. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-24023a32c248257e.js +1 -0
  449. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-24023a32c248257e.js +1 -0
  450. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-24023a32c248257e.js +1 -0
  451. package/app/.next/static/chunks/app/api/cloud/auth/route-24023a32c248257e.js +1 -0
  452. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-24023a32c248257e.js +1 -0
  453. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-24023a32c248257e.js +1 -0
  454. package/app/.next/static/chunks/app/api/cloud/models/alias/route-24023a32c248257e.js +1 -0
  455. package/app/.next/static/chunks/app/api/combos/[id]/route-24023a32c248257e.js +1 -0
  456. package/app/.next/static/chunks/app/api/combos/route-24023a32c248257e.js +1 -0
  457. package/app/.next/static/chunks/app/api/health/route-24023a32c248257e.js +1 -0
  458. package/app/.next/static/chunks/app/api/init/route-24023a32c248257e.js +1 -0
  459. package/app/.next/static/chunks/app/api/keys/[id]/route-24023a32c248257e.js +1 -0
  460. package/app/.next/static/chunks/app/api/keys/route-24023a32c248257e.js +1 -0
  461. package/app/.next/static/chunks/app/api/locale/route-24023a32c248257e.js +1 -0
  462. package/app/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-24023a32c248257e.js +1 -0
  463. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-24023a32c248257e.js +1 -0
  464. package/app/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-24023a32c248257e.js +1 -0
  465. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-24023a32c248257e.js +1 -0
  466. package/app/.next/static/chunks/app/api/models/alias/route-24023a32c248257e.js +1 -0
  467. package/app/.next/static/chunks/app/api/models/availability/route-24023a32c248257e.js +1 -0
  468. package/app/.next/static/chunks/app/api/models/custom/route-24023a32c248257e.js +1 -0
  469. package/app/.next/static/chunks/app/api/models/route-24023a32c248257e.js +1 -0
  470. package/app/.next/static/chunks/app/api/models/test/route-24023a32c248257e.js +1 -0
  471. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-24023a32c248257e.js +1 -0
  472. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-24023a32c248257e.js +1 -0
  473. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-24023a32c248257e.js +1 -0
  474. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-24023a32c248257e.js +1 -0
  475. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-24023a32c248257e.js +1 -0
  476. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-24023a32c248257e.js +1 -0
  477. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-24023a32c248257e.js +1 -0
  478. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-24023a32c248257e.js +1 -0
  479. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-24023a32c248257e.js +1 -0
  480. package/app/.next/static/chunks/app/api/pricing/route-24023a32c248257e.js +1 -0
  481. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-24023a32c248257e.js +1 -0
  482. package/app/.next/static/chunks/app/api/provider-nodes/route-24023a32c248257e.js +1 -0
  483. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-24023a32c248257e.js +1 -0
  484. package/app/.next/static/chunks/app/api/providers/[id]/models/route-24023a32c248257e.js +1 -0
  485. package/app/.next/static/chunks/app/api/providers/[id]/route-24023a32c248257e.js +1 -0
  486. package/app/.next/static/chunks/app/api/providers/[id]/test/route-24023a32c248257e.js +1 -0
  487. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-24023a32c248257e.js +1 -0
  488. package/app/.next/static/chunks/app/api/providers/client/route-24023a32c248257e.js +1 -0
  489. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-24023a32c248257e.js +1 -0
  490. package/app/.next/static/chunks/app/api/providers/route-24023a32c248257e.js +1 -0
  491. package/app/.next/static/chunks/app/api/providers/suggested-models/route-24023a32c248257e.js +1 -0
  492. package/app/.next/static/chunks/app/api/providers/test-batch/route-24023a32c248257e.js +1 -0
  493. package/app/.next/static/chunks/app/api/providers/validate/route-24023a32c248257e.js +1 -0
  494. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-24023a32c248257e.js +1 -0
  495. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-24023a32c248257e.js +1 -0
  496. package/app/.next/static/chunks/app/api/proxy-pools/route-24023a32c248257e.js +1 -0
  497. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-24023a32c248257e.js +1 -0
  498. package/app/.next/static/chunks/app/api/settings/database/route-24023a32c248257e.js +1 -0
  499. package/app/.next/static/chunks/app/api/settings/proxy-test/route-24023a32c248257e.js +1 -0
  500. package/app/.next/static/chunks/app/api/settings/require-login/route-24023a32c248257e.js +1 -0
  501. package/app/.next/static/chunks/app/api/settings/route-24023a32c248257e.js +1 -0
  502. package/app/.next/static/chunks/app/api/shutdown/route-24023a32c248257e.js +1 -0
  503. package/app/.next/static/chunks/app/api/tags/route-24023a32c248257e.js +1 -0
  504. package/app/.next/static/chunks/app/api/translator/console-logs/route-24023a32c248257e.js +1 -0
  505. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-24023a32c248257e.js +1 -0
  506. package/app/.next/static/chunks/app/api/translator/load/route-24023a32c248257e.js +1 -0
  507. package/app/.next/static/chunks/app/api/translator/save/route-24023a32c248257e.js +1 -0
  508. package/app/.next/static/chunks/app/api/translator/send/route-24023a32c248257e.js +1 -0
  509. package/app/.next/static/chunks/app/api/translator/translate/route-24023a32c248257e.js +1 -0
  510. package/app/.next/static/chunks/app/api/tunnel/disable/route-24023a32c248257e.js +1 -0
  511. package/app/.next/static/chunks/app/api/tunnel/enable/route-24023a32c248257e.js +1 -0
  512. package/app/.next/static/chunks/app/api/tunnel/status/route-24023a32c248257e.js +1 -0
  513. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-24023a32c248257e.js +1 -0
  514. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-24023a32c248257e.js +1 -0
  515. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-24023a32c248257e.js +1 -0
  516. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-24023a32c248257e.js +1 -0
  517. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-24023a32c248257e.js +1 -0
  518. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-24023a32c248257e.js +1 -0
  519. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-24023a32c248257e.js +1 -0
  520. package/app/.next/static/chunks/app/api/usage/api-keys/route-24023a32c248257e.js +1 -0
  521. package/app/.next/static/chunks/app/api/usage/chart/route-24023a32c248257e.js +1 -0
  522. package/app/.next/static/chunks/app/api/usage/history/route-24023a32c248257e.js +1 -0
  523. package/app/.next/static/chunks/app/api/usage/logs/route-24023a32c248257e.js +1 -0
  524. package/app/.next/static/chunks/app/api/usage/providers/route-24023a32c248257e.js +1 -0
  525. package/app/.next/static/chunks/app/api/usage/request-details/route-24023a32c248257e.js +1 -0
  526. package/app/.next/static/chunks/app/api/usage/request-logs/route-24023a32c248257e.js +1 -0
  527. package/app/.next/static/chunks/app/api/usage/stats/route-24023a32c248257e.js +1 -0
  528. package/app/.next/static/chunks/app/api/usage/stream/route-24023a32c248257e.js +1 -0
  529. package/app/.next/static/chunks/app/api/users/[id]/route-24023a32c248257e.js +1 -0
  530. package/app/.next/static/chunks/app/api/users/route-24023a32c248257e.js +1 -0
  531. package/app/.next/static/chunks/app/api/v1/api/chat/route-24023a32c248257e.js +1 -0
  532. package/app/.next/static/chunks/app/api/v1/audio/speech/route-24023a32c248257e.js +1 -0
  533. package/app/.next/static/chunks/app/api/v1/chat/completions/route-24023a32c248257e.js +1 -0
  534. package/app/.next/static/chunks/app/api/v1/embeddings/route-24023a32c248257e.js +1 -0
  535. package/app/.next/static/chunks/app/api/v1/images/generations/route-24023a32c248257e.js +1 -0
  536. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-24023a32c248257e.js +1 -0
  537. package/app/.next/static/chunks/app/api/v1/messages/route-24023a32c248257e.js +1 -0
  538. package/app/.next/static/chunks/app/api/v1/models/route-24023a32c248257e.js +1 -0
  539. package/app/.next/static/chunks/app/api/v1/responses/compact/route-24023a32c248257e.js +1 -0
  540. package/app/.next/static/chunks/app/api/v1/responses/route-24023a32c248257e.js +1 -0
  541. package/app/.next/static/chunks/app/api/v1/route-24023a32c248257e.js +1 -0
  542. package/app/.next/static/chunks/app/api/v1/search/route-24023a32c248257e.js +1 -0
  543. package/app/.next/static/chunks/app/api/v1/web/fetch/route-24023a32c248257e.js +1 -0
  544. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-24023a32c248257e.js +1 -0
  545. package/app/.next/static/chunks/app/api/v1beta/models/route-24023a32c248257e.js +1 -0
  546. package/app/.next/static/chunks/app/api/version/route-24023a32c248257e.js +1 -0
  547. package/app/.next/static/chunks/app/api/version/update/route-24023a32c248257e.js +1 -0
  548. package/app/.next/static/chunks/app/login/page-f8fd97681568bf8f.js +1 -0
  549. package/app/.next/static/chunks/app/manifest.webmanifest/route-24023a32c248257e.js +1 -0
  550. package/app/.next/static/chunks/app/page-24023a32c248257e.js +1 -0
  551. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-24023a32c248257e.js +1 -0
  552. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-24023a32c248257e.js +1 -0
  553. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-24023a32c248257e.js +1 -0
  554. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-24023a32c248257e.js +1 -0
  555. package/app/.next/static/chunks/webpack-d1740476c6ab968a.js +1 -0
  556. package/app/.next/static/css/733bbed45c0f373c.css +1 -0
  557. package/app/.next/static/kSw7ik2y0Lphlofn8QbuF/_buildManifest.js +1 -0
  558. package/app/package.json +1 -1
  559. package/app/public/i18n/literals/ar.json +4 -4
  560. package/app/public/i18n/literals/bn.json +4 -4
  561. package/app/public/i18n/literals/cs.json +4 -4
  562. package/app/public/i18n/literals/da.json +4 -4
  563. package/app/public/i18n/literals/de.json +4 -4
  564. package/app/public/i18n/literals/el.json +4 -4
  565. package/app/public/i18n/literals/es.json +4 -4
  566. package/app/public/i18n/literals/fi.json +4 -4
  567. package/app/public/i18n/literals/fr.json +4 -4
  568. package/app/public/i18n/literals/he.json +4 -4
  569. package/app/public/i18n/literals/hi.json +4 -4
  570. package/app/public/i18n/literals/hu.json +4 -4
  571. package/app/public/i18n/literals/id.json +4 -4
  572. package/app/public/i18n/literals/it.json +4 -4
  573. package/app/public/i18n/literals/ja.json +4 -4
  574. package/app/public/i18n/literals/ko.json +4 -4
  575. package/app/public/i18n/literals/nl.json +4 -4
  576. package/app/public/i18n/literals/no.json +4 -4
  577. package/app/public/i18n/literals/pl.json +4 -4
  578. package/app/public/i18n/literals/pt-BR.json +4 -4
  579. package/app/public/i18n/literals/pt-PT.json +4 -4
  580. package/app/public/i18n/literals/ro.json +4 -4
  581. package/app/public/i18n/literals/ru.json +4 -4
  582. package/app/public/i18n/literals/sv.json +4 -4
  583. package/app/public/i18n/literals/th.json +4 -4
  584. package/app/public/i18n/literals/tl.json +4 -4
  585. package/app/public/i18n/literals/tr.json +4 -4
  586. package/app/public/i18n/literals/uk.json +4 -4
  587. package/app/public/i18n/literals/ur.json +4 -4
  588. package/app/public/i18n/literals/vi.json +4 -4
  589. package/app/public/i18n/literals/zh-CN.json +7 -7
  590. package/app/public/i18n/literals/zh-TW.json +4 -4
  591. package/app/public/providers/azure.png +0 -0
  592. package/app/public/providers/blackbox.png +0 -0
  593. package/app/public/providers/brave-search.png +0 -0
  594. package/app/public/providers/byteplus.png +0 -0
  595. package/app/public/providers/coqui.png +0 -0
  596. package/app/public/providers/exa.png +0 -0
  597. package/app/public/providers/firecrawl.png +0 -0
  598. package/app/public/providers/google-pse.png +0 -0
  599. package/app/public/providers/grok-web.png +0 -0
  600. package/app/public/providers/inworld.png +0 -0
  601. package/app/public/providers/jina-reader.png +0 -0
  602. package/app/public/providers/linkup.png +0 -0
  603. package/app/public/providers/perplexity-web.png +0 -0
  604. package/app/public/providers/searchapi.png +0 -0
  605. package/app/public/providers/searxng.png +0 -0
  606. package/app/public/providers/serper.png +0 -0
  607. package/app/public/providers/tavily.png +0 -0
  608. package/app/public/providers/tortoise.png +0 -0
  609. package/app/public/providers/voyage-ai.png +0 -0
  610. package/app/public/providers/youcom.png +0 -0
  611. package/app/server.js +1 -1
  612. package/app/src/lib/updater/updater.js +25 -2
  613. package/app/src/mitm/cert/install.js +31 -24
  614. package/app/src/mitm/config.js +15 -1
  615. package/app/src/mitm/dns/dnsConfig.js +48 -62
  616. package/app/src/mitm/handlers/antigravity.js +18 -6
  617. package/app/src/mitm/handlers/base.js +12 -10
  618. package/app/src/mitm/logger.js +102 -1
  619. package/app/src/mitm/manager.js +22 -5
  620. package/app/src/mitm/server.js +39 -29
  621. package/app/src/mitm/winElevated.js +79 -0
  622. package/app/src/shared/constants/mitmToolHosts.js +12 -0
  623. package/package.json +1 -1
  624. package/app/.next/server/app/dashboard/basic-chat.html +0 -1
  625. package/app/.next/server/app/dashboard/basic-chat.meta +0 -17
  626. package/app/.next/server/app/dashboard/basic-chat.rsc +0 -24
  627. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +0 -6
  628. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +0 -5
  629. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  630. package/app/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  631. package/app/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +0 -24
  632. package/app/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +0 -6
  633. package/app/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +0 -9
  634. package/app/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +0 -6
  635. package/app/.next/server/app/dashboard/cli-tools.html +0 -1
  636. package/app/.next/server/app/dashboard/cli-tools.meta +0 -17
  637. package/app/.next/server/app/dashboard/cli-tools.rsc +0 -25
  638. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +0 -6
  639. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +0 -5
  640. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  641. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  642. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +0 -25
  643. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +0 -6
  644. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +0 -9
  645. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +0 -6
  646. package/app/.next/server/app/dashboard/combos.html +0 -1
  647. package/app/.next/server/app/dashboard/combos.meta +0 -17
  648. package/app/.next/server/app/dashboard/combos.rsc +0 -27
  649. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +0 -9
  650. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +0 -5
  651. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  652. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  653. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +0 -27
  654. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +0 -6
  655. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +0 -9
  656. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +0 -6
  657. package/app/.next/server/app/dashboard/endpoint.html +0 -1
  658. package/app/.next/server/app/dashboard/endpoint.meta +0 -17
  659. package/app/.next/server/app/dashboard/endpoint.rsc +0 -25
  660. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +0 -6
  661. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +0 -5
  662. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  663. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  664. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +0 -25
  665. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +0 -6
  666. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +0 -9
  667. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +0 -6
  668. package/app/.next/server/app/dashboard/mitm.html +0 -1
  669. package/app/.next/server/app/dashboard/mitm.meta +0 -17
  670. package/app/.next/server/app/dashboard/mitm.rsc +0 -24
  671. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +0 -6
  672. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +0 -5
  673. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  674. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  675. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +0 -24
  676. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +0 -6
  677. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +0 -9
  678. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +0 -6
  679. package/app/.next/server/app/dashboard/profile.html +0 -1
  680. package/app/.next/server/app/dashboard/profile.meta +0 -17
  681. package/app/.next/server/app/dashboard/profile.rsc +0 -27
  682. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +0 -9
  683. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +0 -5
  684. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  685. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  686. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +0 -27
  687. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +0 -6
  688. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +0 -9
  689. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +0 -6
  690. package/app/.next/server/app/dashboard/providers/new.html +0 -1
  691. package/app/.next/server/app/dashboard/providers/new.meta +0 -18
  692. package/app/.next/server/app/dashboard/providers/new.rsc +0 -27
  693. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +0 -9
  694. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +0 -5
  695. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +0 -5
  696. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  697. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  698. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +0 -27
  699. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +0 -6
  700. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +0 -9
  701. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +0 -6
  702. package/app/.next/server/app/dashboard/providers.html +0 -1
  703. package/app/.next/server/app/dashboard/providers.meta +0 -17
  704. package/app/.next/server/app/dashboard/providers.rsc +0 -27
  705. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +0 -9
  706. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +0 -5
  707. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  708. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  709. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +0 -27
  710. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +0 -6
  711. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +0 -9
  712. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +0 -6
  713. package/app/.next/server/app/dashboard/proxy-pools.html +0 -1
  714. package/app/.next/server/app/dashboard/proxy-pools.meta +0 -17
  715. package/app/.next/server/app/dashboard/proxy-pools.rsc +0 -27
  716. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +0 -9
  717. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +0 -5
  718. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  719. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  720. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +0 -27
  721. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +0 -6
  722. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +0 -9
  723. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +0 -6
  724. package/app/.next/server/app/dashboard/quota.html +0 -2
  725. package/app/.next/server/app/dashboard/quota.meta +0 -17
  726. package/app/.next/server/app/dashboard/quota.rsc +0 -25
  727. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +0 -7
  728. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +0 -5
  729. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  730. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  731. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +0 -25
  732. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +0 -6
  733. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +0 -9
  734. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +0 -6
  735. package/app/.next/server/app/dashboard/translator.html +0 -1
  736. package/app/.next/server/app/dashboard/translator.meta +0 -17
  737. package/app/.next/server/app/dashboard/translator.rsc +0 -27
  738. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +0 -9
  739. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +0 -5
  740. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  741. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  742. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +0 -27
  743. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +0 -6
  744. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +0 -9
  745. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +0 -6
  746. package/app/.next/server/app/dashboard/usage.html +0 -1
  747. package/app/.next/server/app/dashboard/usage.meta +0 -17
  748. package/app/.next/server/app/dashboard/usage.rsc +0 -27
  749. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +0 -9
  750. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +0 -5
  751. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  752. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  753. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +0 -27
  754. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +0 -6
  755. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +0 -9
  756. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +0 -6
  757. package/app/.next/server/app/dashboard.html +0 -1
  758. package/app/.next/server/app/dashboard.meta +0 -16
  759. package/app/.next/server/app/dashboard.rsc +0 -25
  760. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +0 -6
  761. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +0 -5
  762. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +0 -6
  763. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +0 -25
  764. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +0 -6
  765. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +0 -9
  766. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +0 -6
  767. package/app/.next/server/chunks/1357.js +0 -1
  768. package/app/.next/server/chunks/2409.js +0 -1
  769. package/app/.next/server/chunks/289.js +0 -1
  770. package/app/.next/server/chunks/318.js +0 -203
  771. package/app/.next/server/chunks/4404.js +0 -1
  772. package/app/.next/server/chunks/541.js +0 -1
  773. package/app/.next/server/chunks/6114.js +0 -1
  774. package/app/.next/server/chunks/6143.js +0 -1
  775. package/app/.next/server/chunks/6327.js +0 -1
  776. package/app/.next/server/chunks/6386.js +0 -1
  777. package/app/.next/server/chunks/7924.js +0 -1
  778. package/app/.next/static/GWqgJg45jqUgh4iLz365f/_buildManifest.js +0 -1
  779. package/app/.next/static/chunks/1321-c5a3513d1c657677.js +0 -1
  780. package/app/.next/static/chunks/5497-2b813df1aa4bc9ba.js +0 -7
  781. package/app/.next/static/chunks/5555-26f687e754d40f93.js +0 -3
  782. package/app/.next/static/chunks/698-646ba5259113c1a0.js +0 -23
  783. package/app/.next/static/chunks/8202.1ffc6ce531e066ce.js +0 -1
  784. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-2f4bb06a89cb1e96.js +0 -1
  785. package/app/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-d690c6133fec8d11.js +0 -1
  786. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-89b8138c3ac2e04f.js +0 -51
  787. package/app/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-154824cbf44c34b2.js +0 -1
  788. package/app/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-ed08f60a5fb7f3eb.js +0 -1
  789. package/app/.next/static/chunks/app/(dashboard)/dashboard/profile/page-478d456890cb93f8.js +0 -1
  790. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-6d84cac6ca90a61c.js +0 -1
  791. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9fb9fc4557dbea57.js +0 -1
  792. package/app/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-4d43dabc1455a54b.js +0 -2
  793. package/app/.next/static/chunks/app/(dashboard)/dashboard/quota/page-18e13f60a38c4be4.js +0 -1
  794. package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-4fc78ec3c912ea4c.js +0 -1
  795. package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-6204a1c1bfe6aee1.js +0 -1
  796. package/app/.next/static/chunks/app/(dashboard)/layout-9b93641ed57cec1d.js +0 -1
  797. package/app/.next/static/chunks/app/_global-error/page-de0b0e689b74bc54.js +0 -1
  798. package/app/.next/static/chunks/app/api/auth/login/route-de0b0e689b74bc54.js +0 -1
  799. package/app/.next/static/chunks/app/api/auth/logout/route-de0b0e689b74bc54.js +0 -1
  800. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-de0b0e689b74bc54.js +0 -1
  801. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-de0b0e689b74bc54.js +0 -1
  802. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-de0b0e689b74bc54.js +0 -1
  803. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-de0b0e689b74bc54.js +0 -1
  804. package/app/.next/static/chunks/app/api/cli-tools/copilot-settings/route-de0b0e689b74bc54.js +0 -1
  805. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-de0b0e689b74bc54.js +0 -1
  806. package/app/.next/static/chunks/app/api/cli-tools/hermes-settings/route-de0b0e689b74bc54.js +0 -1
  807. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-de0b0e689b74bc54.js +0 -1
  808. package/app/.next/static/chunks/app/api/cli-tools/opencode-settings/route-de0b0e689b74bc54.js +0 -1
  809. package/app/.next/static/chunks/app/api/cloud/auth/route-de0b0e689b74bc54.js +0 -1
  810. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-de0b0e689b74bc54.js +0 -1
  811. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-de0b0e689b74bc54.js +0 -1
  812. package/app/.next/static/chunks/app/api/cloud/models/alias/route-de0b0e689b74bc54.js +0 -1
  813. package/app/.next/static/chunks/app/api/combos/[id]/route-de0b0e689b74bc54.js +0 -1
  814. package/app/.next/static/chunks/app/api/combos/route-de0b0e689b74bc54.js +0 -1
  815. package/app/.next/static/chunks/app/api/health/route-de0b0e689b74bc54.js +0 -1
  816. package/app/.next/static/chunks/app/api/init/route-de0b0e689b74bc54.js +0 -1
  817. package/app/.next/static/chunks/app/api/keys/[id]/route-de0b0e689b74bc54.js +0 -1
  818. package/app/.next/static/chunks/app/api/keys/route-de0b0e689b74bc54.js +0 -1
  819. package/app/.next/static/chunks/app/api/locale/route-de0b0e689b74bc54.js +0 -1
  820. package/app/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-de0b0e689b74bc54.js +0 -1
  821. package/app/.next/static/chunks/app/api/media-providers/tts/voices/route-de0b0e689b74bc54.js +0 -1
  822. package/app/.next/static/chunks/app/api/models/alias/route-de0b0e689b74bc54.js +0 -1
  823. package/app/.next/static/chunks/app/api/models/availability/route-de0b0e689b74bc54.js +0 -1
  824. package/app/.next/static/chunks/app/api/models/custom/route-de0b0e689b74bc54.js +0 -1
  825. package/app/.next/static/chunks/app/api/models/route-de0b0e689b74bc54.js +0 -1
  826. package/app/.next/static/chunks/app/api/models/test/route-de0b0e689b74bc54.js +0 -1
  827. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-de0b0e689b74bc54.js +0 -1
  828. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-de0b0e689b74bc54.js +0 -1
  829. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-de0b0e689b74bc54.js +0 -1
  830. package/app/.next/static/chunks/app/api/oauth/gitlab/pat/route-de0b0e689b74bc54.js +0 -1
  831. package/app/.next/static/chunks/app/api/oauth/iflow/cookie/route-de0b0e689b74bc54.js +0 -1
  832. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-de0b0e689b74bc54.js +0 -1
  833. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-de0b0e689b74bc54.js +0 -1
  834. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-de0b0e689b74bc54.js +0 -1
  835. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-de0b0e689b74bc54.js +0 -1
  836. package/app/.next/static/chunks/app/api/pricing/route-de0b0e689b74bc54.js +0 -1
  837. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-de0b0e689b74bc54.js +0 -1
  838. package/app/.next/static/chunks/app/api/provider-nodes/route-de0b0e689b74bc54.js +0 -1
  839. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-de0b0e689b74bc54.js +0 -1
  840. package/app/.next/static/chunks/app/api/providers/[id]/models/route-de0b0e689b74bc54.js +0 -1
  841. package/app/.next/static/chunks/app/api/providers/[id]/route-de0b0e689b74bc54.js +0 -1
  842. package/app/.next/static/chunks/app/api/providers/[id]/test/route-de0b0e689b74bc54.js +0 -1
  843. package/app/.next/static/chunks/app/api/providers/[id]/test-models/route-de0b0e689b74bc54.js +0 -1
  844. package/app/.next/static/chunks/app/api/providers/client/route-de0b0e689b74bc54.js +0 -1
  845. package/app/.next/static/chunks/app/api/providers/kilo/free-models/route-de0b0e689b74bc54.js +0 -1
  846. package/app/.next/static/chunks/app/api/providers/route-de0b0e689b74bc54.js +0 -1
  847. package/app/.next/static/chunks/app/api/providers/suggested-models/route-de0b0e689b74bc54.js +0 -1
  848. package/app/.next/static/chunks/app/api/providers/test-batch/route-de0b0e689b74bc54.js +0 -1
  849. package/app/.next/static/chunks/app/api/providers/validate/route-de0b0e689b74bc54.js +0 -1
  850. package/app/.next/static/chunks/app/api/proxy-pools/[id]/route-de0b0e689b74bc54.js +0 -1
  851. package/app/.next/static/chunks/app/api/proxy-pools/[id]/test/route-de0b0e689b74bc54.js +0 -1
  852. package/app/.next/static/chunks/app/api/proxy-pools/route-de0b0e689b74bc54.js +0 -1
  853. package/app/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-de0b0e689b74bc54.js +0 -1
  854. package/app/.next/static/chunks/app/api/settings/database/route-de0b0e689b74bc54.js +0 -1
  855. package/app/.next/static/chunks/app/api/settings/proxy-test/route-de0b0e689b74bc54.js +0 -1
  856. package/app/.next/static/chunks/app/api/settings/require-login/route-de0b0e689b74bc54.js +0 -1
  857. package/app/.next/static/chunks/app/api/settings/route-de0b0e689b74bc54.js +0 -1
  858. package/app/.next/static/chunks/app/api/shutdown/route-de0b0e689b74bc54.js +0 -1
  859. package/app/.next/static/chunks/app/api/tags/route-de0b0e689b74bc54.js +0 -1
  860. package/app/.next/static/chunks/app/api/translator/console-logs/route-de0b0e689b74bc54.js +0 -1
  861. package/app/.next/static/chunks/app/api/translator/console-logs/stream/route-de0b0e689b74bc54.js +0 -1
  862. package/app/.next/static/chunks/app/api/translator/load/route-de0b0e689b74bc54.js +0 -1
  863. package/app/.next/static/chunks/app/api/translator/save/route-de0b0e689b74bc54.js +0 -1
  864. package/app/.next/static/chunks/app/api/translator/send/route-de0b0e689b74bc54.js +0 -1
  865. package/app/.next/static/chunks/app/api/translator/translate/route-de0b0e689b74bc54.js +0 -1
  866. package/app/.next/static/chunks/app/api/tunnel/disable/route-de0b0e689b74bc54.js +0 -1
  867. package/app/.next/static/chunks/app/api/tunnel/enable/route-de0b0e689b74bc54.js +0 -1
  868. package/app/.next/static/chunks/app/api/tunnel/status/route-de0b0e689b74bc54.js +0 -1
  869. package/app/.next/static/chunks/app/api/tunnel/tailscale-check/route-de0b0e689b74bc54.js +0 -1
  870. package/app/.next/static/chunks/app/api/tunnel/tailscale-disable/route-de0b0e689b74bc54.js +0 -1
  871. package/app/.next/static/chunks/app/api/tunnel/tailscale-enable/route-de0b0e689b74bc54.js +0 -1
  872. package/app/.next/static/chunks/app/api/tunnel/tailscale-install/route-de0b0e689b74bc54.js +0 -1
  873. package/app/.next/static/chunks/app/api/tunnel/tailscale-login/route-de0b0e689b74bc54.js +0 -1
  874. package/app/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-de0b0e689b74bc54.js +0 -1
  875. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-de0b0e689b74bc54.js +0 -1
  876. package/app/.next/static/chunks/app/api/usage/chart/route-de0b0e689b74bc54.js +0 -1
  877. package/app/.next/static/chunks/app/api/usage/history/route-de0b0e689b74bc54.js +0 -1
  878. package/app/.next/static/chunks/app/api/usage/logs/route-de0b0e689b74bc54.js +0 -1
  879. package/app/.next/static/chunks/app/api/usage/providers/route-de0b0e689b74bc54.js +0 -1
  880. package/app/.next/static/chunks/app/api/usage/request-details/route-de0b0e689b74bc54.js +0 -1
  881. package/app/.next/static/chunks/app/api/usage/request-logs/route-de0b0e689b74bc54.js +0 -1
  882. package/app/.next/static/chunks/app/api/usage/stats/route-de0b0e689b74bc54.js +0 -1
  883. package/app/.next/static/chunks/app/api/usage/stream/route-de0b0e689b74bc54.js +0 -1
  884. package/app/.next/static/chunks/app/api/v1/api/chat/route-de0b0e689b74bc54.js +0 -1
  885. package/app/.next/static/chunks/app/api/v1/audio/speech/route-de0b0e689b74bc54.js +0 -1
  886. package/app/.next/static/chunks/app/api/v1/chat/completions/route-de0b0e689b74bc54.js +0 -1
  887. package/app/.next/static/chunks/app/api/v1/embeddings/route-de0b0e689b74bc54.js +0 -1
  888. package/app/.next/static/chunks/app/api/v1/images/generations/route-de0b0e689b74bc54.js +0 -1
  889. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-de0b0e689b74bc54.js +0 -1
  890. package/app/.next/static/chunks/app/api/v1/messages/route-de0b0e689b74bc54.js +0 -1
  891. package/app/.next/static/chunks/app/api/v1/models/route-de0b0e689b74bc54.js +0 -1
  892. package/app/.next/static/chunks/app/api/v1/responses/compact/route-de0b0e689b74bc54.js +0 -1
  893. package/app/.next/static/chunks/app/api/v1/responses/route-de0b0e689b74bc54.js +0 -1
  894. package/app/.next/static/chunks/app/api/v1/route-de0b0e689b74bc54.js +0 -1
  895. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-de0b0e689b74bc54.js +0 -1
  896. package/app/.next/static/chunks/app/api/v1beta/models/route-de0b0e689b74bc54.js +0 -1
  897. package/app/.next/static/chunks/app/api/version/route-de0b0e689b74bc54.js +0 -1
  898. package/app/.next/static/chunks/app/api/version/update/route-de0b0e689b74bc54.js +0 -1
  899. package/app/.next/static/chunks/app/login/page-4cbcd0b23f8d9304.js +0 -1
  900. package/app/.next/static/chunks/app/manifest.webmanifest/route-de0b0e689b74bc54.js +0 -1
  901. package/app/.next/static/chunks/app/page-de0b0e689b74bc54.js +0 -1
  902. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-de0b0e689b74bc54.js +0 -1
  903. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-de0b0e689b74bc54.js +0 -1
  904. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-de0b0e689b74bc54.js +0 -1
  905. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-de0b0e689b74bc54.js +0 -1
  906. package/app/.next/static/chunks/webpack-7fe9f68a976b08ff.js +0 -1
  907. package/app/.next/static/css/d663c02ecd9b71d6.css +0 -1
  908. /package/app/.next/static/{GWqgJg45jqUgh4iLz365f → kSw7ik2y0Lphlofn8QbuF}/_ssgManifest.js +0 -0
@@ -3,15 +3,8 @@ const fs = require("fs");
3
3
  const path = require("path");
4
4
  const os = require("os");
5
5
  const { log, err } = require("../logger");
6
-
7
- // Per-tool DNS hosts mapping
8
- const TOOL_HOSTS = {
9
- antigravity: ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"],
10
- copilot: ["api.individual.githubcopilot.com"],
11
- kiro: ["q.us-east-1.amazonaws.com", "codewhisperer.us-east-1.amazonaws.com"],
12
- cursor: ["api2.cursor.sh"],
13
- openrouter: ["openrouter.ai", "api.openrouter.ai"],
14
- };
6
+ const { TOOL_HOSTS } = require("../../shared/constants/mitmToolHosts");
7
+ const { runElevatedPowerShell, quotePs, isAdmin } = require("../winElevated.js");
15
8
 
16
9
  const IS_WIN = process.platform === "win32";
17
10
  const IS_MAC = process.platform === "darwin";
@@ -19,47 +12,6 @@ const HOSTS_FILE = IS_WIN
19
12
  ? path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts")
20
13
  : "/etc/hosts";
21
14
 
22
- /**
23
- * Execute elevated PowerShell script on Windows via Start-Process -Verb RunAs.
24
- * Only UAC consent dialog appears, no CMD/PS window popup.
25
- */
26
- function executeElevatedPowerShell(psScriptPath, timeoutMs = 30000) {
27
- const flagFile = path.join(os.tmpdir(), `ps_done_${Date.now()}.flag`);
28
- const psSQ = (s) => s.replace(/'/g, "''");
29
-
30
- let psContent = fs.readFileSync(psScriptPath, "utf8");
31
- psContent += `\nSet-Content -Path '${psSQ(flagFile)}' -Value 'done' -Encoding UTF8\n`;
32
- fs.writeFileSync(psScriptPath, psContent, "utf8");
33
-
34
- const outerCmd = `Start-Process powershell -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-WindowStyle','Hidden','-File','${psSQ(psScriptPath)}' -Verb RunAs -WindowStyle Hidden`;
35
-
36
- return new Promise((resolve, reject) => {
37
- let settled = false;
38
- const settle = (fn, arg) => { if (!settled) { settled = true; fn(arg); } };
39
-
40
- exec(
41
- `powershell -NoProfile -NonInteractive -WindowStyle Hidden -Command "${outerCmd}"`,
42
- { windowsHide: true },
43
- () => {}
44
- );
45
-
46
- const deadline = Date.now() + timeoutMs;
47
- const poll = () => {
48
- if (settled) return;
49
- if (fs.existsSync(flagFile)) {
50
- try { fs.unlinkSync(flagFile); fs.unlinkSync(psScriptPath); } catch { /* ignore */ }
51
- return settle(resolve);
52
- }
53
- if (Date.now() > deadline) {
54
- try { fs.unlinkSync(psScriptPath); } catch { /* ignore */ }
55
- return settle(reject, new Error("Timed out waiting for UAC confirmation"));
56
- }
57
- setTimeout(poll, 500);
58
- };
59
- setTimeout(poll, 300);
60
- });
61
- }
62
-
63
15
  /** True when `sudo` exists (e.g. missing on minimal Docker images like Alpine). */
64
16
  function isSudoAvailable() {
65
17
  if (IS_WIN) return false;
@@ -158,17 +110,20 @@ async function addDNSEntry(tool, sudoPassword) {
158
110
 
159
111
  try {
160
112
  if (IS_WIN) {
161
- // Process already has admin rights — edit hosts file directly
162
- const toAppend = entriesToAdd.map(h => `127.0.0.1 ${h}`).join("\r\n") + "\r\n";
163
- fs.appendFileSync(HOSTS_FILE, toAppend, "utf8");
164
- require("child_process").execSync("ipconfig /flushdns", { windowsHide: true });
113
+ const toAppend = entriesToAdd.map(h => `127.0.0.1 ${h}`).join("`r`n");
114
+ // Single elevated script: append to hosts + flush DNS (1 UAC popup, or zero if admin)
115
+ const script = `
116
+ Add-Content -LiteralPath ${quotePs(HOSTS_FILE)} -Value ${quotePs(toAppend)}
117
+ ipconfig /flushdns | Out-Null
118
+ `;
119
+ await runElevatedPowerShell(script);
165
120
  } else {
166
121
  await execWithPassword(`echo "${entries}" >> ${HOSTS_FILE}`, sudoPassword);
167
122
  await flushDNS(sudoPassword);
168
123
  }
169
124
  log(`🌐 DNS ${tool}: ✅ added ${entriesToAdd.join(", ")}`);
170
125
  } catch (error) {
171
- const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : "Failed to add DNS entry";
126
+ const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to add DNS entry: ${error.message}`;
172
127
  throw new Error(msg);
173
128
  }
174
129
  }
@@ -188,11 +143,19 @@ async function removeDNSEntry(tool, sudoPassword) {
188
143
 
189
144
  try {
190
145
  if (IS_WIN) {
191
- // Process already has admin rights — edit hosts file directly
192
- const content = fs.readFileSync(HOSTS_FILE, "utf8");
193
- const filtered = content.split(/\r?\n/).filter(l => !entriesToRemove.some(h => l.includes(h))).join("\r\n");
194
- fs.writeFileSync(HOSTS_FILE, filtered, "utf8");
195
- require("child_process").execSync("ipconfig /flushdns", { windowsHide: true });
146
+ // Build PowerShell list literal of hosts to strip
147
+ const hostsList = entriesToRemove.map(quotePs).join(",");
148
+ const script = `
149
+ $hosts = @(${hostsList})
150
+ $lines = Get-Content -LiteralPath ${quotePs(HOSTS_FILE)}
151
+ $filtered = $lines | Where-Object {
152
+ $line = $_
153
+ -not ($hosts | Where-Object { $line -match [regex]::Escape($_) })
154
+ }
155
+ Set-Content -LiteralPath ${quotePs(HOSTS_FILE)} -Value $filtered
156
+ ipconfig /flushdns | Out-Null
157
+ `;
158
+ await runElevatedPowerShell(script);
196
159
  } else {
197
160
  for (const host of entriesToRemove) {
198
161
  const sedCmd = IS_MAC
@@ -204,7 +167,7 @@ async function removeDNSEntry(tool, sudoPassword) {
204
167
  }
205
168
  log(`🌐 DNS ${tool}: ✅ removed ${entriesToRemove.join(", ")}`);
206
169
  } catch (error) {
207
- const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : "Failed to remove DNS entry";
170
+ const msg = error.message?.includes("incorrect password") ? "Wrong sudo password" : `Failed to remove DNS entry: ${error.message}`;
208
171
  throw new Error(msg);
209
172
  }
210
173
  }
@@ -222,14 +185,37 @@ async function removeAllDNSEntries(sudoPassword) {
222
185
  }
223
186
  }
224
187
 
188
+ /**
189
+ * Sync removal of ALL tool DNS entries — for use during process shutdown
190
+ * when async ops aren't safe. Assumes caller already has root/admin rights.
191
+ */
192
+ function removeAllDNSEntriesSync() {
193
+ try {
194
+ if (!fs.existsSync(HOSTS_FILE)) return;
195
+ const allHosts = Object.values(TOOL_HOSTS).flat();
196
+ const content = fs.readFileSync(HOSTS_FILE, "utf8");
197
+ const eol = IS_WIN ? "\r\n" : "\n";
198
+ const filtered = content.split(/\r?\n/).filter(l => !allHosts.some(h => l.includes(h))).join(eol);
199
+ if (filtered === content) return;
200
+ fs.writeFileSync(HOSTS_FILE, filtered, "utf8");
201
+ if (IS_WIN) {
202
+ try { execSync("ipconfig /flushdns", { windowsHide: true, stdio: "ignore" }); } catch { /* ignore */ }
203
+ } else if (IS_MAC) {
204
+ try { execSync("dscacheutil -flushcache && killall -HUP mDNSResponder", { stdio: "ignore" }); } catch { /* ignore */ }
205
+ } else {
206
+ try { execSync("resolvectl flush-caches 2>/dev/null || true", { stdio: "ignore" }); } catch { /* ignore */ }
207
+ }
208
+ } catch { /* best effort during shutdown */ }
209
+ }
210
+
225
211
  module.exports = {
226
212
  TOOL_HOSTS,
227
213
  addDNSEntry,
228
214
  removeDNSEntry,
229
215
  removeAllDNSEntries,
216
+ removeAllDNSEntriesSync,
230
217
  execWithPassword,
231
218
  isSudoAvailable,
232
- executeElevatedPowerShell,
233
219
  checkDNSEntry,
234
220
  checkAllDNSStatus,
235
221
  };
@@ -1,19 +1,31 @@
1
- const { err } = require("../logger");
1
+ const { err, createResponseDumper } = require("../logger");
2
2
  const { fetchRouter, pipeSSE } = require("./base");
3
3
 
4
4
  /**
5
- * Intercept Antigravity (Gemini) request — replace model and forward to router
5
+ * Intercept Antigravity request — forward Gemini body as-is to /v1/chat/completions.
6
+ * Router auto-detects format via body.userAgent==="antigravity" + body.request.contents,
7
+ * runs antigravity→openai→provider→openai→antigravity translators internally.
6
8
  */
7
9
  async function intercept(req, res, bodyBuffer, mappedModel) {
10
+ const dumper = createResponseDumper(req, "intercept-antigravity");
11
+ const isStream = req.url.includes(":streamGenerateContent");
8
12
  try {
9
13
  const body = JSON.parse(bodyBuffer.toString());
10
- body.model = mappedModel;
14
+ if (body.model) body.model = mappedModel;
15
+
11
16
  const routerRes = await fetchRouter(body, "/v1/chat/completions", req.headers);
12
- await pipeSSE(routerRes, res);
17
+ await pipeSSE(routerRes, res, dumper);
13
18
  } catch (error) {
14
19
  err(`[antigravity] ${error.message}`);
15
- if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
16
- res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } }));
20
+ if (dumper) { dumper.writeChunk(`\n[ERROR] ${error.message}\n`); dumper.end(); }
21
+ // For stream endpoint, send SSE error chunk so SDK doesn't hang waiting
22
+ if (isStream) {
23
+ if (!res.headersSent) res.writeHead(200, { "Content-Type": "text/event-stream" });
24
+ res.end(`data: ${JSON.stringify({ error: { message: error.message } })}\r\n\r\n`);
25
+ } else {
26
+ if (!res.headersSent) res.writeHead(500, { "Content-Type": "application/json" });
27
+ res.end(JSON.stringify({ error: { message: error.message, type: "mitm_error" } }));
28
+ }
17
29
  }
18
30
  }
19
31
 
@@ -32,25 +32,26 @@ async function fetchRouter(openaiBody, path = "/v1/chat/completions", clientHead
32
32
  body: JSON.stringify(openaiBody)
33
33
  });
34
34
 
35
- if (!response.ok) {
36
- const errText = await response.text().catch(() => "");
37
- throw new Error(`[${response.status}]: ${errText}`);
38
- }
39
-
35
+ // Forward response as-is (status + body). pipeSSE will propagate status.
40
36
  return response;
41
37
  }
42
38
 
43
39
  /**
44
- * Pipe SSE stream from router directly to client response
40
+ * Pipe SSE stream from router directly to client response.
41
+ * Optional dumper tees the stream into a debug file.
45
42
  */
46
- async function pipeSSE(routerRes, res) {
43
+ async function pipeSSE(routerRes, res, dumper) {
47
44
  const ct = routerRes.headers.get("content-type") || "application/json";
45
+ const status = routerRes.status || 200;
48
46
  const resHeaders = { "Content-Type": ct, "Cache-Control": "no-cache", "Connection": "keep-alive" };
49
47
  if (ct.includes("text/event-stream")) resHeaders["X-Accel-Buffering"] = "no";
50
- res.writeHead(200, resHeaders);
48
+ res.writeHead(status, resHeaders);
49
+ if (dumper) dumper.writeHeader(routerRes.status, Object.fromEntries(routerRes.headers));
51
50
 
52
51
  if (!routerRes.body) {
53
- res.end(await routerRes.text().catch(() => ""));
52
+ const text = await routerRes.text().catch(() => "");
53
+ if (dumper) { dumper.writeChunk(text); dumper.end(); }
54
+ res.end(text);
54
55
  return;
55
56
  }
56
57
 
@@ -58,7 +59,8 @@ async function pipeSSE(routerRes, res) {
58
59
  const decoder = new TextDecoder();
59
60
  while (true) {
60
61
  const { done, value } = await reader.read();
61
- if (done) { res.end(); break; }
62
+ if (done) { if (dumper) dumper.end(); res.end(); break; }
63
+ if (dumper) dumper.writeChunk(value);
62
64
  res.write(decoder.decode(value, { stream: true }));
63
65
  }
64
66
  }
@@ -1,3 +1,9 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const zlib = require("zlib");
4
+ const { DATA_DIR } = require("./paths");
5
+ const { LOG_BLACKLIST_URL_PARTS } = require("./config");
6
+
1
7
  function time() {
2
8
  return new Date().toLocaleTimeString("en-US", { hour12: false });
3
9
  }
@@ -5,4 +11,99 @@ function time() {
5
11
  const log = (msg) => console.log(`[${time()}] [MITM] ${msg}`);
6
12
  const err = (msg) => console.error(`[${time()}] ❌ [MITM] ${msg}`);
7
13
 
8
- module.exports = { log, err };
14
+ function ensureDumpDir() {
15
+ const candidates = [
16
+ path.join(DATA_DIR, "logs", "mitm"),
17
+ path.join(require("os").tmpdir(), "9router", "logs", "mitm"),
18
+ ];
19
+ for (const dir of candidates) {
20
+ try {
21
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
22
+ return dir;
23
+ } catch { /* try next writable location */ }
24
+ }
25
+ return candidates[1];
26
+ }
27
+
28
+ const DUMP_DIR = ensureDumpDir();
29
+
30
+ const EMPTY_BODY_RE = /^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;
31
+
32
+ function slugify(s, max = 80) {
33
+ return String(s).replace(/[^a-zA-Z0-9]/g, "_").substring(0, max);
34
+ }
35
+
36
+ function isBlacklisted(url) {
37
+ if (!url) return false;
38
+ return LOG_BLACKLIST_URL_PARTS.some(part => url.includes(part));
39
+ }
40
+
41
+ // Decode body buffer based on content-encoding header
42
+ function decodeBody(buf, encoding) {
43
+ if (!buf || buf.length === 0) return buf;
44
+ try {
45
+ const enc = (encoding || "").toLowerCase();
46
+ if (enc.includes("gzip")) return zlib.gunzipSync(buf);
47
+ if (enc.includes("br")) return zlib.brotliDecompressSync(buf);
48
+ if (enc.includes("deflate")) return zlib.inflateSync(buf);
49
+ } catch { /* return raw on failure */ }
50
+ return buf;
51
+ }
52
+
53
+ // Save raw request: method + url + headers + body
54
+ function dumpRequest(req, bodyBuffer, tag = "raw") {
55
+ if (isBlacklisted(req.url)) return null;
56
+ try {
57
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
58
+ const slug = slugify((req.headers.host || "") + req.url);
59
+ const file = path.join(DUMP_DIR, `${ts}_${tag}_${slug}.req.json`);
60
+ let parsed = null;
61
+ try { parsed = JSON.parse(bodyBuffer.toString()); } catch { /* not JSON */ }
62
+ fs.writeFileSync(file, JSON.stringify({
63
+ method: req.method,
64
+ url: req.url,
65
+ host: req.headers.host,
66
+ headers: req.headers,
67
+ body: parsed ?? bodyBuffer.toString("utf8")
68
+ }, null, 2));
69
+ return file;
70
+ } catch { return null; }
71
+ }
72
+
73
+ // Buffer-based response dumper — collects chunks then decodes + writes once on end()
74
+ // Trade-off: holds response in RAM, but enables gzip/br decoding for readable output.
75
+ function createResponseDumper(req, tag = "raw") {
76
+ if (isBlacklisted(req.url)) return null;
77
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
78
+ const slug = slugify((req.headers.host || "") + req.url);
79
+ const file = path.join(DUMP_DIR, `${ts}_${tag}_${slug}.res.txt`);
80
+ let status = 0;
81
+ let headers = {};
82
+ const chunks = [];
83
+ return {
84
+ writeHeader: (s, h) => { status = s; headers = h || {}; },
85
+ writeChunk: (chunk) => {
86
+ if (chunk == null) return;
87
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
88
+ },
89
+ end: () => {
90
+ try {
91
+ const raw = Buffer.concat(chunks);
92
+ const enc = headers["content-encoding"] || headers["Content-Encoding"];
93
+ const decoded = decodeBody(raw, enc);
94
+ const text = decoded.toString("utf8");
95
+ // Skip empty / trivially-empty bodies
96
+ if (EMPTY_BODY_RE.test(text)) return;
97
+ // Strip content-encoding since body is now decoded
98
+ const cleanHeaders = { ...headers };
99
+ delete cleanHeaders["content-encoding"];
100
+ delete cleanHeaders["Content-Encoding"];
101
+ const out = `STATUS: ${status}\nHEADERS: ${JSON.stringify(cleanHeaders, null, 2)}\n---BODY---\n${text}`;
102
+ fs.writeFileSync(file, out);
103
+ } catch { /* ignore */ }
104
+ },
105
+ file
106
+ };
107
+ }
108
+
109
+ module.exports = { log, err, dumpRequest, createResponseDumper };
@@ -595,14 +595,31 @@ async function stopServer(sudoPassword) {
595
595
  serverPid = null;
596
596
 
597
597
  if (IS_WIN) {
598
- // Process already has admin rights — edit hosts file directly
599
598
  const hostsFile = path.join(process.env.SystemRoot || "C:\\Windows", "System32", "drivers", "etc", "hosts");
600
599
  const allHosts = Object.values(TOOL_HOSTS).flat();
601
600
  try {
602
- const hostsContent = fs.readFileSync(hostsFile, "utf8");
603
- const filtered = hostsContent.split(/\r?\n/).filter(l => !allHosts.some(h => l.includes(h))).join("\r\n");
604
- fs.writeFileSync(hostsFile, filtered, "utf8");
605
- require("child_process").execSync("ipconfig /flushdns", { windowsHide: true });
601
+ const { isAdmin, runElevatedPowerShell, quotePs } = require("./winElevated.js");
602
+ if (isAdmin()) {
603
+ // Direct fs write — bypass PowerShell to avoid parser pitfalls
604
+ const content = fs.readFileSync(hostsFile, "utf8");
605
+ const filtered = content.split(/\r?\n/).filter(l => !allHosts.some(h => l.includes(h))).join("\r\n");
606
+ if (filtered !== content) fs.writeFileSync(hostsFile, filtered, "utf8");
607
+ try { require("child_process").execSync("ipconfig /flushdns", { windowsHide: true, stdio: "ignore" }); } catch { /* ignore */ }
608
+ log("🌐 DNS: ✅ all tool hosts removed");
609
+ } else {
610
+ const hostsList = allHosts.map(quotePs).join(",");
611
+ const script = `
612
+ $hosts = @(${hostsList})
613
+ $lines = Get-Content -LiteralPath ${quotePs(hostsFile)}
614
+ $filtered = $lines | Where-Object {
615
+ $line = $_
616
+ -not ($hosts | Where-Object { $line -match [regex]::Escape($_) })
617
+ }
618
+ Set-Content -LiteralPath ${quotePs(hostsFile)} -Value $filtered
619
+ ipconfig /flushdns | Out-Null
620
+ `;
621
+ await runElevatedPowerShell(script);
622
+ }
606
623
  } catch (e) { err(`Failed to clean hosts: ${e.message}`); }
607
624
  } else {
608
625
  await removeAllDNSEntries(sudoPassword);
@@ -4,8 +4,8 @@ const path = require("path");
4
4
  const dns = require("dns");
5
5
  const { promisify } = require("util");
6
6
  const { execSync } = require("child_process");
7
- const { log, err } = require("./logger");
8
- const { TARGET_HOSTS, URL_PATTERNS, getToolForHost } = require("./config");
7
+ const { log, err, dumpRequest, createResponseDumper } = require("./logger");
8
+ const { TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, getToolForHost } = require("./config");
9
9
  const { DATA_DIR, MITM_DIR } = require("./paths");
10
10
  const { getCertForDomain } = require("./cert/generate");
11
11
 
@@ -13,11 +13,8 @@ const DB_FILE = path.join(DATA_DIR, "db.json");
13
13
  const LOCAL_PORT = 443;
14
14
  const IS_WIN = process.platform === "win32";
15
15
  const ENABLE_FILE_LOG = false;
16
- const LOG_DIR = path.join(DATA_DIR, "logs", "mitm");
17
16
  const INTERNAL_REQUEST_HEADER = { name: "x-request-source", value: "local" };
18
17
 
19
- if (ENABLE_FILE_LOG && !fs.existsSync(LOG_DIR)) fs.mkdirSync(LOG_DIR, { recursive: true });
20
-
21
18
  // Load handlers — dev/ overrides handlers/ for private implementations
22
19
  function loadHandler(name) {
23
20
  try { return require(`./dev/${name}`); } catch {}
@@ -35,13 +32,17 @@ const handlers = {
35
32
  // ── SSL / SNI ─────────────────────────────────────────────────
36
33
 
37
34
  const certCache = new Map();
35
+ let rootCAPem;
38
36
 
39
37
  function sniCallback(servername, cb) {
40
38
  try {
41
39
  if (certCache.has(servername)) return cb(null, certCache.get(servername));
42
40
  const certData = getCertForDomain(servername);
43
41
  if (!certData) return cb(new Error(`Failed to generate cert for ${servername}`));
44
- const ctx = require("tls").createSecureContext({ key: certData.key, cert: certData.cert });
42
+ const ctx = require("tls").createSecureContext({
43
+ key: certData.key,
44
+ cert: `${certData.cert}\n${rootCAPem}`
45
+ });
45
46
  certCache.set(servername, ctx);
46
47
  log(`🔐 Cert generated: ${servername}`);
47
48
  cb(null, ctx);
@@ -53,11 +54,10 @@ function sniCallback(servername, cb) {
53
54
 
54
55
  let sslOptions;
55
56
  try {
56
- sslOptions = {
57
- key: fs.readFileSync(path.join(MITM_DIR, "rootCA.key")),
58
- cert: fs.readFileSync(path.join(MITM_DIR, "rootCA.crt")),
59
- SNICallback: sniCallback
60
- };
57
+ const rootKey = fs.readFileSync(path.join(MITM_DIR, "rootCA.key"));
58
+ const rootCert = fs.readFileSync(path.join(MITM_DIR, "rootCA.crt"));
59
+ rootCAPem = rootCert.toString("utf8");
60
+ sslOptions = { key: rootKey, cert: rootCert, SNICallback: sniCallback };
61
61
  } catch (e) {
62
62
  err(`Root CA not found: ${e.message}`);
63
63
  process.exit(1);
@@ -108,31 +108,25 @@ function getMappedModel(tool, model) {
108
108
  const db = JSON.parse(fs.readFileSync(DB_FILE, "utf-8"));
109
109
  const aliases = db.mitmAlias?.[tool];
110
110
  if (!aliases) return null;
111
- if (aliases[model]) return aliases[model];
111
+ // Normalize via synonym map (e.g., gemini-default → gemini-3-flash)
112
+ const lookup = MODEL_SYNONYMS?.[tool]?.[model] || model;
113
+ if (aliases[lookup]) return aliases[lookup];
112
114
  // Prefix match fallback
113
- const prefixKey = Object.keys(aliases).find(k => k && aliases[k] && (model.startsWith(k) || k.startsWith(model)));
115
+ const prefixKey = Object.keys(aliases).find(k => k && aliases[k] && (lookup.startsWith(k) || k.startsWith(lookup)));
114
116
  return prefixKey ? aliases[prefixKey] : null;
115
117
  } catch { return null; }
116
118
  }
117
119
 
118
- function saveRequestLog(url, bodyBuffer) {
119
- if (!ENABLE_FILE_LOG) return;
120
- try {
121
- const ts = new Date().toISOString().replace(/[:.]/g, "-");
122
- const slug = url.replace(/[^a-zA-Z0-9]/g, "_").substring(0, 60);
123
- const body = JSON.parse(bodyBuffer.toString());
124
- fs.writeFileSync(path.join(LOG_DIR, `${ts}_${slug}.json`), JSON.stringify(body, null, 2));
125
- } catch { /* ignore */ }
126
- }
127
-
128
120
  /**
129
121
  * Forward request to real upstream.
130
122
  * Optional onResponse(rawBuffer) callback — if provided, tees the response
131
123
  * so it's both forwarded to client AND passed to the callback for inspection.
124
+ * Also tees full stream into a dump file when ENABLE_FILE_LOG is on.
132
125
  */
133
126
  async function passthrough(req, res, bodyBuffer, onResponse) {
134
127
  const targetHost = (req.headers.host || TARGET_HOSTS[0]).split(":")[0];
135
128
  const targetIP = await resolveTargetIP(targetHost);
129
+ const dumper = ENABLE_FILE_LOG ? createResponseDumper(req, "passthrough") : null;
136
130
 
137
131
  const forwardReq = https.request({
138
132
  hostname: targetIP,
@@ -144,23 +138,30 @@ async function passthrough(req, res, bodyBuffer, onResponse) {
144
138
  rejectUnauthorized: false
145
139
  }, (forwardRes) => {
146
140
  res.writeHead(forwardRes.statusCode, forwardRes.headers);
141
+ if (dumper) dumper.writeHeader(forwardRes.statusCode, forwardRes.headers);
147
142
 
148
- if (!onResponse) {
143
+ if (!onResponse && !dumper) {
149
144
  forwardRes.pipe(res);
150
145
  return;
151
146
  }
152
147
 
153
- // Tee: forward to client AND buffer for callback
148
+ // Tee: forward to client AND optionally buffer + dump
154
149
  const chunks = [];
155
- forwardRes.on("data", chunk => { chunks.push(chunk); res.write(chunk); });
150
+ forwardRes.on("data", chunk => {
151
+ if (dumper) dumper.writeChunk(chunk);
152
+ if (onResponse) chunks.push(chunk);
153
+ res.write(chunk);
154
+ });
156
155
  forwardRes.on("end", () => {
156
+ if (dumper) dumper.end();
157
157
  res.end();
158
- try { onResponse(Buffer.concat(chunks), forwardRes.headers); } catch { /* ignore */ }
158
+ if (onResponse) try { onResponse(Buffer.concat(chunks), forwardRes.headers); } catch { /* ignore */ }
159
159
  });
160
160
  });
161
161
 
162
162
  forwardReq.on("error", (e) => {
163
163
  err(`Passthrough error: ${e.message}`);
164
+ if (dumper) { dumper.writeChunk(`\n[ERROR] ${e.message}\n`); dumper.end(); }
164
165
  if (!res.headersSent) res.writeHead(502);
165
166
  res.end("Bad Gateway");
166
167
  });
@@ -180,7 +181,7 @@ const server = https.createServer(sslOptions, async (req, res) => {
180
181
  }
181
182
 
182
183
  const bodyBuffer = await collectBodyRaw(req);
183
- if (bodyBuffer.length > 0) saveRequestLog(req.url, bodyBuffer);
184
+ if (ENABLE_FILE_LOG) dumpRequest(req, bodyBuffer, "raw");
184
185
 
185
186
  // Anti-loop: skip requests from 9Router
186
187
  if (req.headers[INTERNAL_REQUEST_HEADER.name] === INTERNAL_REQUEST_HEADER.value) {
@@ -269,7 +270,16 @@ server.on("error", (e) => {
269
270
  process.exit(1);
270
271
  });
271
272
 
272
- const shutdown = () => server.close(() => process.exit(0));
273
+ const { removeAllDNSEntriesSync } = require("./dns/dnsConfig");
274
+ let isShuttingDown = false;
275
+ const shutdown = () => {
276
+ if (isShuttingDown) return;
277
+ isShuttingDown = true;
278
+ // Strip tool hosts from /etc/hosts so other apps aren't broken after exit
279
+ removeAllDNSEntriesSync();
280
+ const forceExit = setTimeout(() => process.exit(0), 1500);
281
+ server.close(() => { clearTimeout(forceExit); process.exit(0); });
282
+ };
273
283
  process.on("SIGTERM", shutdown);
274
284
  process.on("SIGINT", shutdown);
275
285
  if (process.platform === "win32") process.on("SIGBREAK", shutdown);
@@ -0,0 +1,79 @@
1
+ const { exec, execSync } = require("child_process");
2
+
3
+ const IS_WIN = process.platform === "win32";
4
+
5
+ /**
6
+ * Detect if current Windows process has admin rights (no UAC popup needed).
7
+ * Uses `net session` which only succeeds when elevated.
8
+ */
9
+ function isAdmin() {
10
+ if (!IS_WIN) return false;
11
+ try {
12
+ execSync("net session >nul 2>&1", { windowsHide: true, stdio: "ignore" });
13
+ return true;
14
+ } catch {
15
+ return false;
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Quote a string safely for PowerShell single-quoted literal.
21
+ */
22
+ function quotePs(value) {
23
+ return `'${String(value).replace(/'/g, "''")}'`;
24
+ }
25
+
26
+ /**
27
+ * Run PowerShell script — escalated via UAC popup if not already admin.
28
+ * Returns Promise resolving on exit code 0, rejecting otherwise.
29
+ *
30
+ * IMPORTANT: each call triggers ONE UAC popup. Batch multiple admin tasks
31
+ * into a single script string to minimize popups.
32
+ */
33
+ function runElevatedPowerShell(script) {
34
+ if (!IS_WIN) return Promise.reject(new Error("Windows-only"));
35
+
36
+ const encoded = Buffer.from(script, "utf16le").toString("base64");
37
+
38
+ // If already admin, run directly — zero popup
39
+ if (isAdmin()) {
40
+ return new Promise((resolve, reject) => {
41
+ exec(
42
+ `powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand ${encoded}`,
43
+ { windowsHide: true },
44
+ (error, stdout, stderr) => {
45
+ if (error) reject(new Error(stderr || error.message));
46
+ else resolve(stdout);
47
+ }
48
+ );
49
+ });
50
+ }
51
+
52
+ // Not admin — wrap with Start-Process -Verb RunAs (UAC popup)
53
+ const wrapper = `
54
+ $proc = Start-Process powershell -ArgumentList @(
55
+ '-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass',
56
+ '-WindowStyle','Hidden','-EncodedCommand','${encoded}'
57
+ ) -Verb RunAs -Wait -PassThru -WindowStyle Hidden;
58
+ if ($proc.ExitCode -ne 0) { throw "Elevated command exited with code $($proc.ExitCode)" }
59
+ `;
60
+
61
+ return new Promise((resolve, reject) => {
62
+ exec(
63
+ `powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${quotePs(wrapper)}`,
64
+ { windowsHide: true },
65
+ (error, stdout, stderr) => {
66
+ if (error) {
67
+ const msg = stderr || error.message;
68
+ if (msg.includes("canceled by the user") || msg.includes("operation was canceled")) {
69
+ reject(new Error("User canceled UAC prompt"));
70
+ } else {
71
+ reject(new Error(msg));
72
+ }
73
+ } else resolve(stdout);
74
+ }
75
+ );
76
+ });
77
+ }
78
+
79
+ module.exports = { isAdmin, runElevatedPowerShell, quotePs };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Per-tool DNS hosts — written to hosts file as 127.0.0.1 when MITM DNS is enabled.
3
+ * Kept in sync with MITM routing; shared by Node (dnsConfig) and dashboard UI.
4
+ */
5
+ const TOOL_HOSTS = {
6
+ antigravity: ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"],
7
+ copilot: ["api.individual.githubcopilot.com"],
8
+ kiro: ["q.us-east-1.amazonaws.com", "codewhisperer.us-east-1.amazonaws.com"],
9
+ cursor: ["api2.cursor.sh"],
10
+ };
11
+
12
+ module.exports = { TOOL_HOSTS };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yina-npm/openrouterx",
3
- "version": "0.4.7",
3
+ "version": "0.4.11",
4
4
  "description": "openrouterX CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "openrouterX": "./cli.js"