polyrouter 1.0.4 → 1.0.6

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 (680) hide show
  1. package/README.md +67 -85
  2. package/app/.next-cli-build/BUILD_ID +1 -1
  3. package/app/.next-cli-build/app-path-routes-manifest.json +12 -12
  4. package/app/.next-cli-build/build-manifest.json +2 -2
  5. package/app/.next-cli-build/prerender-manifest.json +3 -3
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +4 -4
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +2 -2
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/realtime/page.js +2 -2
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/realtime/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/realtime/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +2 -2
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  81. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  82. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  83. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  85. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  86. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  87. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  88. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  89. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  92. package/app/.next-cli-build/server/app/_not-found.rsc +8 -8
  93. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +8 -8
  94. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +8 -8
  96. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  97. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  99. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  100. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/auth/logout/route.js +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +9 -9
  113. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  115. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  119. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  125. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  127. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +3 -3
  133. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +2 -2
  135. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js +5 -5
  137. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +3 -3
  139. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  141. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  143. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  145. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  147. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  149. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/headroom/extras/route.js +1 -1
  152. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/headroom/stop/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js +2 -2
  167. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  169. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  182. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  213. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  216. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js +1 -1
  223. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js +1 -1
  225. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/realtime/authorize/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/realtime/authorize/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  241. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  243. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  246. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  266. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  268. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  278. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  280. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  284. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  285. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  286. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  291. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  292. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  295. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  296. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  297. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  298. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  303. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  311. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  312. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  313. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  314. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  315. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  316. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  317. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  318. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  320. package/app/.next-cli-build/server/app/callback.html +1 -1
  321. package/app/.next-cli-build/server/app/callback.rsc +8 -8
  322. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +8 -8
  323. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  324. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +8 -8
  325. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +3 -3
  326. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  327. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +10 -10
  330. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  331. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  333. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +10 -10
  335. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +8 -8
  337. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +3 -3
  338. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +10 -10
  340. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  341. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  342. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  344. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +10 -10
  345. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +8 -8
  347. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +3 -3
  348. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/combos.rsc +10 -10
  350. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  351. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  352. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  354. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +10 -10
  355. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +8 -8
  357. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +3 -3
  358. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +10 -10
  360. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  361. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  362. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  364. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +10 -10
  365. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +8 -8
  367. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +3 -3
  368. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +10 -10
  370. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  371. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  372. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +10 -10
  376. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +8 -8
  378. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +3 -3
  379. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +10 -10
  381. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  382. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +10 -10
  386. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +8 -8
  388. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +3 -3
  389. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/profile.rsc +10 -10
  391. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  392. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  395. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +10 -10
  396. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  397. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +8 -8
  398. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +3 -3
  399. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  400. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +10 -10
  401. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  402. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  404. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  406. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +10 -10
  407. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  408. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +8 -8
  409. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +3 -3
  410. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/providers.rsc +10 -10
  412. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  413. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  416. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +10 -10
  417. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +8 -8
  419. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +3 -3
  420. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +10 -10
  422. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  423. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  425. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  426. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +10 -10
  427. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  428. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +8 -8
  429. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +3 -3
  430. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +1 -1
  431. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +10 -10
  432. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +2 -2
  433. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe.segment.rsc +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  435. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  436. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +10 -10
  437. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_head.segment.rsc +1 -1
  438. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_index.segment.rsc +8 -8
  439. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +3 -3
  440. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  441. package/app/.next-cli-build/server/app/dashboard/quota.rsc +11 -11
  442. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  443. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  445. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  446. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +11 -11
  447. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  448. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +8 -8
  449. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +3 -3
  450. package/app/.next-cli-build/server/app/dashboard/realtime.html +1 -1
  451. package/app/.next-cli-build/server/app/dashboard/realtime.rsc +10 -10
  452. package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard/realtime/__PAGE__.segment.rsc +2 -2
  453. package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard/realtime.segment.rsc +1 -1
  454. package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/realtime.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  456. package/app/.next-cli-build/server/app/dashboard/realtime.segments/_full.segment.rsc +10 -10
  457. package/app/.next-cli-build/server/app/dashboard/realtime.segments/_head.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/dashboard/realtime.segments/_index.segment.rsc +8 -8
  459. package/app/.next-cli-build/server/app/dashboard/realtime.segments/_tree.segment.rsc +3 -3
  460. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  461. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  462. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  463. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  464. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +8 -8
  465. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +8 -8
  466. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  467. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +8 -8
  468. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -3
  469. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  470. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  471. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  473. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  474. package/app/.next-cli-build/server/app/dashboard/skills.rsc +10 -10
  475. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  476. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  477. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  478. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  479. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +10 -10
  480. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  481. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +8 -8
  482. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +3 -3
  483. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  484. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +10 -10
  485. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +2 -2
  486. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  487. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  488. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  489. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +10 -10
  490. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  491. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +8 -8
  492. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +3 -3
  493. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  494. package/app/.next-cli-build/server/app/dashboard/translator.rsc +10 -10
  495. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  496. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  497. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  498. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  499. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +10 -10
  500. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  501. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +8 -8
  502. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +3 -3
  503. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  504. package/app/.next-cli-build/server/app/dashboard/usage.rsc +10 -10
  505. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  506. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  507. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  508. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  509. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +10 -10
  510. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  511. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +8 -8
  512. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +3 -3
  513. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  514. package/app/.next-cli-build/server/app/dashboard.rsc +10 -10
  515. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  516. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  517. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  518. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +10 -10
  519. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  520. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +8 -8
  521. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +3 -3
  522. package/app/.next-cli-build/server/app/index.html +1 -1
  523. package/app/.next-cli-build/server/app/index.rsc +8 -8
  524. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  525. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +8 -8
  526. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  527. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +8 -8
  528. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +3 -3
  529. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  530. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  531. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  532. package/app/.next-cli-build/server/app/landing.html +1 -1
  533. package/app/.next-cli-build/server/app/landing.rsc +9 -9
  534. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +9 -9
  535. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  536. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +8 -8
  537. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +3 -3
  538. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  540. package/app/.next-cli-build/server/app/login/page.js +1 -1
  541. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  542. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  543. package/app/.next-cli-build/server/app/login.html +1 -1
  544. package/app/.next-cli-build/server/app/login.rsc +9 -9
  545. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +9 -9
  546. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  547. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +8 -8
  548. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +3 -3
  549. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  550. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  551. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  552. package/app/.next-cli-build/server/app/page.js +1 -1
  553. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  554. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  555. package/app/.next-cli-build/server/app-paths-manifest.json +12 -12
  556. package/app/.next-cli-build/server/chunks/1220.js +1 -1
  557. package/app/.next-cli-build/server/chunks/1455.js +1 -0
  558. package/app/.next-cli-build/server/chunks/1605.js +1 -0
  559. package/app/.next-cli-build/server/chunks/2112.js +1 -1
  560. package/app/.next-cli-build/server/chunks/2194.js +1 -1
  561. package/app/.next-cli-build/server/chunks/238.js +1 -1
  562. package/app/.next-cli-build/server/chunks/318.js +2 -2
  563. package/app/.next-cli-build/server/chunks/3535.js +1 -1
  564. package/app/.next-cli-build/server/chunks/3726.js +1 -1
  565. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  566. package/app/.next-cli-build/server/chunks/412.js +1 -1
  567. package/app/.next-cli-build/server/chunks/4123.js +3 -3
  568. package/app/.next-cli-build/server/chunks/4293.js +1 -0
  569. package/app/.next-cli-build/server/chunks/4433.js +1 -0
  570. package/app/.next-cli-build/server/chunks/4884.js +1 -1
  571. package/app/.next-cli-build/server/chunks/4930.js +1 -0
  572. package/app/.next-cli-build/server/chunks/5612.js +1 -1
  573. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  574. package/app/.next-cli-build/server/chunks/6805.js +3 -3
  575. package/app/.next-cli-build/server/chunks/6922.js +1 -0
  576. package/app/.next-cli-build/server/chunks/7807.js +1 -1
  577. package/app/.next-cli-build/server/chunks/{3850.js → 8008.js} +1 -1
  578. package/app/.next-cli-build/server/chunks/8038.js +19 -19
  579. package/app/.next-cli-build/server/chunks/8145.js +1 -1
  580. package/app/.next-cli-build/server/chunks/8185.js +1 -0
  581. package/app/.next-cli-build/server/chunks/8251.js +2 -2
  582. package/app/.next-cli-build/server/chunks/827.js +1 -1
  583. package/app/.next-cli-build/server/chunks/8363.js +1 -0
  584. package/app/.next-cli-build/server/chunks/869.js +1 -1
  585. package/app/.next-cli-build/server/chunks/8910.js +1 -1
  586. package/app/.next-cli-build/server/chunks/915.js +6 -6
  587. package/app/.next-cli-build/server/chunks/9660.js +1 -1
  588. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  589. package/app/.next-cli-build/server/middleware.js +3 -3
  590. package/app/.next-cli-build/server/pages/404.html +1 -1
  591. package/app/.next-cli-build/server/pages/500.html +1 -1
  592. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  593. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  594. package/app/.next-cli-build/static/chunks/{1321-5363e10d6bc83255.js → 1321-e91fcc77031966c2.js} +1 -1
  595. package/app/.next-cli-build/static/chunks/5116-57607d97ad30f27c.js +70 -0
  596. package/app/.next-cli-build/static/chunks/{533-74450af7ce8a32b6.js → 533-34fc7f5a3c79da82.js} +1 -1
  597. package/app/.next-cli-build/static/chunks/{5497-78a8a8716352195f.js → 5497-84dfd144b30eda56.js} +1 -1
  598. package/app/.next-cli-build/static/chunks/9da6db1e-d4cbd87a5f1d0209.js +1 -0
  599. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-3b24dec9f1a5c678.js +1 -0
  600. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-63a707f86838189f.js → page-c737bc25a827d251.js} +1 -1
  601. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-26f454785dc626b1.js +1 -0
  602. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/realtime/{page-81a6d2a3fffb86dc.js → page-f4b382f06f0f8eb6.js} +1 -1
  603. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-07a0044d9e135cb8.js +1 -0
  604. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/token-saver/{page-ec365dbdc0860d04.js → page-d488121dc0c130ad.js} +1 -1
  605. package/app/.next-cli-build/static/chunks/app/landing/page-1f76869d947f63aa.js +1 -0
  606. package/app/.next-cli-build/static/chunks/app/layout-2654a5701747e5bc.js +1 -0
  607. package/app/.next-cli-build/static/chunks/app/login/{page-744fd018e592b5f6.js → page-e0dc71d92b91cd3f.js} +1 -1
  608. package/app/.next-cli-build/static/css/ada9b169590290e6.css +1 -0
  609. package/app/.next-cli-build/static/css/b71ca13188930393.css +1 -0
  610. package/app/node_modules/baseline-browser-mapping/dist/index.cjs +1 -1
  611. package/app/node_modules/baseline-browser-mapping/package.json +1 -1
  612. package/app/package.json +11 -9
  613. package/app/public/i18n/literals/ar.json +4 -4
  614. package/app/public/i18n/literals/bn.json +4 -4
  615. package/app/public/i18n/literals/cs.json +4 -4
  616. package/app/public/i18n/literals/da.json +4 -4
  617. package/app/public/i18n/literals/de.json +4 -4
  618. package/app/public/i18n/literals/el.json +4 -4
  619. package/app/public/i18n/literals/es.json +4 -4
  620. package/app/public/i18n/literals/fa.json +33 -33
  621. package/app/public/i18n/literals/fi.json +4 -4
  622. package/app/public/i18n/literals/fr.json +4 -4
  623. package/app/public/i18n/literals/he.json +4 -4
  624. package/app/public/i18n/literals/hi.json +4 -4
  625. package/app/public/i18n/literals/hu.json +4 -4
  626. package/app/public/i18n/literals/id.json +4 -4
  627. package/app/public/i18n/literals/it.json +4 -4
  628. package/app/public/i18n/literals/ja.json +4 -4
  629. package/app/public/i18n/literals/km.json +33 -33
  630. package/app/public/i18n/literals/ko.json +4 -4
  631. package/app/public/i18n/literals/nl.json +4 -4
  632. package/app/public/i18n/literals/no.json +4 -4
  633. package/app/public/i18n/literals/pl.json +4 -4
  634. package/app/public/i18n/literals/pt-BR.json +4 -4
  635. package/app/public/i18n/literals/pt-PT.json +4 -4
  636. package/app/public/i18n/literals/ro.json +4 -4
  637. package/app/public/i18n/literals/ru.json +4 -4
  638. package/app/public/i18n/literals/sv.json +4 -4
  639. package/app/public/i18n/literals/th.json +33 -33
  640. package/app/public/i18n/literals/tl.json +4 -4
  641. package/app/public/i18n/literals/tr.json +4 -4
  642. package/app/public/i18n/literals/uk.json +4 -4
  643. package/app/public/i18n/literals/ur.json +4 -4
  644. package/app/public/i18n/literals/vi.json +4 -4
  645. package/app/public/i18n/literals/zh-CN.json +33 -33
  646. package/app/public/i18n/literals/zh-TW.json +4 -4
  647. package/app/src/lib/updater/updater.js +3 -3
  648. package/app/src/mitm/server.js +3 -3
  649. package/app/src/realtime/protocol.js +1 -1
  650. package/app/src/realtime/runtime.js +6 -4
  651. package/cli.js +16 -16
  652. package/hooks/postinstall.js +5 -5
  653. package/hooks/sqliteRuntime.js +4 -4
  654. package/hooks/trayRuntime.js +6 -6
  655. package/package.json +14 -8
  656. package/src/cli/api/client.js +2 -2
  657. package/src/cli/commands/xaiVideo.js +7 -7
  658. package/src/cli/menus/cliTools.js +16 -16
  659. package/src/cli/terminalUI.js +2 -2
  660. package/src/cli/tray/autostart.js +9 -9
  661. package/src/cli/tray/tray.js +5 -5
  662. package/src/cli/tray/tray.ps1 +1 -1
  663. package/app/.next-cli-build/server/chunks/3350.js +0 -1
  664. package/app/.next-cli-build/server/chunks/4223.js +0 -11
  665. package/app/.next-cli-build/server/chunks/4306.js +0 -1
  666. package/app/.next-cli-build/server/chunks/6832.js +0 -1
  667. package/app/.next-cli-build/server/chunks/6935.js +0 -1
  668. package/app/.next-cli-build/server/chunks/8658.js +0 -1
  669. package/app/.next-cli-build/server/chunks/8971.js +0 -1
  670. package/app/.next-cli-build/static/chunks/3122-7d92444836703c7a.js +0 -11
  671. package/app/.next-cli-build/static/chunks/5116-8422f68a0c01ef77.js +0 -70
  672. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/page-4c5a22762fe663b8.js +0 -1
  673. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/profile/page-f8b4e4dc27c90c0c.js +0 -1
  674. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/page-d73bd129f40d6396.js +0 -1
  675. package/app/.next-cli-build/static/chunks/app/landing/page-d0dc2acaf2a1c239.js +0 -1
  676. package/app/.next-cli-build/static/chunks/app/layout-1c95599c7054cadc.js +0 -1
  677. package/app/.next-cli-build/static/css/f21ca4a324c22a6c.css +0 -1
  678. package/app/.next-cli-build/static/css/fa9e956ea578b5b8.css +0 -1
  679. /package/app/.next-cli-build/static/{P86gd5BC-j6FbnOx3-K8q → Fq1kR9_FoWmz8b123uFBu}/_buildManifest.js +0 -0
  680. /package/app/.next-cli-build/static/{P86gd5BC-j6FbnOx3-K8q → Fq1kR9_FoWmz8b123uFBu}/_ssgManifest.js +0 -0
@@ -15,19 +15,19 @@
15
15
  "1. CLI & SDKs": "1. CLI 和 SDK",
16
16
  "1. Client Request (Input)": "1. å®¢ęˆ·ē«ÆčÆ·ę±‚ļ¼ˆč¾“å…„ļ¼‰",
17
17
  "1. Generates SSL cert & adds to system keychain": "1. ē”Ÿęˆ SSL čÆä¹¦å¹¶ę·»åŠ åˆ°ē³»ē»Ÿé’„åŒ™äø²",
18
- "2. 9Router Hub": "2. 9Router ęž¢ēŗ½",
18
+ "2. PolyRouter Hub": "2. PolyRouter ęž¢ēŗ½",
19
19
  "2. Provider Request (Translated)": "2. ęä¾›å•†čÆ·ę±‚ļ¼ˆå·²ā€‹ā€‹ēæ»čÆ‘ļ¼‰",
20
20
  "2. Redirects": "2. 重定向",
21
21
  "24h": "24å°ę—¶",
22
22
  "3. AI Providers": "3. AI ęä¾›å•†",
23
- "3. Maps Antigravity models to any provider via 9Router": "3. é€ščæ‡ 9Router 将AntigravityęØ”åž‹ę˜ å°„åˆ°ä»»ä½•ęä¾›å•†",
23
+ "3. Maps Antigravity models to any provider via PolyRouter": "3. é€ščæ‡ PolyRouter 将AntigravityęØ”åž‹ę˜ å°„åˆ°ä»»ä½•ęä¾›å•†",
24
24
  "3. Provider Response (Raw)": "3. ęä¾›å•†å“åŗ”ļ¼ˆåŽŸå§‹ļ¼‰",
25
25
  "30D": "30 天",
26
26
  "4. Client Response (Final)": "4. å®¢ęˆ·ē«Æå“åŗ”ļ¼ˆęœ€ē»ˆļ¼‰",
27
27
  "60D": "60 天",
28
28
  "7D": "7 天",
29
- "9Router (Entry)": "9Routerļ¼ˆå…„å£ļ¼‰",
30
- "9Router Base URL": "9Router åŸŗē”€ URL",
29
+ "PolyRouter (Entry)": "PolyRouterļ¼ˆå…„å£ļ¼‰",
30
+ "PolyRouter Base URL": "PolyRouter åŸŗē”€ URL",
31
31
  ": Account | Workers Scripts | Edit": "ļ¼šč“¦å· | Workers č„šęœ¬ | 编辑",
32
32
  ": Include | Account |": "ļ¼šåŒ…å« | č“¦å· |",
33
33
  "AI endpoint proxy with web dashboard - A JavaScript port of CLIProxyAPI. Works seamlessly with Claude Code, OpenAI Codex, Cline, RooCode, and other CLI tools.": "AI ē«Æē‚¹ä»£ē†ļ¼Œé™„åø¦ Web ä»Ŗč”Øē›˜ — CLIProxyAPI ēš„ JavaScript ē§»ę¤ē‰ˆć€‚äøŽ Claude Code态OpenAI Codex态Cline态RooCode 和其他 CLI å·„å…·ę— ē¼åä½œć€‚",
@@ -88,12 +88,12 @@
88
88
  "Add the following configuration to your models array:": "å°†ä»„äø‹é…ē½®ę·»åŠ åˆ°ę‚Øēš„ models ę•°ē»„äø­ļ¼š",
89
89
  "Add your first connection to get started": "ę·»åŠ ę‚Øēš„ē¬¬äø€äøŖčæžęŽ„ä»„å¼€å§‹ä½æē”Ø",
90
90
  "Administrator required": "éœ€č¦ē®”ē†å‘˜ęƒé™",
91
- "Administrator required — restart 9Router as Administrator to use MITM": "éœ€č¦ē®”ē†å‘˜ęƒé™ — ä»„ē®”ē†å‘˜čŗ«ä»½é‡ę–°åÆåŠØ 9Router 仄使用 MITM",
91
+ "Administrator required — restart PolyRouter as Administrator to use MITM": "éœ€č¦ē®”ē†å‘˜ęƒé™ — ä»„ē®”ē†å‘˜čŗ«ä»½é‡ę–°åÆåŠØ PolyRouter 仄使用 MITM",
92
92
  "After authorization, copy the full URL from your browser address bar.": "ęŽˆęƒåŽļ¼Œä»Žęµč§ˆå™Øåœ°å€ę äø­å¤åˆ¶å®Œę•“ēš„ URL怂",
93
93
  "After authorization, copy the full URL from your browser.": "ęŽˆęƒåŽļ¼Œä»Žęµč§ˆå™Øå¤åˆ¶å®Œę•“ēš„ URL怂",
94
94
  "After installation, run": "å®‰č£…åŽļ¼Œčæč”Œ",
95
95
  "After login, you'll need to copy the callback URL from your browser and paste it back here.": "ē™»å½•åŽļ¼Œę‚Øéœ€č¦ä»Žęµč§ˆå™Øå¤åˆ¶å›žč°ƒ URL å¹¶å°†å…¶ē²˜č““å›žę­¤å¤„ć€‚",
96
- "Alibaba Qwen Code CLI — supports OpenAI, Anthropic & Gemini providers via 9Router": "é˜æé‡Œå·“å·“ Qwen Code CLI — é€ščæ‡ 9Router ę”ÆęŒ OpenAI态Anthropic 和 Gemini ęä¾›å•†",
96
+ "Alibaba Qwen Code CLI — supports OpenAI, Anthropic & Gemini providers via PolyRouter": "é˜æé‡Œå·“å·“ Qwen Code CLI — é€ščæ‡ PolyRouter ę”ÆęŒ OpenAI态Anthropic 和 Gemini ęä¾›å•†",
97
97
  "All": "å…ØéƒØ",
98
98
  "All AI Providers": "ꉀ꜉ AI ęä¾›å•†",
99
99
  "All Providers": "ę‰€ęœ‰ęä¾›å•†",
@@ -108,8 +108,8 @@
108
108
  "Anthropic Claude Code CLI": "Anthropic Claude Code CLI",
109
109
  "Anthropic Compatible (Prod)": "Anthropic å…¼å®¹ļ¼ˆē”Ÿäŗ§ļ¼‰",
110
110
  "Anthropic Compatible Details": "Anthropic å…¼å®¹čÆ¦ęƒ…",
111
- "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE 请求 → DNS 重定向到 localhost:443 → MITM ä»£ē†ę‹¦ęˆŖ → 9Router → å“åŗ”čæ”å›ž Antigravity/Copilot",
112
- "Any model available in 9Router can be used — not just Qwen models. Select from Qwen, Claude, Gemini, GPT, and more.": "9Router äø­åÆē”Øēš„ä»»ä½•ęØ”åž‹éƒ½åÆä»„ä½æē”Øā€”ā€”äøä»…ä»…ę˜Æ Qwen ęØ”åž‹ć€‚ä»Ž Qwen态Claude态Gemini态GPT 等中选择。",
111
+ "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → PolyRouter → response to Antigravity/Copilot": "Antigravity/Copilot IDE 请求 → DNS 重定向到 localhost:443 → MITM ä»£ē†ę‹¦ęˆŖ → PolyRouter → å“åŗ”čæ”å›ž Antigravity/Copilot",
112
+ "Any model available in PolyRouter can be used — not just Qwen models. Select from Qwen, Claude, Gemini, GPT, and more.": "PolyRouter äø­åÆē”Øēš„ä»»ä½•ęØ”åž‹éƒ½åÆä»„ä½æē”Øā€”ā€”äøä»…ä»…ę˜Æ Qwen ęØ”åž‹ć€‚ä»Ž Qwen态Claude态Gemini态GPT 等中选择。",
113
113
  "App Name": "åŗ”ē”Øåē§°",
114
114
  "Apply": "应用",
115
115
  "Apply Proxy": "应用代理",
@@ -253,7 +253,7 @@
253
253
  "Config path: Linux/macOS ~/.deepseek/config.toml • Windows %USERPROFILE%\\.deepseek\\config.toml": "é…ē½®č·Æå¾„ļ¼šLinux/macOS ~/.deepseek/config.toml • Windows %USERPROFILE%\\.deepseek\\config.toml",
254
254
  "Config path: Linux/macOS ~/.qwen/settings.json • Windows %USERPROFILE%\\.qwen\\settings.json": "é…ē½®č·Æå¾„ļ¼šLinux/macOS ~/.qwen/settings.json • Windows %USERPROFILE%\\.qwen\\settings.json",
255
255
  "Configuration": "é…ē½®",
256
- "Configure 9router as an OpenAI-compatible provider to route all jcode requests through 9router's optimization layer.": "将 9router é…ē½®äøŗ OpenAI å…¼å®¹ęä¾›å•†ļ¼Œä»„é€ščæ‡ 9router ēš„ä¼˜åŒ–å±‚č·Æē”±ę‰€ęœ‰ jcode 请求。",
256
+ "Configure polyrouter as an OpenAI-compatible provider to route all jcode requests through polyrouter's optimization layer.": "将 polyrouter é…ē½®äøŗ OpenAI å…¼å®¹ęä¾›å•†ļ¼Œä»„é€ščæ‡ polyrouter ēš„ä¼˜åŒ–å±‚č·Æē”±ę‰€ęœ‰ jcode 请求。",
257
257
  "Configure CLI tools": "é…ē½® CLI å·„å…·",
258
258
  "Configure a new AI provider to use with your applications.": "é…ē½®ę–°ēš„ AI ęä¾›ēØ‹åŗä»„äøŽę‚Øēš„åŗ”ē”ØēØ‹åŗäø€čµ·ä½æē”Øć€‚",
259
259
  "Configure pricing rates for cost tracking and calculations": "é…ē½®å®šä»·ä»„čæ›č”Œęˆęœ¬č·ŸčøŖå’Œč®”ē®—",
@@ -296,7 +296,7 @@
296
296
  "Copy": "复制",
297
297
  "Copy & Shutdown": "复制并关闭",
298
298
  "Copy This URL": "å¤åˆ¶ę­¤ URL",
299
- "Copy a link and paste to your AI to use 9Router — no install needed": "å¤åˆ¶é“¾ęŽ„å¹¶ē²˜č““åˆ°ę‚Øēš„ AI 仄使用 9Router — ę— éœ€å®‰č£…",
299
+ "Copy a link and paste to your AI to use PolyRouter — no install needed": "å¤åˆ¶é“¾ęŽ„å¹¶ē²˜č““åˆ°ę‚Øēš„ AI 仄使用 PolyRouter — ę— éœ€å®‰č£…",
300
300
  "Copy combo name": "å¤åˆ¶ē»„åˆåē§°",
301
301
  "Copy install command": "å¤åˆ¶å®‰č£…å‘½ä»¤",
302
302
  "Copy model": "å¤åˆ¶ęØ”åž‹",
@@ -354,7 +354,7 @@
354
354
  "Debug translation flow between formats": "č°ƒčÆ•ę ¼å¼ä¹‹é—“ēš„ēæ»čÆ‘ęµēØ‹",
355
355
  "DeepSeek TUI - Manual Configuration": "DeepSeek TUI - ę‰‹åŠØé…ē½®",
356
356
  "DeepSeek TUI not detected locally": "ęœŖåœØęœ¬åœ°ę£€ęµ‹åˆ° DeepSeek TUI",
357
- "DeepSeek TUI uses ~/.deepseek/config.toml for configuration. 9Router will update the provider to 'openai' mode with your base_url, api_key, and model.": "DeepSeek TUI 使用 ~/.deepseek/config.toml čæ›č”Œé…ē½®ć€‚9Router å°†ęä¾›å•†ę›“ę–°äøŗ 'openai' ęØ”å¼ļ¼ŒåŒ…å«ę‚Øēš„ base_url态api_key 和 model怂",
357
+ "DeepSeek TUI uses ~/.deepseek/config.toml for configuration. PolyRouter will update the provider to 'openai' mode with your base_url, api_key, and model.": "DeepSeek TUI 使用 ~/.deepseek/config.toml čæ›č”Œé…ē½®ć€‚PolyRouter å°†ęä¾›å•†ę›“ę–°äøŗ 'openai' ęØ”å¼ļ¼ŒåŒ…å«ę‚Øēš„ base_url态api_key 和 model怂",
358
358
  "DeepSeek Terminal Coding Agent (Rust TUI)": "DeepSeek ē»ˆē«Æē¼–ēØ‹ä»£ē†ļ¼ˆRust TUI)",
359
359
  "Default Model": "é»˜č®¤ęØ”åž‹",
360
360
  "Default password is": "é»˜č®¤åÆ†ē äøŗ",
@@ -454,7 +454,7 @@
454
454
  "Expires At": "čæ‡ęœŸę—¶é—“",
455
455
  "Expiring first": "å³å°†čæ‡ęœŸä¼˜å…ˆ",
456
456
  "Expiring-first currently reorders accounts inside the current page. Cross-page ordering still follows backend pagination.": "ć€Œå³å°†čæ‡ęœŸä¼˜å…ˆć€å½“å‰ä¼šåœØå½“å‰é”µé¢å†…é‡ę–°ęŽ’åŗč“¦å·ć€‚č·Øé”µé¢ęŽ’åŗä»éµå¾ŖåŽē«Æåˆ†é”µć€‚",
457
- "Expose your local 9Router to the internet. No port forwarding, no static IP needed. Share endpoint URL with your team or use it in Cursor, Cline, and other AI tools from anywhere.": "å°†ę‚Øęœ¬åœ°ēš„ 9Router ęš“éœ²åˆ°äŗ’č”ē½‘ć€‚ę— éœ€ē«Æå£č½¬å‘ļ¼Œę— éœ€é™ę€ IPć€‚äøŽę‚Øēš„å›¢é˜Ÿå…±äŗ«ē«Æē‚¹ URL ęˆ–ä»Žä»»ä½•åœ°ę–¹åœØ Cursor态Cline 和其他 AI å·„å…·äø­ä½æē”Øå®ƒć€‚",
457
+ "Expose your local PolyRouter to the internet. No port forwarding, no static IP needed. Share endpoint URL with your team or use it in Cursor, Cline, and other AI tools from anywhere.": "å°†ę‚Øęœ¬åœ°ēš„ PolyRouter ęš“éœ²åˆ°äŗ’č”ē½‘ć€‚ę— éœ€ē«Æå£č½¬å‘ļ¼Œę— éœ€é™ę€ IPć€‚äøŽę‚Øēš„å›¢é˜Ÿå…±äŗ«ē«Æē‚¹ URL ęˆ–ä»Žä»»ä½•åœ°ę–¹åœØ Cursor态Cline 和其他 AI å·„å…·äø­ä½æē”Øå®ƒć€‚",
458
458
  "Factory Droid - Manual Configuration": "Factory Droid - ę‰‹åŠØé…ē½®",
459
459
  "Factory Droid AI Assistant": "Factory Droid AI åŠ©ę‰‹",
460
460
  "Factory Droid CLI not detected locally": "ęœŖåœØęœ¬åœ°ę£€ęµ‹åˆ° Factory Droid CLI",
@@ -532,7 +532,7 @@
532
532
  "High performance global routing and IP masking via Cloudflare Workers": "é€ščæ‡ Cloudflare Workers å®žēŽ°é«˜ę€§čƒ½å…Øå±€č·Æē”±å’Œ IP 隐藏",
533
533
  "High-performance Rust-based coding agent harness": "åŸŗäŗŽ Rust ēš„é«˜ę€§čƒ½ē¼–ēØ‹ä»£ē†ę”†ęž¶",
534
534
  "History": "åŽ†å²č®°å½•",
535
- "How 9Router Works": "9Router å·„ä½œåŽŸē†",
535
+ "How PolyRouter Works": "PolyRouter å·„ä½œåŽŸē†",
536
536
  "How Pricing Works": "å®šä»·å¦‚ä½•čæä½œ",
537
537
  "How it Works": "å·„ä½œåŽŸē†",
538
538
  "How it works:": "å·„ä½œåŽŸē†ļ¼š",
@@ -561,8 +561,8 @@
561
561
  "Input Tokens": "输兄 Token",
562
562
  "Input Tokens:": "输兄 Token:",
563
563
  "Input:": "č¾“å…„ļ¼š",
564
- "Install 9Router": "安装 9Router",
565
- "Install 9Router, configure your providers via web dashboard, and start routing AI requests.": "安装 9Routerļ¼Œé€ščæ‡ Web ä»Ŗč”Øē›˜é…ē½®ę‚Øēš„ęä¾›å•†ļ¼Œē„¶åŽå¼€å§‹č·Æē”± AI 请求。",
564
+ "Install PolyRouter": "安装 PolyRouter",
565
+ "Install PolyRouter, configure your providers via web dashboard, and start routing AI requests.": "安装 PolyRouterļ¼Œé€ščæ‡ Web ä»Ŗč”Øē›˜é…ē½®ę‚Øēš„ęä¾›å•†ļ¼Œē„¶åŽå¼€å§‹č·Æē”± AI 请求。",
566
566
  "Install Chrome extension": "安装 Chrome 扩展",
567
567
  "Install Cline VS Code extension or CLI from": "ä»Žä»„äø‹ä½ē½®å®‰č£… Cline VS Code ę‰©å±•ęˆ– CLI",
568
568
  "Install Kilo Code from": "ä»Žä»„äø‹ä½ē½®å®‰č£… Kilo Code",
@@ -576,14 +576,14 @@
576
576
  "Installation Guide": "å®‰č£…ęŒ‡å—",
577
577
  "Installing Tailscale...": "ę­£åœØå®‰č£… Tailscale...",
578
578
  "Interactive diagram visible on desktop": "ę”Œé¢äøŠåÆč§ēš„äŗ¤äŗ’å¼å›¾č”Ø",
579
- "Intercept CLI tool traffic and route through 9Router": "ę‹¦ęˆŖ CLI å·„å…·ęµé‡å¹¶é€ščæ‡ 9Router č·Æē”±",
580
- "Intercepts Antigravity traffic via DNS redirect, letting you reroute models through 9Router.": "é€ščæ‡ DNS é‡å®šå‘ę‹¦ęˆŖAntigravityęµé‡ļ¼Œč®©ę‚ØåÆä»„é€ščæ‡ 9Router é‡ę–°č·Æē”±ęØ”åž‹ć€‚",
579
+ "Intercept CLI tool traffic and route through PolyRouter": "ę‹¦ęˆŖ CLI å·„å…·ęµé‡å¹¶é€ščæ‡ PolyRouter č·Æē”±",
580
+ "Intercepts Antigravity traffic via DNS redirect, letting you reroute models through PolyRouter.": "é€ščæ‡ DNS é‡å®šå‘ę‹¦ęˆŖAntigravityęµé‡ļ¼Œč®©ę‚ØåÆä»„é€ščæ‡ PolyRouter é‡ę–°č·Æē”±ęØ”åž‹ć€‚",
581
581
  "Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens.": "ę‹¦ęˆŖ Claude Code ēš„äø»é¢˜å‘½åčÆ·ę±‚å¹¶åœØęœ¬åœ°čæ”å›žä¼Ŗå“åŗ”ļ¼ŒčŠ‚ēœ API Token怂",
582
582
  "Invalid": "ꗠꕈ",
583
583
  "Invalid password": "密码错误",
584
584
  "Issuer URL": "å‘č”Œč€… URL",
585
585
  "JSON Response": "JSON å“åŗ”",
586
- "Join developers who are streamlining their AI integrations with 9Router. Open source and free to start.": "åŠ å…„ę­£åœØä½æē”Ø 9Router ē®€åŒ– AI é›†ęˆēš„å¼€å‘č€…č”Œåˆ—ć€‚å¼€ęŗäø”å…č“¹ć€‚",
586
+ "Join developers who are streamlining their AI integrations with PolyRouter. Open source and free to start.": "åŠ å…„ę­£åœØä½æē”Ø PolyRouter ē®€åŒ– AI é›†ęˆēš„å¼€å‘č€…č”Œåˆ—ć€‚å¼€ęŗäø”å…č“¹ć€‚",
587
587
  "Judge": "裁判",
588
588
  "Just now": "刚刚",
589
589
  "KB per field": "ęÆäøŖå­—ę®µēš„ KB",
@@ -664,8 +664,8 @@
664
664
  "Manual / current endpoint": "ę‰‹åŠØ/å½“å‰ē«Æē‚¹",
665
665
  "Manual Callback Required": "éœ€č¦ę‰‹åŠØå›žč°ƒ",
666
666
  "Manual Config": "ę‰‹åŠØé…ē½®",
667
- "Manual configuration is still available if 9router is deployed on a remote server.": "å¦‚ęžœ 9router éƒØē½²åœØčæœēØ‹ęœåŠ”å™ØäøŠļ¼Œä»åÆä½æē”Øę‰‹åŠØé…ē½®ć€‚",
668
- "Map Amp shorthand names such as g25p or cs45 to 9Router aliases in your local config.": "将 Amp ē®€å†™åē§°ļ¼ˆå¦‚ g25p ꈖ cs45ļ¼‰ę˜ å°„åˆ°ęœ¬åœ°é…ē½®äø­ēš„ 9Router åˆ«åć€‚",
667
+ "Manual configuration is still available if polyrouter is deployed on a remote server.": "å¦‚ęžœ polyrouter éƒØē½²åœØčæœēØ‹ęœåŠ”å™ØäøŠļ¼Œä»åÆä½æē”Øę‰‹åŠØé…ē½®ć€‚",
668
+ "Map Amp shorthand names such as g25p or cs45 to PolyRouter aliases in your local config.": "将 Amp ē®€å†™åē§°ļ¼ˆå¦‚ g25p ꈖ cs45ļ¼‰ę˜ å°„åˆ°ęœ¬åœ°é…ē½®äø­ēš„ PolyRouter åˆ«åć€‚",
669
669
  "Mask (URL)": "遮罩(URL)",
670
670
  "Max JSON Size (KB)": "ęœ€å¤§ JSON 大小 (KB)",
671
671
  "Max Records": "ęœ€å¤§č®°å½•ę•°",
@@ -916,8 +916,8 @@
916
916
  "Python ≄ 3.10 required for local managed mode. Install Python first, or use an external proxy URL.": "ęœ¬åœ°ē®”ē†ęØ”å¼éœ€č¦ Python ≄ 3.10ć€‚čÆ·å…ˆå®‰č£… Pythonļ¼Œęˆ–ä½æē”Øå¤–éƒØä»£ē† URL怂",
917
917
  "Quota Tracker": "é…é¢č·ŸčøŖå™Ø",
918
918
  "Qwen": "Qwen",
919
- "Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json. 9Router works as an OpenAI-compatible endpoint.": "Qwen Code é€ščæ‡ settings.json äø­ēš„ modelProviders ę”ÆęŒå¤šē§ęä¾›å•†ē±»åž‹ļ¼ˆopenai态anthropic态gemini)。9Router 作为 OpenAI å…¼å®¹ē«Æē‚¹å·„ä½œć€‚",
920
- "Qwen OAuth free tier was discontinued on 2026-04-15. Use 9Router with alicode/openrouter/anthropic/gemini providers instead.": "Qwen OAuth å…č“¹å„—é¤å·²äŗŽ 2026-04-15 åœę­¢ć€‚čÆ·ę”¹ē”Øåø¦ęœ‰ alicode/openrouter/anthropic/gemini ęä¾›å•†ēš„ 9Router怂",
919
+ "Qwen Code supports multiple provider types (openai, anthropic, gemini) via modelProviders in settings.json. PolyRouter works as an OpenAI-compatible endpoint.": "Qwen Code é€ščæ‡ settings.json äø­ēš„ modelProviders ę”ÆęŒå¤šē§ęä¾›å•†ē±»åž‹ļ¼ˆopenai态anthropic态gemini)。PolyRouter 作为 OpenAI å…¼å®¹ē«Æē‚¹å·„ä½œć€‚",
920
+ "Qwen OAuth free tier was discontinued on 2026-04-15. Use PolyRouter with alicode/openrouter/anthropic/gemini providers instead.": "Qwen OAuth å…č“¹å„—é¤å·²äŗŽ 2026-04-15 åœę­¢ć€‚čÆ·ę”¹ē”Øåø¦ęœ‰ alicode/openrouter/anthropic/gemini ęä¾›å•†ēš„ PolyRouter怂",
921
921
  "Rate Limited": "被限流",
922
922
  "Read Documentation": "é˜…čÆ»ę–‡ę”£",
923
923
  "Reading from AWS SSO cache": "从 AWS SSO ē¼“å­˜äø­čÆ»å–",
@@ -1104,7 +1104,7 @@
1104
1104
  "Start Server": "åÆåŠØęœåŠ”å™Ø",
1105
1105
  "Start Tunnel": "开始隧道",
1106
1106
  "Start a conversation": "å¼€å§‹äø€äøŖåÆ¹čÆ",
1107
- "Starting 9Router...": "正在启动 9Router...",
1107
+ "Starting PolyRouter...": "正在启动 PolyRouter...",
1108
1108
  "Status": "ēŠ¶ę€",
1109
1109
  "Status:": "ēŠ¶ę€ļ¼š",
1110
1110
  "Step 1: Open this URL in your browser": "第 1 ę­„ļ¼šåœØęµč§ˆå™Øäø­ę‰“å¼€ę­¤ URL",
@@ -1223,7 +1223,7 @@
1223
1223
  "Unknown": "未矄",
1224
1224
  "Unselect all": "å–ę¶ˆé€‰ę‹©å…ØéƒØ",
1225
1225
  "Update": "ꛓꖰ",
1226
- "Update 9Router": "ꛓꖰ 9Router",
1226
+ "Update PolyRouter": "ꛓꖰ PolyRouter",
1227
1227
  "Update Password": "修改密码",
1228
1228
  "Update now": "ē«‹å³ę›“ę–°",
1229
1229
  "Upstream Auth Error": "äøŠęøøč®¤čÆé”™čÆÆ",
@@ -1238,8 +1238,8 @@
1238
1238
  "Usage by Endpoint": "ęŒ‰ē«Æē‚¹ē»Ÿč®”",
1239
1239
  "Usage by Model": "ęŒ‰ęØ”åž‹ē»Ÿč®”",
1240
1240
  "Usage:": "ē”Øę³•ļ¼š",
1241
- "Use 9Router model aliases to keep Amp shorthand mappings stable across provider updates.": "使用 9Router ęØ”åž‹åˆ«åę„äæęŒ Amp ē®€å†™ę˜ å°„åœØęä¾›å•†ę›“ę–°ę—¶ēØ³å®šć€‚",
1242
- "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "使用 Antigravity IDE 和 GitHub Copilot → äøŽ 9Router ēš„ä»»ä½•ęä¾›å•†/ęØ”åž‹",
1241
+ "Use PolyRouter model aliases to keep Amp shorthand mappings stable across provider updates.": "使用 PolyRouter ęØ”åž‹åˆ«åę„äæęŒ Amp ē®€å†™ę˜ å°„åœØęä¾›å•†ę›“ę–°ę—¶ēØ³å®šć€‚",
1242
+ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from PolyRouter": "使用 Antigravity IDE 和 GitHub Copilot → äøŽ PolyRouter ēš„ä»»ä½•ęä¾›å•†/ęØ”åž‹",
1243
1243
  "Use Authentik or any OIDC provider to sign in to the dashboard.": "使用 Authentik ęˆ–ä»»ä½• OIDC ęä¾›å•†ē™»å½•ä»Ŗč”Øē›˜ć€‚",
1244
1244
  "Use Authentik or any OIDC provider to sign in to the dashboard. You can enable password-only, OIDC-only, or both for the dashboard; model API access still uses API keys.": "使用 Authentik ęˆ–ä»»ä½• OIDC ęä¾›å•†ē™»å½•ä»Ŗč”Øē›˜ć€‚ę‚ØåÆä»„åÆē”Øä»…åÆ†ē ć€ä»… OIDC ęˆ–äø¤č€…åŒę—¶åÆē”Øļ¼›ęØ”åž‹ API č®æé—®ä»ä½æē”Ø API 密钄。",
1245
1245
  "Use a GitLab OAuth application": "使用 GitLab OAuth 应用",
@@ -1279,8 +1279,8 @@
1279
1279
  "When": "ę—¶é—“",
1280
1280
  "When ON, dashboard requires password. When OFF, access without login.": "å½“ę‰“å¼€ę—¶ļ¼Œä»Ŗč”Øęæéœ€č¦åÆ†ē ć€‚å½“å…³é—­ę—¶ļ¼Œę— éœ€ē™»å½•å³åÆč®æé—®ć€‚",
1281
1281
  "Windows:": "Windows:",
1282
- "Windows: Run 9Router terminal as Administrator": "Windowsļ¼šä»„ē®”ē†å‘˜čŗ«ä»½čæč”Œ 9Router 终端",
1283
- "Windows: Run terminal (9Router) as Administrator to enable MITM": "Windowsļ¼šä»„ē®”ē†å‘˜čŗ«ä»½čæč”Œē»ˆē«Æ (9Router) 仄启用 MITM",
1282
+ "Windows: Run PolyRouter terminal as Administrator": "Windowsļ¼šä»„ē®”ē†å‘˜čŗ«ä»½čæč”Œ PolyRouter 终端",
1283
+ "Windows: Run terminal (PolyRouter) as Administrator to enable MITM": "Windowsļ¼šä»„ē®”ē†å‘˜čŗ«ä»½čæč”Œē»ˆē«Æ (PolyRouter) 仄启用 MITM",
1284
1284
  "Worker Name": "Worker åē§°",
1285
1285
  "Works on any device": "é€‚ē”ØäŗŽä»»ä½•č®¾å¤‡",
1286
1286
  "Writes to": "写兄到",
@@ -1341,8 +1341,8 @@
1341
1341
  "name|apiKey": "name|apiKey",
1342
1342
  "no_proxy:": "ę— ä»£ē†ļ¼š",
1343
1343
  "not detected locally": "ęœŖåœØęœ¬åœ°ę£€ęµ‹åˆ°",
1344
- "npm install -g 9router": "npm install -g 9router",
1345
- "npx 9router": "npx 9router",
1344
+ "npm install -g polyrouter": "npm install -g polyrouter",
1345
+ "npx polyrouter": "npx polyrouter",
1346
1346
  "open http://localhost:9099": "open http://localhost:9099",
1347
1347
  "openid profile email": "openid profile email",
1348
1348
  "optional context to improve accuracy": "åÆé€‰ēš„äøŠäø‹ę–‡ļ¼Œē”ØäŗŽęé«˜å‡†ē”®ę€§",
@@ -1359,20 +1359,20 @@
1359
1359
  "seconds...": "ē§’...",
1360
1360
  "sends image/PDF/audio requests to a model that supports them first": "将图片/PDF/éŸ³é¢‘čÆ·ę±‚ä¼˜å…ˆå‘é€åˆ°ę”ÆęŒēš„ęØ”åž‹",
1361
1361
  "sk-...": "sk-...",
1362
- "sk_9router (default)": "sk_9routerļ¼ˆé»˜č®¤ļ¼‰",
1362
+ "sk_polyrouter (default)": "sk_polyrouterļ¼ˆé»˜č®¤ļ¼‰",
1363
1363
  "system": "č·Ÿéšē³»ē»Ÿ",
1364
1364
  "tested": "已测试",
1365
1365
  "the database.": "ę•°ę®åŗ“ć€‚",
1366
1366
  "to apply changes": "ä»„ä½æę›“ę”¹ē”Ÿę•ˆ",
1367
1367
  "to verify.": "ę„éŖŒčÆć€‚",
1368
- "traffic through 9Router via MITM.": "é€ščæ‡ MITM é€ščæ‡ 9Router ēš„ęµé‡ć€‚",
1368
+ "traffic through PolyRouter via MITM.": "é€ščæ‡ MITM é€ščæ‡ PolyRouter ēš„ęµé‡ć€‚",
1369
1369
  "tries models in order (next on failure)": "ęŒ‰é”ŗåŗå°čÆ•ęØ”åž‹ļ¼ˆå¤±č“„ę—¶åˆ‡ę¢åˆ°äø‹äø€äøŖļ¼‰",
1370
1370
  "unknown": "未矄",
1371
1371
  "v1.0 is now live": "v1.0 ēŽ°å·²äøŠēŗæ",
1372
1372
  "vercel relay": "vercel äø­ē»§",
1373
1373
  "yet.": "怂",
1374
1374
  "your-org.deno.net": "your-org.deno.net",
1375
- "Ā© 2025 9Router. All rights reserved.": "Ā© 2025 9Routerć€‚äæē•™ę‰€ęœ‰ęƒåˆ©ć€‚",
1375
+ "Ā© 2025 PolyRouter. All rights reserved.": "Ā© 2025 PolyRouterć€‚äæē•™ę‰€ęœ‰ęƒåˆ©ć€‚",
1376
1376
  "— queries all models in parallel, then a judge synthesizes one answer. Best quality, but costs the most: every request bills all panel models + the judge (N+1 calls)": "— å¹¶č”ŒęŸ„čÆ¢ę‰€ęœ‰ęØ”åž‹ļ¼Œē„¶åŽē”±č£åˆ¤ē»¼åˆå‡ŗäø€äøŖē­”ę”ˆć€‚č“Øé‡ęœ€ä½³ä½†ęˆęœ¬ęœ€é«˜ļ¼šęÆę¬”čÆ·ę±‚ä¼šč®”č“¹ę‰€ęœ‰é¢ęæęØ”åž‹ + 裁判(N+1 ę¬”č°ƒē”Øļ¼‰",
1377
1377
  "— rotates models across requests to spread load": "— åœØčÆ·ę±‚é—“č½®ę¢ęØ”åž‹ä»„åˆ†ę•£č“Ÿč½½",
1378
1378
  "— sends image/PDF/audio requests to a model that supports them first": "— 将图片/PDF/éŸ³é¢‘čÆ·ę±‚ä¼˜å…ˆå‘é€åˆ°ę”ÆęŒēš„ęØ”åž‹",
@@ -108,7 +108,7 @@
108
108
  "Manage your AI provider connections": "ē®”ē†ę‚Øēš„ AI ęä¾›č€…é€£ęŽ„",
109
109
  "Model combos with fallback": "å…·ęœ‰å‚™ē”Øēš„ęØ”åž‹ēµ„åˆ",
110
110
  "Monitor your API usage, token consumption, and request logs": "ē›£ęŽ§ę‚Øēš„ API ä½æē”Øć€ä»¤ē‰Œę¶ˆč€—å’Œč«‹ę±‚ę—„čŖŒ",
111
- "Intercept CLI tool traffic and route through 9Router": "ę””ęˆŖ CLI å·„å…·ęµé‡äø¦é€šéŽ 9Router č·Æē”±",
111
+ "Intercept CLI tool traffic and route through PolyRouter": "ę””ęˆŖ CLI å·„å…·ęµé‡äø¦é€šéŽ PolyRouter č·Æē”±",
112
112
  "Configure CLI tools": "é…ē½® CLI å·„å…·",
113
113
  "API endpoint configuration": "API ē«Æé»žé…ē½®",
114
114
  "Manage your preferences": "ē®”ē†ę‚Øēš„é¦–éøé …",
@@ -172,11 +172,11 @@
172
172
  "Cert": "證書",
173
173
  "Server": "ęœå‹™å™Ø",
174
174
  "Purpose:": "ē›®ēš„ļ¼š",
175
- "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router": "使用 Antigravity IDE 和 GitHub Copilot → 與 9Router äø­ēš„ä»»ä½•ęä¾›č€…/ęØ”åž‹äø€čµ·",
175
+ "Use Antigravity IDE & GitHub Copilot → with ANY provider/model from PolyRouter": "使用 Antigravity IDE 和 GitHub Copilot → 與 PolyRouter äø­ēš„ä»»ä½•ęä¾›č€…/ęØ”åž‹äø€čµ·",
176
176
  "How it works:": "å·„ä½œåŽŸē†ļ¼š",
177
- "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot": "Antigravity/Copilot IDE 請걂 → DNS 重定向到 localhost:443 → MITM ä»£ē†ę””ęˆŖ → 9Router → å“ę‡‰åˆ° Antigravity/Copilot",
177
+ "Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → PolyRouter → response to Antigravity/Copilot": "Antigravity/Copilot IDE 請걂 → DNS 重定向到 localhost:443 → MITM ä»£ē†ę””ęˆŖ → PolyRouter → å“ę‡‰åˆ° Antigravity/Copilot",
178
178
  "No API keys — create one in Keys page": "ę²’ęœ‰ API 金鑰 — åœØé‡‘é‘°é é¢äø­å‰µå»ŗäø€å€‹",
179
- "sk_9router (default)": "sk_9routerļ¼ˆé»˜čŖļ¼‰",
179
+ "sk_polyrouter (default)": "sk_polyrouterļ¼ˆé»˜čŖļ¼‰",
180
180
  "Server started": "ęœå‹™å™Øå·²å•Ÿå‹•",
181
181
  "Failed to start server": "å•Ÿå‹•ęœå‹™å™Øå¤±ę•—",
182
182
  "Server stopped — all DNS cleared": "ęœå‹™å™Øå·²åœę­¢ — å·²ęø…é™¤ę‰€ęœ‰ DNS",
@@ -9,7 +9,7 @@ const path = require("path");
9
9
  const fs = require("fs");
10
10
  const os = require("os");
11
11
 
12
- const packageName = process.env.UPDATER_PKG_NAME || "9router";
12
+ const packageName = process.env.UPDATER_PKG_NAME || "polyrouter";
13
13
  const port = parseInt(process.env.UPDATER_PORT || "20129", 10);
14
14
  const tailLines = parseInt(process.env.UPDATER_TAIL_LINES || "8", 10);
15
15
  const maxRetries = parseInt(process.env.UPDATER_RETRIES || "3", 10);
@@ -24,9 +24,9 @@ const appPort = parseInt(process.env.UPDATER_APP_PORT || "20128", 10);
24
24
  function getDataDir() {
25
25
  if (process.env.DATA_DIR) return process.env.DATA_DIR;
26
26
  if (process.platform === "win32") {
27
- return path.join(process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"), "9router");
27
+ return path.join(process.env.APPDATA || path.join(os.homedir(), "AppData", "Roaming"), "polyrouter");
28
28
  }
29
- return path.join(os.homedir(), ".9router");
29
+ return path.join(os.homedir(), ".polyrouter");
30
30
  }
31
31
  const updateDir = path.join(getDataDir(), "update");
32
32
  try { fs.mkdirSync(updateDir, { recursive: true }); } catch { /* best effort */ }
@@ -1,4 +1,4 @@
1
- var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rr=F((nh,zn)=>{var yu=require("fs"),Fr=require("path"),qn=require("os"),_a="9router";function Hn(){return process.platform==="win32"?Fr.join(process.env.APPDATA||Fr.join(qn.homedir(),"AppData","Roaming"),_a):Fr.join(qn.homedir(),`.${_a}`)}function vu(){let e=process.env.DATA_DIR;if(!e)return Hn();try{return yu.mkdirSync(e,{recursive:!0}),e}catch(t){if(t?.code==="EACCES"||t?.code==="EPERM")return console.warn(`[DATA_DIR] '${e}' not writable \u2192 fallback ~/.${_a}`),Hn();throw t}}var Gn=vu(),mu=Fr.join(Gn,"mitm");zn.exports={DATA_DIR:Gn,MITM_DIR:mu}});var Er=F((ih,Yn)=>{var Qn=require("fs"),Cu=process.env.NODE_ENV==="development",Eu=(()=>{if(process.platform==="win32")return null;for(let e of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return Qn.accessSync(e,Qn.constants.X_OK),e}catch{}return"lsof"})(),xu=["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh"],Su={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"]},Tu={antigravity:{"gemini-default":"gemini-3.5-flash-low","gemini-3.5-flash-high":"gemini-3-flash-agent","gemini-3.5-flash-medium":"gemini-3.5-flash-low","gemini-3.5-flash-extra-low":"gemini-3.5-flash-extra-low","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},Au={antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.5-flash-extra-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.5-flash-low"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3-flash-agent"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus/i,alias:"claude-opus-4-6-thinking"},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6"},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium"}]},Iu={antigravity:[/^tab[_-]/i]},Bu=["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"];function bu(e){let t=(e||"").split(":")[0];return t==="api.individual.githubcopilot.com"?"copilot":t==="daily-cloudcode-pa.googleapis.com"||t==="cloudcode-pa.googleapis.com"?"antigravity":t==="q.us-east-1.amazonaws.com"||t==="codewhisperer.us-east-1.amazonaws.com"||t==="runtime.us-east-1.kiro.dev"?"kiro":t==="api2.cursor.sh"?"cursor":null}Yn.exports={IS_DEV:Cu,LSOF_BIN:Eu,TARGET_HOSTS:xu,URL_PATTERNS:Su,MODEL_SYNONYMS:Tu,MODEL_PATTERNS:Au,MODEL_NO_MAP:Iu,LOG_BLACKLIST_URL_PARTS:Bu,getToolForHost:bu}});var Gt=F((sh,Xn)=>{var qt=require("fs"),Kr=require("path"),Na=require("zlib"),{DATA_DIR:_u}=rr(),{LOG_BLACKLIST_URL_PARTS:Nu}=Er();function $n(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}var wu=e=>console.log(`[${$n()}] [MITM] ${e}`),Ru=e=>console.error(`[${$n()}] \u274C [MITM] ${e}`),Ht=Kr.join(_u,"logs","mitm");qt.existsSync(Ht)||qt.mkdirSync(Ht,{recursive:!0});function Lu(){try{if(!qt.existsSync(Ht))return;for(let e of qt.readdirSync(Ht))try{qt.rmSync(Kr.join(Ht,e),{recursive:!0,force:!0})}catch{}}catch{}}var ku=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function jn(e,t=80){return String(e).replace(/[^a-zA-Z0-9]/g,"_").substring(0,t)}function Wn(e){return e?Nu.some(t=>e.includes(t)):!1}function Du(e,t){if(!e||e.length===0)return e;try{let a=(t||"").toLowerCase();if(a.includes("gzip"))return Na.gunzipSync(e);if(a.includes("br"))return Na.brotliDecompressSync(e);if(a.includes("deflate"))return Na.inflateSync(e)}catch{}return e}function Uu(e,t,a="raw"){if(Wn(e.url))return null;try{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=jn((e.headers.host||"")+e.url),s=Kr.join(Ht,`${r}_${a}_${n}.req.json`),i=null;try{i=JSON.parse(t.toString())}catch{}return qt.writeFileSync(s,JSON.stringify({method:e.method,url:e.url,host:e.headers.host,headers:e.headers,body:i??t.toString("utf8")},null,2)),s}catch{return null}}function Pu(e,t="raw"){if(Wn(e.url))return null;let a=new Date().toISOString().replace(/[:.]/g,"-"),r=jn((e.headers.host||"")+e.url),n=Kr.join(Ht,`${a}_${t}_${r}.res.txt`),s=0,i={},o=[];return{writeHeader:(u,l)=>{s=u,i=l||{}},writeChunk:u=>{u!=null&&o.push(Buffer.isBuffer(u)?u:Buffer.from(u))},end:()=>{try{let u=Buffer.concat(o),l=i["content-encoding"]||i["Content-Encoding"],c=Du(u,l).toString("utf8");if(ku.test(c))return;let g={...i};delete g["content-encoding"],delete g["Content-Encoding"];let v=`STATUS: ${s}
1
+ var F=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var rr=F((nh,zn)=>{var yu=require("fs"),Fr=require("path"),qn=require("os"),_a="polyrouter";function Hn(){return process.platform==="win32"?Fr.join(process.env.APPDATA||Fr.join(qn.homedir(),"AppData","Roaming"),_a):Fr.join(qn.homedir(),`.${_a}`)}function vu(){let e=process.env.DATA_DIR;if(!e)return Hn();try{return yu.mkdirSync(e,{recursive:!0}),e}catch(t){if(t?.code==="EACCES"||t?.code==="EPERM")return console.warn(`[DATA_DIR] '${e}' not writable \u2192 fallback ~/.${_a}`),Hn();throw t}}var Gn=vu(),mu=Fr.join(Gn,"mitm");zn.exports={DATA_DIR:Gn,MITM_DIR:mu}});var Er=F((ih,Yn)=>{var Qn=require("fs"),Cu=process.env.NODE_ENV==="development",Eu=(()=>{if(process.platform==="win32")return null;for(let e of["/usr/sbin/lsof","/usr/bin/lsof","/sbin/lsof"])try{return Qn.accessSync(e,Qn.constants.X_OK),e}catch{}return"lsof"})(),xu=["daily-cloudcode-pa.googleapis.com","cloudcode-pa.googleapis.com","api.individual.githubcopilot.com","q.us-east-1.amazonaws.com","codewhisperer.us-east-1.amazonaws.com","runtime.us-east-1.kiro.dev","api2.cursor.sh"],Su={antigravity:[":generateContent",":streamGenerateContent"],copilot:["/chat/completions","/v1/messages","/responses"],kiro:["/generateAssistantResponse"],cursor:["/BidiAppend","/RunSSE","/RunPoll","/Run"]},Tu={antigravity:{"gemini-default":"gemini-3.5-flash-low","gemini-3.5-flash-high":"gemini-3-flash-agent","gemini-3.5-flash-medium":"gemini-3.5-flash-low","gemini-3.5-flash-extra-low":"gemini-3.5-flash-extra-low","gemini-3.1-pro-high":"gemini-pro-agent","gemini-3-pro-high":"gemini-pro-agent","gemini-3-pro-low":"gemini-3.1-pro-low"}},Au={antigravity:[{match:/flash.*extra.*low|extra.*low.*flash|flash.*low|low.*flash/i,alias:"gemini-3.5-flash-extra-low"},{match:/flash.*medium|medium.*flash/i,alias:"gemini-3.5-flash-low"},{match:/flash.*agent|agent.*flash|flash/i,alias:"gemini-3-flash-agent"},{match:/pro.*low|low.*pro/i,alias:"gemini-3.1-pro-low"},{match:/gemini.*pro|pro.*gemini/i,alias:"gemini-pro-agent"},{match:/opus/i,alias:"claude-opus-4-6-thinking"},{match:/sonnet|claude/i,alias:"claude-sonnet-4-6"},{match:/gpt.*oss|oss/i,alias:"gpt-oss-120b-medium"}]},Iu={antigravity:[/^tab[_-]/i]},Bu=["recordCodeAssistMetrics","recordTrajectoryAnalytics","fetchAdminControls","listExperiments","fetchUserInfo"];function bu(e){let t=(e||"").split(":")[0];return t==="api.individual.githubcopilot.com"?"copilot":t==="daily-cloudcode-pa.googleapis.com"||t==="cloudcode-pa.googleapis.com"?"antigravity":t==="q.us-east-1.amazonaws.com"||t==="codewhisperer.us-east-1.amazonaws.com"||t==="runtime.us-east-1.kiro.dev"?"kiro":t==="api2.cursor.sh"?"cursor":null}Yn.exports={IS_DEV:Cu,LSOF_BIN:Eu,TARGET_HOSTS:xu,URL_PATTERNS:Su,MODEL_SYNONYMS:Tu,MODEL_PATTERNS:Au,MODEL_NO_MAP:Iu,LOG_BLACKLIST_URL_PARTS:Bu,getToolForHost:bu}});var Gt=F((sh,Xn)=>{var qt=require("fs"),Kr=require("path"),Na=require("zlib"),{DATA_DIR:_u}=rr(),{LOG_BLACKLIST_URL_PARTS:Nu}=Er();function $n(){return new Date().toLocaleTimeString("en-US",{hour12:!1})}var wu=e=>console.log(`[${$n()}] [MITM] ${e}`),Ru=e=>console.error(`[${$n()}] \u274C [MITM] ${e}`),Ht=Kr.join(_u,"logs","mitm");qt.existsSync(Ht)||qt.mkdirSync(Ht,{recursive:!0});function Lu(){try{if(!qt.existsSync(Ht))return;for(let e of qt.readdirSync(Ht))try{qt.rmSync(Kr.join(Ht,e),{recursive:!0,force:!0})}catch{}}catch{}}var ku=/^\s*(\{\s*\}|\[\s*\]|null)?\s*$/;function jn(e,t=80){return String(e).replace(/[^a-zA-Z0-9]/g,"_").substring(0,t)}function Wn(e){return e?Nu.some(t=>e.includes(t)):!1}function Du(e,t){if(!e||e.length===0)return e;try{let a=(t||"").toLowerCase();if(a.includes("gzip"))return Na.gunzipSync(e);if(a.includes("br"))return Na.brotliDecompressSync(e);if(a.includes("deflate"))return Na.inflateSync(e)}catch{}return e}function Uu(e,t,a="raw"){if(Wn(e.url))return null;try{let r=new Date().toISOString().replace(/[:.]/g,"-"),n=jn((e.headers.host||"")+e.url),s=Kr.join(Ht,`${r}_${a}_${n}.req.json`),i=null;try{i=JSON.parse(t.toString())}catch{}return qt.writeFileSync(s,JSON.stringify({method:e.method,url:e.url,host:e.headers.host,headers:e.headers,body:i??t.toString("utf8")},null,2)),s}catch{return null}}function Pu(e,t="raw"){if(Wn(e.url))return null;let a=new Date().toISOString().replace(/[:.]/g,"-"),r=jn((e.headers.host||"")+e.url),n=Kr.join(Ht,`${a}_${t}_${r}.res.txt`),s=0,i={},o=[];return{writeHeader:(u,l)=>{s=u,i=l||{}},writeChunk:u=>{u!=null&&o.push(Buffer.isBuffer(u)?u:Buffer.from(u))},end:()=>{try{let u=Buffer.concat(o),l=i["content-encoding"]||i["Content-Encoding"],c=Du(u,l).toString("utf8");if(ku.test(c))return;let g={...i};delete g["content-encoding"],delete g["Content-Encoding"];let v=`STATUS: ${s}
2
2
  HEADERS: ${JSON.stringify(g,null,2)}
3
3
  ---BODY---
4
4
  ${c}`;qt.writeFileSync(n,v)}catch{}},file:n}}Xn.exports={log:wu,err:Ru,dumpRequest:Uu,createResponseDumper:Pu,clearDumpDir:Lu}});var Y=F((oh,Jn)=>{Jn.exports={options:{usePureJavaScript:!1}}});var ti=F((uh,ei)=>{var wa={};ei.exports=wa;var Zn={};wa.encode=function(e,t,a){if(typeof t!="string")throw new TypeError('"alphabet" must be a string.');if(a!==void 0&&typeof a!="number")throw new TypeError('"maxline" must be a number.');var r="";if(!(e instanceof Uint8Array))r=Ou(e,t);else{var n=0,s=t.length,i=t.charAt(0),o=[0];for(n=0;n<e.length;++n){for(var u=0,l=e[n];u<o.length;++u)l+=o[u]<<8,o[u]=l%s,l=l/s|0;for(;l>0;)o.push(l%s),l=l/s|0}for(n=0;e[n]===0&&n<e.length-1;++n)r+=i;for(n=o.length-1;n>=0;--n)r+=t[o[n]]}if(a){var f=new RegExp(".{1,"+a+"}","g");r=r.match(f).join(`\r
@@ -22,7 +22,7 @@ ${c}`;qt.writeFileSync(n,v)}catch{}},file:n}}Xn.exports={log:wu,err:Ru,dumpReque
22
22
  Private-Lines: `+u+`\r
23
23
  `,s+=f;var S=va("putty-private-key-file-mac-key",t),A=Ce.util.createBuffer();vr(A,r),vr(A,n),vr(A,a),A.putInt32(i.length()),A.putBuffer(i),A.putInt32(l.length()),A.putBuffer(l);var B=Ce.hmac.create();return B.start("sha1",S),B.update(A.bytes()),s+=`\r
24
24
  Private-MAC: `+B.digest().toHex()+`\r
25
- `,s};ma.publicKeyToOpenSSH=function(e,t){var a="ssh-rsa";t=t||"";var r=Ce.util.createBuffer();return vr(r,a),Et(r,e.e),Et(r,e.n),a+" "+Ce.util.encode64(r.bytes())+" "+t};ma.privateKeyToOpenSSH=function(e,t){return t?Ce.pki.encryptRsaPrivateKey(e,t,{legacy:!0,algorithm:"aes128"}):Ce.pki.privateKeyToPem(e)};ma.getPublicKeyFingerprint=function(e,t){t=t||{};var a=t.md||Ce.md.md5.create(),r="ssh-rsa",n=Ce.util.createBuffer();vr(n,r),Et(n,e.e),Et(n,e.n),a.start(),a.update(n.getBytes());var s=a.digest();if(t.encoding==="hex"){var i=s.toHex();return t.delimiter?i.match(/.{2}/g).join(t.delimiter):i}else{if(t.encoding==="binary")return s.getBytes();if(t.encoding)throw new Error('Unknown encoding "'+t.encoding+'".')}return s};function Et(e,t){var a=t.toString(16);a[0]>="8"&&(a="00"+a);var r=Ce.util.hexToBytes(a);e.putInt32(r.length),e.putBytes(r)}function vr(e,t){e.putInt32(t.length),e.putString(t)}function va(){for(var e=Ce.md.sha1.create(),t=arguments.length,a=0;a<t;++a)e.update(arguments[a]);return e.digest()}});var po=F(($h,ho)=>{ho.exports=Y();wt();Ls();lt();qr();Ir();Ws();ir();eo();no();so();nn();Zr();Qt();Ja();un();lo();fn();en();Ga();sa();tt();Ya();co();yn();re()});var mo=F((jh,vo)=>{var go=require("path"),Xe=require("fs"),Je=po(),{MITM_DIR:Ca}=rr(),Ft=go.join(Ca,"rootCA.key"),Bt=go.join(Ca,"rootCA.crt");function yo(e){try{let t=Je.pki.certificateFromPem(Xe.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function Sc(){let e=Xe.existsSync(Ft)&&Xe.existsSync(Bt);if(e&&!yo(Bt))return console.log("\u2705 Root CA already exists"),{key:Ft,cert:Bt};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{Xe.unlinkSync(Ft)}catch{}try{Xe.unlinkSync(Bt)}catch{}}Xe.existsSync(Ca)||Xe.mkdirSync(Ca,{recursive:!0}),console.log("\u{1F510} Generating Root CA certificate...");let t=Je.pki.rsa.generateKeyPair(2048),a=Je.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"9Router MITM Root CA"},{name:"organizationName",value:"9Router"},{name:"countryName",value:"US"}];a.setSubject(r),a.setIssuer(r),a.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),a.sign(t.privateKey,Je.md.sha256.create());let n=Je.pki.privateKeyToPem(t.privateKey),s=Je.pki.certificateToPem(a);return Xe.writeFileSync(Ft,n),Xe.writeFileSync(Bt,s),console.log("\u2705 Root CA generated successfully"),{key:Ft,cert:Bt}}function Tc(){if(!Xe.existsSync(Ft)||!Xe.existsSync(Bt))throw new Error("Root CA not found. Generate it first.");let e=Xe.readFileSync(Ft,"utf8"),t=Xe.readFileSync(Bt,"utf8");return{key:Je.pki.privateKeyFromPem(e),cert:Je.pki.certificateFromPem(t)}}function Ac(e,t){let a=Je.pki.rsa.generateKeyPair(2048),r=Je.pki.createCertificate();return r.publicKey=a.publicKey,r.serialNumber=Math.floor(Math.random()*1e6).toString(),r.validity.notBefore=new Date,r.validity.notAfter=new Date,r.validity.notAfter.setFullYear(r.validity.notBefore.getFullYear()+1),r.setSubject([{name:"commonName",value:e}]),r.setIssuer(t.cert.subject.attributes),r.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:e},{type:2,value:`*.${e}`}]}]),r.sign(t.key,Je.md.sha256.create()),{key:Je.pki.privateKeyToPem(a.privateKey),cert:Je.pki.certificateToPem(r)}}vo.exports={generateRootCA:Sc,loadRootCA:Tc,generateLeafCert:Ac,isCertExpired:yo,ROOT_CA_CERT_PATH:Bt,ROOT_CA_KEY_PATH:Ft}});var Eo=F((Zh,Co)=>{var Wh=require("path"),Xh=require("fs"),{MITM_DIR:Jh}=rr(),{generateRootCA:Ic,loadRootCA:Bc,generateLeafCert:bc}=mo();function _c(){return Ic()}function Nc(e){try{let t=Bc(),a=bc(e,t);return{key:a.key,cert:a.cert}}catch(t){return console.error(`Failed to generate cert for ${e}:`,t.message),null}}Co.exports={generateCert:_c,getCertForDomain:Nc}});var Ao=F((ep,To)=>{var xo=require("fs"),wc=require("path"),{DATA_DIR:Rc}=rr(),So=wc.join(Rc,"mitm","aliases.json");function Lc(){try{return xo.existsSync(So)?JSON.parse(xo.readFileSync(So,"utf-8")):null}catch{return null}}function kc(e){return Lc()?.[e]||null}To.exports={getMitmAlias:kc}});var bo=F((tp,Bo)=>{"use strict";var mr="1.23.2";function Dc(e){return!e||typeof e!="object"||Array.isArray(e)?!1:String(e.ideName||"").toLowerCase()==="antigravity"||String(e.ideType||"").toUpperCase()==="ANTIGRAVITY"?!0:Object.prototype.hasOwnProperty.call(e,"ideVersion")}function Io(e,t){return typeof e!="string"||!e.includes("antigravity/")?e:e.replace(/antigravity\/[^\s]+/,`antigravity/${t}`)}function Uc(e,t){let a={...t},r=Io(a["user-agent"],mr),n=r!==a["user-agent"];n&&(a["user-agent"]=r);try{let s=JSON.parse(e.toString());return Dc(s?.metadata)?(s.metadata.ideVersion=mr,{bodyBuffer:Buffer.from(JSON.stringify(s)),headers:a,applied:!0,version:mr}):{bodyBuffer:e,headers:a,applied:n,version:mr}}catch{return{bodyBuffer:e,headers:a,applied:n,version:mr}}}Bo.exports={ANTIGRAVITY_IDE_VERSION:mr,applyAntigravityIdeVersionOverride:Uc,rewriteAntigravityUserAgent:Io}});var xa=F((ap,wo)=>{var{log:Ea,err:rp}=Gt(),_o="http://localhost:20128",Pc=String(process.env.MITM_ROUTER_BASE||_o).trim().replace(/\/+$/,"")||_o,No=process.env.ROUTER_API_KEY,Oc=new Set(["host","content-length","connection","transfer-encoding","content-type","authorization"]);async function Vc(e,t="/v1/chat/completions",a={}){let r={};for(let[s,i]of Object.entries(a))Oc.has(s.toLowerCase())||(r[s]=i);return await fetch(`${Pc}${t}`,{method:"POST",headers:{...r,"Content-Type":"application/json",...No&&{Authorization:`Bearer ${No}`}},body:JSON.stringify(e)})}async function Fc(e,t,a){let r=e.headers.get("content-type")||"application/json",n=e.status||200,s={"Content-Type":r,"Cache-Control":"no-cache",Connection:"keep-alive"};if(r.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(n,s),a&&a.writeHeader(e.status,Object.fromEntries(e.headers)),!e.body){let u=await e.text().catch(()=>"");a&&(a.writeChunk(u),a.end()),t.end(u);return}let i=e.body.getReader(),o=new TextDecoder;for(;;){let{done:u,value:l}=await i.read();if(u){a&&a.end(),t.end();break}a&&a.writeChunk(l),t.write(o.decode(l,{stream:!0}))}}async function Kc(e,t,a,r){let n=e.headers.get("content-type")||"application/json",s={"Content-Type":n,"Cache-Control":"no-cache",Connection:"keep-alive"};if(n.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(200,s),!e.body){t.end(await e.text().catch(()=>""));return}let i=e.body.getReader(),o=new TextDecoder("utf-8",{fatal:!1}),u="";for(;;){let{done:l,value:f}=await i.read();if(l)break;u+=o.decode(f,{stream:!0});let c=u.split(`
25
+ `,s};ma.publicKeyToOpenSSH=function(e,t){var a="ssh-rsa";t=t||"";var r=Ce.util.createBuffer();return vr(r,a),Et(r,e.e),Et(r,e.n),a+" "+Ce.util.encode64(r.bytes())+" "+t};ma.privateKeyToOpenSSH=function(e,t){return t?Ce.pki.encryptRsaPrivateKey(e,t,{legacy:!0,algorithm:"aes128"}):Ce.pki.privateKeyToPem(e)};ma.getPublicKeyFingerprint=function(e,t){t=t||{};var a=t.md||Ce.md.md5.create(),r="ssh-rsa",n=Ce.util.createBuffer();vr(n,r),Et(n,e.e),Et(n,e.n),a.start(),a.update(n.getBytes());var s=a.digest();if(t.encoding==="hex"){var i=s.toHex();return t.delimiter?i.match(/.{2}/g).join(t.delimiter):i}else{if(t.encoding==="binary")return s.getBytes();if(t.encoding)throw new Error('Unknown encoding "'+t.encoding+'".')}return s};function Et(e,t){var a=t.toString(16);a[0]>="8"&&(a="00"+a);var r=Ce.util.hexToBytes(a);e.putInt32(r.length),e.putBytes(r)}function vr(e,t){e.putInt32(t.length),e.putString(t)}function va(){for(var e=Ce.md.sha1.create(),t=arguments.length,a=0;a<t;++a)e.update(arguments[a]);return e.digest()}});var po=F(($h,ho)=>{ho.exports=Y();wt();Ls();lt();qr();Ir();Ws();ir();eo();no();so();nn();Zr();Qt();Ja();un();lo();fn();en();Ga();sa();tt();Ya();co();yn();re()});var mo=F((jh,vo)=>{var go=require("path"),Xe=require("fs"),Je=po(),{MITM_DIR:Ca}=rr(),Ft=go.join(Ca,"rootCA.key"),Bt=go.join(Ca,"rootCA.crt");function yo(e){try{let t=Je.pki.certificateFromPem(Xe.readFileSync(e,"utf8")),a=new Date(Date.now()+720*60*60*1e3);return t.validity.notAfter<a}catch{return!0}}function Sc(){let e=Xe.existsSync(Ft)&&Xe.existsSync(Bt);if(e&&!yo(Bt))return console.log("\u2705 Root CA already exists"),{key:Ft,cert:Bt};if(e){console.log("\u{1F510} Root CA expired or expiring soon \u2014 regenerating...");try{Xe.unlinkSync(Ft)}catch{}try{Xe.unlinkSync(Bt)}catch{}}Xe.existsSync(Ca)||Xe.mkdirSync(Ca,{recursive:!0}),console.log("\u{1F510} Generating Root CA certificate...");let t=Je.pki.rsa.generateKeyPair(2048),a=Je.pki.createCertificate();a.publicKey=t.publicKey,a.serialNumber="01",a.validity.notBefore=new Date,a.validity.notAfter=new Date,a.validity.notAfter.setFullYear(a.validity.notBefore.getFullYear()+10);let r=[{name:"commonName",value:"PolyRouter MITM Root CA"},{name:"organizationName",value:"PolyRouter"},{name:"countryName",value:"US"}];a.setSubject(r),a.setIssuer(r),a.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,cRLSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),a.sign(t.privateKey,Je.md.sha256.create());let n=Je.pki.privateKeyToPem(t.privateKey),s=Je.pki.certificateToPem(a);return Xe.writeFileSync(Ft,n),Xe.writeFileSync(Bt,s),console.log("\u2705 Root CA generated successfully"),{key:Ft,cert:Bt}}function Tc(){if(!Xe.existsSync(Ft)||!Xe.existsSync(Bt))throw new Error("Root CA not found. Generate it first.");let e=Xe.readFileSync(Ft,"utf8"),t=Xe.readFileSync(Bt,"utf8");return{key:Je.pki.privateKeyFromPem(e),cert:Je.pki.certificateFromPem(t)}}function Ac(e,t){let a=Je.pki.rsa.generateKeyPair(2048),r=Je.pki.createCertificate();return r.publicKey=a.publicKey,r.serialNumber=Math.floor(Math.random()*1e6).toString(),r.validity.notBefore=new Date,r.validity.notAfter=new Date,r.validity.notAfter.setFullYear(r.validity.notBefore.getFullYear()+1),r.setSubject([{name:"commonName",value:e}]),r.setIssuer(t.cert.subject.attributes),r.setExtensions([{name:"basicConstraints",cA:!1},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"subjectAltName",altNames:[{type:2,value:e},{type:2,value:`*.${e}`}]}]),r.sign(t.key,Je.md.sha256.create()),{key:Je.pki.privateKeyToPem(a.privateKey),cert:Je.pki.certificateToPem(r)}}vo.exports={generateRootCA:Sc,loadRootCA:Tc,generateLeafCert:Ac,isCertExpired:yo,ROOT_CA_CERT_PATH:Bt,ROOT_CA_KEY_PATH:Ft}});var Eo=F((Zh,Co)=>{var Wh=require("path"),Xh=require("fs"),{MITM_DIR:Jh}=rr(),{generateRootCA:Ic,loadRootCA:Bc,generateLeafCert:bc}=mo();function _c(){return Ic()}function Nc(e){try{let t=Bc(),a=bc(e,t);return{key:a.key,cert:a.cert}}catch(t){return console.error(`Failed to generate cert for ${e}:`,t.message),null}}Co.exports={generateCert:_c,getCertForDomain:Nc}});var Ao=F((ep,To)=>{var xo=require("fs"),wc=require("path"),{DATA_DIR:Rc}=rr(),So=wc.join(Rc,"mitm","aliases.json");function Lc(){try{return xo.existsSync(So)?JSON.parse(xo.readFileSync(So,"utf-8")):null}catch{return null}}function kc(e){return Lc()?.[e]||null}To.exports={getMitmAlias:kc}});var bo=F((tp,Bo)=>{"use strict";var mr="1.23.2";function Dc(e){return!e||typeof e!="object"||Array.isArray(e)?!1:String(e.ideName||"").toLowerCase()==="antigravity"||String(e.ideType||"").toUpperCase()==="ANTIGRAVITY"?!0:Object.prototype.hasOwnProperty.call(e,"ideVersion")}function Io(e,t){return typeof e!="string"||!e.includes("antigravity/")?e:e.replace(/antigravity\/[^\s]+/,`antigravity/${t}`)}function Uc(e,t){let a={...t},r=Io(a["user-agent"],mr),n=r!==a["user-agent"];n&&(a["user-agent"]=r);try{let s=JSON.parse(e.toString());return Dc(s?.metadata)?(s.metadata.ideVersion=mr,{bodyBuffer:Buffer.from(JSON.stringify(s)),headers:a,applied:!0,version:mr}):{bodyBuffer:e,headers:a,applied:n,version:mr}}catch{return{bodyBuffer:e,headers:a,applied:n,version:mr}}}Bo.exports={ANTIGRAVITY_IDE_VERSION:mr,applyAntigravityIdeVersionOverride:Uc,rewriteAntigravityUserAgent:Io}});var xa=F((ap,wo)=>{var{log:Ea,err:rp}=Gt(),_o="http://localhost:20128",Pc=String(process.env.MITM_ROUTER_BASE||_o).trim().replace(/\/+$/,"")||_o,No=process.env.ROUTER_API_KEY,Oc=new Set(["host","content-length","connection","transfer-encoding","content-type","authorization"]);async function Vc(e,t="/v1/chat/completions",a={}){let r={};for(let[s,i]of Object.entries(a))Oc.has(s.toLowerCase())||(r[s]=i);return await fetch(`${Pc}${t}`,{method:"POST",headers:{...r,"Content-Type":"application/json",...No&&{Authorization:`Bearer ${No}`}},body:JSON.stringify(e)})}async function Fc(e,t,a){let r=e.headers.get("content-type")||"application/json",n=e.status||200,s={"Content-Type":r,"Cache-Control":"no-cache",Connection:"keep-alive"};if(r.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(n,s),a&&a.writeHeader(e.status,Object.fromEntries(e.headers)),!e.body){let u=await e.text().catch(()=>"");a&&(a.writeChunk(u),a.end()),t.end(u);return}let i=e.body.getReader(),o=new TextDecoder;for(;;){let{done:u,value:l}=await i.read();if(u){a&&a.end(),t.end();break}a&&a.writeChunk(l),t.write(o.decode(l,{stream:!0}))}}async function Kc(e,t,a,r){let n=e.headers.get("content-type")||"application/json",s={"Content-Type":n,"Cache-Control":"no-cache",Connection:"keep-alive"};if(n.includes("text/event-stream")&&(s["X-Accel-Buffering"]="no"),t.writeHead(200,s),!e.body){t.end(await e.text().catch(()=>""));return}let i=e.body.getReader(),o=new TextDecoder("utf-8",{fatal:!1}),u="";for(;;){let{done:l,value:f}=await i.read();if(l)break;u+=o.decode(f,{stream:!0});let c=u.split(`
26
26
  `);u=c.pop()||"";for(let g of c){let v=g.trim();if(!v||!v.startsWith("data:"))continue;let y=v.slice(5).trim();if(y!=="[DONE]"){process.env.DEBUG_MITM&&Ea(`[SSE in] ${y.slice(0,200)}`);try{let x=JSON.parse(y),S=a(x,r);if(S!=null){let A=Array.isArray(S)?S:[S];for(let B of A){if(process.env.DEBUG_MITM){let b=B.length||B.byteLength||0;Ea(`[write binary frame] (${b}B) first 20B: ${Array.from(B.slice(0,20)).join(",")}`)}t.write(Buffer.from(B))}}}catch{}}}}try{let l=a(null,r);if(l!=null){let f=Array.isArray(l)?l:[l];for(let c of f)t.write(c)}}catch{}t.end()}async function Mc(e,t,a,r){let n={"Content-Type":"application/vnd.amazon.eventstream","Cache-Control":"no-cache",Connection:"keep-alive"};if(t.writeHead(200,n),!e.body){t.end(await e.text().catch(()=>""));return}let s=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!1}),o="";for(;;){let{done:u,value:l}=await s.read();if(u)break;o+=i.decode(l,{stream:!0});let f=o.split(`
27
27
  `);o=f.pop()||"";for(let c of f){let g=c.trim();if(!g||!g.startsWith("data:"))continue;let v=g.slice(5).trim();if(v!=="[DONE]"){process.env.DEBUG_MITM&&Ea(`[SSE in] ${v.slice(0,200)}`);try{let y=JSON.parse(v),x=a(y,r);if(x!=null){let S=Array.isArray(x)?x:[x];for(let A of S){if(process.env.DEBUG_MITM){let B=A.length||A.byteLength||0;Ea(`[write binary frame] (${B}B) first 20B: ${Array.from(A.slice(0,20)).join(",")}`)}t.write(Buffer.from(A))}}}catch{}}}}try{let u=a(null,r);if(u!=null){let l=Array.isArray(u)?u:[u];for(let f of l)t.write(f)}}catch{}t.end()}wo.exports={fetchRouter:Vc,pipeSSE:Fc,pipeTransformedSSE:Kc,pipeTransformedEventStream:Mc}});var Lo=F((np,Ro)=>{var{err:qc,createResponseDumper:Hc}=Gt(),{IS_DEV:Gc}=Er(),{fetchRouter:zc,pipeSSE:Qc}=xa();async function Yc(e,t,a,r){let n=Gc?Hc(e,"intercept-antigravity"):null,s=e.url.includes(":streamGenerateContent");try{let i=JSON.parse(a.toString());i.model&&(i.model=r);let o=await zc(i,"/v1/chat/completions",e.headers);await Qc(o,t,n)}catch(i){qc(`[antigravity] ${i.message}`),n&&(n.writeChunk(`
28
28
  [ERROR] ${i.message}
@@ -36,7 +36,7 @@ Private-MAC: `+B.digest().toHex()+`\r
36
36
  '-WindowStyle','Hidden','-EncodedCommand','${t}'
37
37
  ) -Verb RunAs -Wait -PassThru -WindowStyle Hidden;
38
38
  if ($proc.ExitCode -ne 0) { throw "Elevated command exited with code $($proc.ExitCode)" }
39
- `;return new Promise((r,n)=>{zo(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${$o(a)}`,{windowsHide:!0},(s,i,o)=>{if(s){let u=o||s.message;u.includes("canceled by the user")||u.includes("operation was canceled")?n(new Error("User canceled UAC prompt")):n(new Error(u))}else r(i)})})}jo.exports={isAdmin:Yo,runElevatedPowerShell:Ed,quotePs:$o}});var iu=F((hp,nu)=>{var{exec:fp,spawn:Xo,execSync:Or}=require("child_process"),_e=require("fs"),xd=require("path"),cp=require("os"),{log:Sa,err:Sd}=Gt(),{TOOL_HOSTS:Kt}=Go(),{runElevatedPowerShell:Jo,isAdmin:dp}=Wo();function Zo(e,t,a){let r=`${e}.9router.new`,n=`${e}.9router.bak`;try{_e.writeFileSync(r,a,"utf8");try{_e.unlinkSync(n)}catch{}_e.renameSync(e,n);try{_e.renameSync(r,e)}catch(s){try{_e.renameSync(n,e)}catch{_e.writeFileSync(e,t,"utf8")}throw s}try{_e.unlinkSync(n)}catch{}}finally{try{_e.unlinkSync(r)}catch{}}}var bt=process.platform==="win32",eu=process.platform==="darwin",Ze=bt?xd.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function Ta(){if(bt)return!1;try{return Or("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function tu(){if(bt||!Ta())return!0;try{return Or("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function Td(){return!bt&&Ta()&&!tu()}function Vr(e,t){return new Promise((a,r)=>{let n=Ta(),s=n?Xo("sudo",["-S","sh","-c",e],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):Xo("sh",["-c",e],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),i="",o="";s.stdout.on("data",u=>{i+=u}),s.stderr.on("data",u=>{o+=u}),s.on("close",u=>{u===0?a(i):r(new Error(o||`Exit code ${u}`))}),n&&(s.stdin.write(`${t}
39
+ `;return new Promise((r,n)=>{zo(`powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command ${$o(a)}`,{windowsHide:!0},(s,i,o)=>{if(s){let u=o||s.message;u.includes("canceled by the user")||u.includes("operation was canceled")?n(new Error("User canceled UAC prompt")):n(new Error(u))}else r(i)})})}jo.exports={isAdmin:Yo,runElevatedPowerShell:Ed,quotePs:$o}});var iu=F((hp,nu)=>{var{exec:fp,spawn:Xo,execSync:Or}=require("child_process"),_e=require("fs"),xd=require("path"),cp=require("os"),{log:Sa,err:Sd}=Gt(),{TOOL_HOSTS:Kt}=Go(),{runElevatedPowerShell:Jo,isAdmin:dp}=Wo();function Zo(e,t,a){let r=`${e}.polyrouter.new`,n=`${e}.polyrouter.bak`;try{_e.writeFileSync(r,a,"utf8");try{_e.unlinkSync(n)}catch{}_e.renameSync(e,n);try{_e.renameSync(r,e)}catch(s){try{_e.renameSync(n,e)}catch{_e.writeFileSync(e,t,"utf8")}throw s}try{_e.unlinkSync(n)}catch{}}finally{try{_e.unlinkSync(r)}catch{}}}var bt=process.platform==="win32",eu=process.platform==="darwin",Ze=bt?xd.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function Ta(){if(bt)return!1;try{return Or("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function tu(){if(bt||!Ta())return!0;try{return Or("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function Td(){return!bt&&Ta()&&!tu()}function Vr(e,t){return new Promise((a,r)=>{let n=Ta(),s=n?Xo("sudo",["-S","sh","-c",e],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):Xo("sh",["-c",e],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),i="",o="";s.stdout.on("data",u=>{i+=u}),s.stderr.on("data",u=>{o+=u}),s.on("close",u=>{u===0?a(i):r(new Error(o||`Exit code ${u}`))}),n&&(s.stdin.write(`${t}
40
40
  `),s.stdin.end())})}async function ru(e){bt||(eu?await Vr("dscacheutil -flushcache && killall -HUP mDNSResponder",e):await Vr("resolvectl flush-caches 2>/dev/null || true",e))}function Dn(e=null){try{let t=_e.readFileSync(Ze,"utf8");return e?t.includes(e):Kt.antigravity.every(a=>t.includes(a))}catch{return!1}}function Ad(){try{let e=_e.readFileSync(Ze,"utf8"),t={};for(let[a,r]of Object.entries(Kt))t[a]=r.every(n=>e.includes(n));return t}catch{return Object.fromEntries(Object.keys(Kt).map(e=>[e,!1]))}}async function Id(e,t){let a=Kt[e];if(!a)throw new Error(`Unknown tool: ${e}`);let r=a.filter(n=>!Dn(n));if(r.length===0){Sa(`\u{1F310} DNS ${e}: already active`);return}try{if(bt){let n=_e.readFileSync(Ze,"utf8"),s=n.replace(/[\r\n\s]+$/g,""),i=r.map(u=>`127.0.0.1 ${u}`).join(`\r
41
41
  `),o=`${s}\r
42
42
  ${i}\r
@@ -1,7 +1,7 @@
1
1
  const MAX_EVENT_BYTES = 256 * 1024;
2
2
 
3
3
  export const REALTIME_PATH = "/v1/realtime";
4
- export const REALTIME_PROTOCOL = "9router.realtime.voice.v1";
4
+ export const REALTIME_PROTOCOL = "polyrouter.realtime.voice.v1";
5
5
  // ChatGPT/Codex OAuth accounts use the realtime model exposed by the
6
6
  // reference OAuth bridge. Keep the public API model names as fallbacks.
7
7
  export const DEFAULT_REALTIME_MODEL = "gpt-realtime-2";
@@ -8,10 +8,12 @@ import {
8
8
  } from "./protocol.js";
9
9
  async function authenticateUpgrade(request, host) {
10
10
  const url = new URL(request.url || "/", `http://${host}`);
11
- // The dev server binds to `localhost` on Windows (often IPv6 ::1), while
12
- // 127.0.0.1 may be unreachable. Keep this in-process hop on the same local
13
- // hostname in both dev and production; it never leaves the machine.
14
- const internalHost = host === "0.0.0.0" || host === "::" ? "localhost" : host;
11
+ // Always use 127.0.0.1 for the in-process auth hop — it is reachable
12
+ // regardless of whether the server binds 0.0.0.0, localhost, ::, or ::1.
13
+ // `localhost` is ambiguous on Windows (resolves to IPv6 ::1, unreachable
14
+ // when the server binds IPv4-only 0.0.0.0).
15
+ const internalHost = (host === "0.0.0.0" || host === "::" || host === "localhost" || host === "::1")
16
+ ? "127.0.0.1" : host;
15
17
  const response = await fetch(`http://${internalHost}:${process.env.PORT || 20128}/api/realtime/authorize`, {
16
18
  method: "POST",
17
19
  headers: {
package/cli.js CHANGED
@@ -67,7 +67,7 @@ const { ensureSqliteRuntime, buildEnvWithRuntime } = require("./hooks/sqliteRunt
67
67
  const { ensureTrayRuntime } = require("./hooks/trayRuntime");
68
68
  const args = process.argv.slice(2);
69
69
 
70
- // Subcommands (`9router xai video …`) run against an already-running gateway
70
+ // Subcommands (`polyrouter xai video …`) run against an already-running gateway
71
71
  // and bypass the launcher flow (no runtime self-heal, no server spawn).
72
72
  if (args[0] === "xai" && args[1] === "video") {
73
73
  const { run } = require("./src/cli/commands/xaiVideo");
@@ -80,7 +80,7 @@ if (args[0] === "xai" && args[1] === "video") {
80
80
  return;
81
81
  }
82
82
 
83
- // Self-heal SQLite runtime deps (sql.js + better-sqlite3) into ~/.9router/runtime
83
+ // Self-heal SQLite runtime deps (sql.js + better-sqlite3) into ~/.polyrouter/runtime
84
84
  // so the server can resolve them via NODE_PATH. Best-effort — sql.js is required,
85
85
  // better-sqlite3 is optional. Logs to stderr only on failure.
86
86
  try { ensureSqliteRuntime({ silent: true }); } catch {}
@@ -110,9 +110,9 @@ function getDisplayHost() {
110
110
  return host === DEFAULT_HOST ? "localhost" : host;
111
111
  }
112
112
  const MAX_PORT_ATTEMPTS = 10;
113
- // Identifiers for killAllAppProcesses - only kill 9router specifically
113
+ // Identifiers for killAllAppProcesses - only kill polyrouter specifically
114
114
  const PROCESS_IDENTIFIERS = [
115
- '9router' // Only package name - avoid killing other apps
115
+ 'polyrouter' // Only package name - avoid killing other apps
116
116
  ];
117
117
 
118
118
  // Parse arguments
@@ -188,8 +188,8 @@ function compareVersions(a, b) {
188
188
  // Get app data dir (matches app/src/lib/dataDir.js convention)
189
189
  function getAppDataDir() {
190
190
  return process.platform === "win32"
191
- ? path.join(process.env.APPDATA || "", "9router")
192
- : path.join(os.homedir(), ".9router");
191
+ ? path.join(process.env.APPDATA || "", "polyrouter")
192
+ : path.join(os.homedir(), ".polyrouter");
193
193
  }
194
194
 
195
195
  // Kill PID from file (best-effort, removes file after)
@@ -246,7 +246,7 @@ function killCloudflaredByAppPort(appPort) {
246
246
  return pids;
247
247
  }
248
248
 
249
- // Kill all 9router processes
249
+ // Kill all polyrouter processes
250
250
  function killAllAppProcesses(appPort) {
251
251
  return new Promise((resolve) => {
252
252
  try {
@@ -273,11 +273,11 @@ function killAllAppProcesses(appPort) {
273
273
  });
274
274
  const lines = output.split("\n").slice(1).filter(l => l.trim());
275
275
  lines.forEach(line => {
276
- // Whitelist: real node process running 9router/cli.js, or next-server.
277
- // Avoids killing editors/grep/strace/cursor that just have "9router" in cmdline.
276
+ // Whitelist: real node process running polyrouter/cli.js, or next-server.
277
+ // Avoids killing editors/grep/strace/cursor that just have "polyrouter" in cmdline.
278
278
  const cmd = line.toLowerCase();
279
279
  const isAppProcess =
280
- (cmd.includes("node") && cmd.includes("9router") && (cmd.includes("cli.js") || cmd.includes("\\9router") || cmd.includes("/9router")))
280
+ (cmd.includes("node") && cmd.includes("polyrouter") && (cmd.includes("cli.js") || cmd.includes("\\polyrouter") || cmd.includes("/polyrouter")))
281
281
  || cmd.includes("next-server");
282
282
  if (isAppProcess) {
283
283
  const match = line.match(/^"(\d+)"/);
@@ -299,11 +299,11 @@ function killAllAppProcesses(appPort) {
299
299
  const lines = output.split('\n');
300
300
 
301
301
  lines.forEach(line => {
302
- // Whitelist: real node process running 9router/cli.js, or next-server.
303
- // Avoids killing grep/strace/editors/cursor that incidentally match "9router".
302
+ // Whitelist: real node process running polyrouter/cli.js, or next-server.
303
+ // Avoids killing grep/strace/editors/cursor that incidentally match "polyrouter".
304
304
  const cmd = line.toLowerCase();
305
305
  const isAppProcess =
306
- (cmd.includes("node") && cmd.includes("9router") && (cmd.includes("cli.js") || cmd.includes("/9router")))
306
+ (cmd.includes("node") && cmd.includes("polyrouter") && (cmd.includes("cli.js") || cmd.includes("/polyrouter")))
307
307
  || cmd.includes("next-server");
308
308
  if (isAppProcess) {
309
309
  const parts = line.trim().split(/\s+/);
@@ -774,7 +774,7 @@ function startServer(updatePromise) {
774
774
  process.on("SIGHUP", () => {});
775
775
 
776
776
  console.log(`\nā³ Switching to tray mode... (icon already visible in menu bar)`);
777
- console.log(`šŸ”” 9Router is running in tray (PID: ${process.pid})`);
777
+ console.log(`šŸ”” PolyRouter is running in tray (PID: ${process.pid})`);
778
778
  console.log(` Server: http://${displayHost}:${port}`);
779
779
  console.log(`\nšŸ’” You can close this terminal. Right-click tray icon to quit.\n`);
780
780
 
@@ -793,7 +793,7 @@ function startServer(updatePromise) {
793
793
  });
794
794
  bgProcess.unref();
795
795
 
796
- console.log(`šŸ”” 9Router is now running in background (PID: ${bgProcess.pid})`);
796
+ console.log(`šŸ”” PolyRouter is now running in background (PID: ${bgProcess.pid})`);
797
797
  console.log(` Server: http://${displayHost}:${port}`);
798
798
  console.log(`\nšŸ’” You can close this terminal. Right-click tray icon to quit.\n`);
799
799
 
@@ -838,7 +838,7 @@ function startServer(updatePromise) {
838
838
  if (restartCount >= MAX_RESTARTS) {
839
839
  console.error(`\nāš ļø Server crashed ${MAX_RESTARTS} times. Disabling MIT and restarting...`);
840
840
  try {
841
- const dbPath = path.join(os.homedir(), process.platform === "win32" ? path.join("AppData", "Roaming", "9router", "db.json") : path.join(".9router", "db.json"));
841
+ const dbPath = path.join(os.homedir(), process.platform === "win32" ? path.join("AppData", "Roaming", "polyrouter", "db.json") : path.join(".polyrouter", "db.json"));
842
842
  if (fs.existsSync(dbPath)) {
843
843
  const db = JSON.parse(fs.readFileSync(dbPath, "utf-8"));
844
844
  if (db.settings) db.settings.mitmEnabled = false;
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // Postinstall: warm-up SQLite deps into ~/.9router/runtime so the first
4
- // `9router` start doesn't need network. Failure here is non-fatal —
3
+ // Postinstall: warm-up SQLite deps into ~/.polyrouter/runtime so the first
4
+ // `polyrouter` start doesn't need network. Failure here is non-fatal —
5
5
  // cli.js will retry at runtime if anything is missing.
6
6
  const { ensureSqliteRuntime } = require("./sqliteRuntime");
7
7
  const { ensureTrayRuntime } = require("./trayRuntime");
8
8
 
9
9
  try {
10
10
  ensureSqliteRuntime({ silent: false });
11
- console.log("[9router] runtime SQLite deps ready");
11
+ console.log("[polyrouter] runtime SQLite deps ready");
12
12
  } catch (e) {
13
- console.warn(`[9router] runtime warm-up skipped: ${e.message}`);
13
+ console.warn(`[polyrouter] runtime warm-up skipped: ${e.message}`);
14
14
  }
15
15
 
16
16
  try {
17
17
  ensureTrayRuntime({ silent: false });
18
18
  } catch (e) {
19
- console.warn(`[9router] tray runtime skipped: ${e.message}`);
19
+ console.warn(`[polyrouter] tray runtime skipped: ${e.message}`);
20
20
  }
21
21
 
22
22
  process.exit(0);
@@ -12,8 +12,8 @@ const SQL_JS_VERSION = "1.14.1";
12
12
  function getDataDir() {
13
13
  if (process.env.DATA_DIR) return process.env.DATA_DIR;
14
14
  return process.platform === "win32"
15
- ? path.join(process.env.APPDATA || os.homedir(), "9router")
16
- : path.join(os.homedir(), ".9router");
15
+ ? path.join(process.env.APPDATA || os.homedir(), "polyrouter")
16
+ : path.join(os.homedir(), ".polyrouter");
17
17
  }
18
18
 
19
19
  function getRuntimeDir() {
@@ -32,10 +32,10 @@ function ensureRuntimeDir() {
32
32
  const pkgPath = path.join(dir, "package.json");
33
33
  if (!fs.existsSync(pkgPath)) {
34
34
  fs.writeFileSync(pkgPath, JSON.stringify({
35
- name: "9router-runtime",
35
+ name: "polyrouter-runtime",
36
36
  version: "1.0.0",
37
37
  private: true,
38
- description: "User-writable runtime deps for 9router (better-sqlite3 native binary)",
38
+ description: "User-writable runtime deps for polyrouter (better-sqlite3 native binary)",
39
39
  }, null, 2));
40
40
  }
41
41
  return dir;
@@ -23,8 +23,8 @@ function hasSystray() {
23
23
  // On Windows it was an AV false-positive risk; on macOS/Linux its bundled
24
24
  // binary is broken on modern OS versions.
25
25
  function cleanupLegacySystray({ silent = false } = {}) {
26
- // 1) Runtime dir: ~/.9router/runtime/node_modules/systray (or %APPDATA% on Win)
27
- // 2) npm global nested: <npm_prefix>/node_modules/9router/node_modules/systray
26
+ // 1) Runtime dir: ~/.polyrouter/runtime/node_modules/systray (or %APPDATA% on Win)
27
+ // 2) npm global nested: <npm_prefix>/node_modules/polyrouter/node_modules/systray
28
28
  // __dirname here = <pkg root>/hooks → up 1 = pkg root
29
29
  const targets = [
30
30
  path.join(getRuntimeNodeModules(), LEGACY_SYSTRAY_PKG),
@@ -34,9 +34,9 @@ function cleanupLegacySystray({ silent = false } = {}) {
34
34
  if (fs.existsSync(dir)) {
35
35
  try {
36
36
  fs.rmSync(dir, { recursive: true, force: true });
37
- if (!silent) console.log(`[9router][runtime] removed legacy systray: ${dir}`);
37
+ if (!silent) console.log(`[polyrouter][runtime] removed legacy systray: ${dir}`);
38
38
  } catch (e) {
39
- if (!silent) console.warn(`[9router][runtime] failed to remove ${dir}: ${e.message}`);
39
+ if (!silent) console.warn(`[polyrouter][runtime] failed to remove ${dir}: ${e.message}`);
40
40
  }
41
41
  }
42
42
  }
@@ -53,7 +53,7 @@ function chmodSystrayBin({ silent = false } = {}) {
53
53
  try {
54
54
  fs.chmodSync(binPath, 0o755);
55
55
  } catch (e) {
56
- if (!silent) console.warn(`[9router][runtime] chmod tray bin failed: ${e.message}`);
56
+ if (!silent) console.warn(`[polyrouter][runtime] chmod tray bin failed: ${e.message}`);
57
57
  }
58
58
  }
59
59
 
@@ -63,7 +63,7 @@ function ensureRuntimeDir() {
63
63
  const pkgPath = path.join(dir, "package.json");
64
64
  if (!fs.existsSync(pkgPath)) {
65
65
  fs.writeFileSync(pkgPath, JSON.stringify({
66
- name: "9router-runtime",
66
+ name: "polyrouter-runtime",
67
67
  version: "1.0.0",
68
68
  private: true
69
69
  }, null, 2));