9router 0.3.48 → 0.3.50

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 (376) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +41 -41
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/_global-error.html +2 -2
  21. package/app/.next/server/app/_global-error.rsc +1 -1
  22. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  23. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  24. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  25. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  26. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  27. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  28. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/_not-found.html +1 -1
  30. package/app/.next/server/app/_not-found.rsc +3 -3
  31. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  32. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  33. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  34. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  35. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  36. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  37. package/app/.next/server/app/api/auth/login/route.js +1 -1
  38. package/app/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  39. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  42. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  43. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  44. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/cli-tools/copilot-settings/route_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  47. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/locale/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/models/route.js +1 -1
  61. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  66. package/app/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  77. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  80. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  81. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  85. package/app/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/providers/route.js +1 -1
  88. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  91. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/translator/console-logs/route.js +1 -1
  102. package/app/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  104. package/app/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  107. package/app/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/translator/translate/route.js +1 -1
  110. package/app/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  111. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/tunnel/disable/route.js +1 -1
  113. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/tunnel/enable/route.js +1 -1
  115. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/tunnel/status/route.js +1 -1
  117. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  119. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  120. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/usage/providers/route.js +1 -1
  124. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/usage/stream/route.js +1 -1
  129. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  131. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  132. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  134. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  137. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  138. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  141. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  142. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/v1/models/route.js +1 -1
  144. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  146. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  147. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  150. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/v1beta/models/route.js +1 -1
  153. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/version/route.js +1 -1
  155. package/app/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/callback.html +1 -1
  158. package/app/.next/server/app/callback.rsc +3 -3
  159. package/app/.next/server/app/callback.segments/_full.segment.rsc +3 -3
  160. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  161. package/app/.next/server/app/callback.segments/_index.segment.rsc +3 -3
  162. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  163. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  164. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  165. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  166. package/app/.next/server/app/dashboard/cli-tools.rsc +5 -5
  167. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  168. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  169. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  170. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  171. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +5 -5
  172. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  173. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +3 -3
  174. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  175. package/app/.next/server/app/dashboard/combos.html +1 -1
  176. package/app/.next/server/app/dashboard/combos.rsc +5 -5
  177. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  178. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  179. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  180. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  181. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +5 -5
  182. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  183. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +3 -3
  184. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  185. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  186. package/app/.next/server/app/dashboard/endpoint.rsc +5 -5
  187. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  188. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  189. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  190. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  191. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +5 -5
  192. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  193. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +3 -3
  194. package/app/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  195. package/app/.next/server/app/dashboard/mitm.html +1 -1
  196. package/app/.next/server/app/dashboard/mitm.rsc +5 -5
  197. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  198. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  199. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  200. package/app/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  201. package/app/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +5 -5
  202. package/app/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  203. package/app/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +3 -3
  204. package/app/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  205. package/app/.next/server/app/dashboard/profile.html +1 -1
  206. package/app/.next/server/app/dashboard/profile.rsc +5 -5
  207. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  208. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  209. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  210. package/app/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  211. package/app/.next/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  212. package/app/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  213. package/app/.next/server/app/dashboard/profile.segments/_index.segment.rsc +3 -3
  214. package/app/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  215. package/app/.next/server/app/dashboard/providers/new.html +1 -1
  216. package/app/.next/server/app/dashboard/providers/new.rsc +5 -5
  217. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  218. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  219. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  220. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  221. package/app/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  222. package/app/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +5 -5
  223. package/app/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  224. package/app/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +3 -3
  225. package/app/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  226. package/app/.next/server/app/dashboard/providers.html +1 -1
  227. package/app/.next/server/app/dashboard/providers.rsc +5 -5
  228. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  229. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  230. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  231. package/app/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  232. package/app/.next/server/app/dashboard/providers.segments/_full.segment.rsc +5 -5
  233. package/app/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  234. package/app/.next/server/app/dashboard/providers.segments/_index.segment.rsc +3 -3
  235. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  236. package/app/.next/server/app/dashboard/proxy-pools.html +1 -1
  237. package/app/.next/server/app/dashboard/proxy-pools.rsc +5 -5
  238. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  239. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  240. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/app/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/app/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +5 -5
  243. package/app/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  244. package/app/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +3 -3
  245. package/app/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  246. package/app/.next/server/app/dashboard/quota.html +2 -2
  247. package/app/.next/server/app/dashboard/quota.rsc +6 -6
  248. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  249. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  250. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  251. package/app/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  252. package/app/.next/server/app/dashboard/quota.segments/_full.segment.rsc +6 -6
  253. package/app/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  254. package/app/.next/server/app/dashboard/quota.segments/_index.segment.rsc +3 -3
  255. package/app/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  256. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  257. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  258. package/app/.next/server/app/dashboard/settings/pricing.rsc +3 -3
  259. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +3 -3
  260. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  261. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +3 -3
  262. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  263. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  264. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  265. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  266. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  267. package/app/.next/server/app/dashboard/translator.html +1 -1
  268. package/app/.next/server/app/dashboard/translator.rsc +5 -5
  269. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  270. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  271. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  272. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  273. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +5 -5
  274. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  275. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +3 -3
  276. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  277. package/app/.next/server/app/dashboard/usage.html +1 -1
  278. package/app/.next/server/app/dashboard/usage.rsc +5 -5
  279. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  280. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  281. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  282. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  283. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +5 -5
  284. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  285. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +3 -3
  286. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  287. package/app/.next/server/app/dashboard.html +1 -1
  288. package/app/.next/server/app/dashboard.rsc +5 -5
  289. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  290. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  291. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  292. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +5 -5
  293. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  294. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +3 -3
  295. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  296. package/app/.next/server/app/index.html +1 -1
  297. package/app/.next/server/app/index.rsc +3 -3
  298. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  299. package/app/.next/server/app/index.segments/_full.segment.rsc +3 -3
  300. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  301. package/app/.next/server/app/index.segments/_index.segment.rsc +3 -3
  302. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  303. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  304. package/app/.next/server/app/landing.html +1 -1
  305. package/app/.next/server/app/landing.rsc +3 -3
  306. package/app/.next/server/app/landing.segments/_full.segment.rsc +3 -3
  307. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  308. package/app/.next/server/app/landing.segments/_index.segment.rsc +3 -3
  309. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  310. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  311. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  312. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  313. package/app/.next/server/app/login.html +1 -1
  314. package/app/.next/server/app/login.rsc +4 -4
  315. package/app/.next/server/app/login.segments/_full.segment.rsc +4 -4
  316. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  317. package/app/.next/server/app/login.segments/_index.segment.rsc +3 -3
  318. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  319. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  320. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  321. package/app/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  322. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  323. package/app/.next/server/app-paths-manifest.json +41 -41
  324. package/app/.next/server/chunks/1114.js +1 -1
  325. package/app/.next/server/chunks/1424.js +1 -1
  326. package/app/.next/server/chunks/289.js +1 -1
  327. package/app/.next/server/chunks/318.js +6 -6
  328. package/app/.next/server/chunks/3832.js +1 -1
  329. package/app/.next/server/chunks/4292.js +1 -0
  330. package/app/.next/server/chunks/4989.js +2 -2
  331. package/app/.next/server/chunks/5297.js +1 -1
  332. package/app/.next/server/chunks/5833.js +1 -0
  333. package/app/.next/server/chunks/6182.js +4 -4
  334. package/app/.next/server/chunks/8590.js +1 -1
  335. package/app/.next/server/chunks/8895.js +3 -3
  336. package/app/.next/server/chunks/9201.js +1 -1
  337. package/app/.next/server/chunks/9609.js +1 -1
  338. package/app/.next/server/pages/404.html +1 -1
  339. package/app/.next/server/pages/500.html +2 -2
  340. package/app/.next/server/server-reference-manifest.js +1 -1
  341. package/app/.next/server/server-reference-manifest.json +1 -1
  342. package/app/.next/static/chunks/2652-378fd4fa14847021.js +1 -0
  343. package/app/.next/static/chunks/{5497-e51ea33e5c739a33.js → 5497-a9786b3cb8e5e696.js} +1 -1
  344. package/app/.next/static/chunks/{619-4c970716a5102dc3.js → 619-c4c101a6a78feeb4.js} +1 -1
  345. package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-04d1ffb5358d8fb2.js → page-4ebc425afc0a221a.js} +1 -1
  346. package/app/.next/static/chunks/app/{layout-8f69df46423ca2cf.js → layout-23ec5f07962f68a0.js} +1 -1
  347. package/app/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  348. package/app/node_modules/better-sqlite3/lib/database.js +90 -0
  349. package/app/node_modules/better-sqlite3/lib/index.js +3 -0
  350. package/app/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
  351. package/app/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
  352. package/app/node_modules/better-sqlite3/lib/methods/function.js +31 -0
  353. package/app/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
  354. package/app/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
  355. package/app/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
  356. package/app/node_modules/better-sqlite3/lib/methods/table.js +189 -0
  357. package/app/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
  358. package/app/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
  359. package/app/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
  360. package/app/node_modules/better-sqlite3/lib/util.js +12 -0
  361. package/app/node_modules/better-sqlite3/package.json +59 -0
  362. package/app/node_modules/bindings/bindings.js +221 -0
  363. package/app/node_modules/bindings/package.json +28 -0
  364. package/app/node_modules/file-uri-to-path/index.js +66 -0
  365. package/app/node_modules/file-uri-to-path/package.json +32 -0
  366. package/app/package.json +2 -1
  367. package/app/public/providers/vertex-partner.png +0 -0
  368. package/app/public/providers/vertex.png +0 -0
  369. package/app/src/mitm/manager.js +59 -0
  370. package/app/src/mitm/server.js +1 -1
  371. package/app/src/mitm/{server copy.js → server2.js} +188 -35
  372. package/cli.js +97 -56
  373. package/package.json +1 -1
  374. package/app/.next/static/chunks/2652-67b8cc047a3efcc9.js +0 -1
  375. /package/app/.next/static/{eVGIe8IcaLlfBhBZM9a5U → TmbP5kTzKgsDGgHcZeGnv}/_buildManifest.js +0 -0
  376. /package/app/.next/static/{eVGIe8IcaLlfBhBZM9a5U → TmbP5kTzKgsDGgHcZeGnv}/_ssgManifest.js +0 -0
package/cli.js CHANGED
@@ -123,17 +123,17 @@ function killAllAppProcesses() {
123
123
  if (platform === "win32") {
124
124
  // Windows: use tasklist + findstr (works on all Windows versions)
125
125
  try {
126
- const output = execSync('tasklist /FO CSV /V 2>nul | findstr /I "node"', {
126
+ const output = execSync('tasklist /FO CSV /V 2>nul | findstr /I "node"', {
127
127
  encoding: 'utf8',
128
128
  shell: true,
129
129
  windowsHide: true,
130
130
  timeout: 5000
131
131
  });
132
132
  const lines = output.split('\n').filter(l => l.trim());
133
-
133
+
134
134
  lines.forEach(line => {
135
- const isAppProcess = line.toLowerCase().includes("9router") ||
136
- line.toLowerCase().includes("next-server");
135
+ const isAppProcess = line.toLowerCase().includes("9router") ||
136
+ line.toLowerCase().includes("next-server");
137
137
  if (isAppProcess) {
138
138
  // CSV format: "name","pid",...
139
139
  const match = line.match(/"node\.exe","(\d+)"/i);
@@ -148,12 +148,12 @@ function killAllAppProcesses() {
148
148
  } else {
149
149
  // macOS/Linux: use ps to find all matching processes
150
150
  try {
151
- const output = execSync('ps aux 2>/dev/null', {
151
+ const output = execSync('ps aux 2>/dev/null', {
152
152
  encoding: 'utf8',
153
153
  timeout: 5000
154
154
  });
155
155
  const lines = output.split('\n');
156
-
156
+
157
157
  lines.forEach(line => {
158
158
  const isAppProcess = line.includes("9router") || line.includes("next-server");
159
159
  if (isAppProcess) {
@@ -182,7 +182,7 @@ function killAllAppProcesses() {
182
182
  // Process already dead or can't kill - continue
183
183
  }
184
184
  });
185
-
185
+
186
186
  // Wait for processes to fully terminate
187
187
  setTimeout(() => resolve(), 1000);
188
188
  } else {
@@ -204,11 +204,11 @@ function killProcessOnPort(port) {
204
204
 
205
205
  if (platform === "win32") {
206
206
  try {
207
- const output = execSync(`netstat -ano | findstr :${port}`, {
208
- encoding: 'utf8',
207
+ const output = execSync(`netstat -ano | findstr :${port}`, {
208
+ encoding: 'utf8',
209
209
  shell: true,
210
210
  windowsHide: true,
211
- timeout: 5000
211
+ timeout: 5000
212
212
  }).trim();
213
213
  const lines = output.split('\n').filter(l => l.includes('LISTENING'));
214
214
  if (lines.length > 0) {
@@ -221,9 +221,9 @@ function killProcessOnPort(port) {
221
221
  } else {
222
222
  // macOS/Linux
223
223
  try {
224
- const pidOutput = execSync(`lsof -ti:${port}`, {
225
- encoding: 'utf8',
226
- stdio: ['pipe', 'pipe', 'ignore']
224
+ const pidOutput = execSync(`lsof -ti:${port}`, {
225
+ encoding: 'utf8',
226
+ stdio: ['pipe', 'pipe', 'ignore']
227
227
  }).trim();
228
228
  if (pidOutput) {
229
229
  pid = pidOutput.split('\n')[0];
@@ -250,12 +250,12 @@ function isRestrictedEnvironment() {
250
250
  if (process.env.CODESPACES === "true" || process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN) {
251
251
  return "GitHub Codespaces";
252
252
  }
253
-
253
+
254
254
  // Check for Docker
255
255
  if (fs.existsSync("/.dockerenv") || (fs.existsSync("/proc/1/cgroup") && fs.readFileSync("/proc/1/cgroup", "utf8").includes("docker"))) {
256
256
  return "Docker";
257
257
  }
258
-
258
+
259
259
  return null;
260
260
  }
261
261
 
@@ -380,7 +380,7 @@ fi
380
380
  function openBrowser(url) {
381
381
  const platform = process.platform;
382
382
  let cmd;
383
-
383
+
384
384
  if (platform === "darwin") {
385
385
  cmd = `open "${url}"`;
386
386
  } else if (platform === "win32") {
@@ -388,7 +388,7 @@ function openBrowser(url) {
388
388
  } else {
389
389
  cmd = `xdg-open "${url}"`;
390
390
  }
391
-
391
+
392
392
  exec(cmd, (err) => {
393
393
  if (err) {
394
394
  console.log(`Open browser manually: ${url}`);
@@ -420,11 +420,11 @@ async function showInterfaceMenu(latestVersion) {
420
420
  const { selectMenu } = require("./src/cli/utils/input");
421
421
  const { clearScreen } = require("./src/cli/utils/display");
422
422
  const { getEndpoint } = require("./src/cli/utils/endpoint");
423
-
423
+
424
424
  clearScreen();
425
-
425
+
426
426
  const displayHost = host === DEFAULT_HOST ? "localhost" : host;
427
-
427
+
428
428
  // Detect tunnel/local mode for server URL display
429
429
  let serverUrl;
430
430
  try {
@@ -433,26 +433,26 @@ async function showInterfaceMenu(latestVersion) {
433
433
  } catch (e) {
434
434
  serverUrl = `http://${displayHost}:${port}`;
435
435
  }
436
-
436
+
437
437
  const subtitle = `🚀 Server: \x1b[32m${serverUrl}\x1b[0m`;
438
-
438
+
439
439
  const menuItems = [];
440
-
440
+
441
441
  if (latestVersion) {
442
442
  menuItems.push({ label: `Update to v${latestVersion} (current: v${pkg.version})`, icon: "⬆" });
443
443
  }
444
-
444
+
445
445
  menuItems.push(
446
446
  { label: "Web UI (Open in Browser)", icon: "🌐" },
447
447
  { label: "Terminal UI (Interactive CLI)", icon: "💻" },
448
448
  { label: "Hide to Tray (Background)", icon: "🔔" },
449
449
  { label: "Exit", icon: "🚪" }
450
450
  );
451
-
451
+
452
452
  const selected = await selectMenu(`Choose Interface (v${pkg.version})`, menuItems, 0, subtitle);
453
-
453
+
454
454
  const offset = latestVersion ? 1 : 0;
455
-
455
+
456
456
  if (latestVersion && selected === 0) return "update";
457
457
  if (selected === offset) return "web";
458
458
  if (selected === offset + 1) return "terminal";
@@ -460,20 +460,31 @@ async function showInterfaceMenu(latestVersion) {
460
460
  return "exit";
461
461
  }
462
462
 
463
+ const MAX_RESTARTS = 5;
464
+ const RESTART_RESET_MS = 30000; // Reset counter if alive > 30s
465
+
463
466
  function startServer(latestVersion) {
464
467
  const displayHost = host === DEFAULT_HOST ? "localhost" : host;
465
468
  const url = `http://${displayHost}:${port}/dashboard`;
466
469
 
467
- const server = spawn(RUNTIME, [serverPath], {
468
- cwd: standaloneDir,
469
- stdio: showLog ? "inherit" : "ignore",
470
- detached: true,
471
- env: {
472
- ...process.env,
473
- PORT: port.toString(),
474
- HOSTNAME: host
475
- }
476
- });
470
+ let restartCount = 0;
471
+ let serverStartTime = Date.now();
472
+
473
+ function spawnServer() {
474
+ serverStartTime = Date.now();
475
+ return spawn(RUNTIME, [serverPath], {
476
+ cwd: standaloneDir,
477
+ stdio: showLog ? "inherit" : "ignore",
478
+ detached: true,
479
+ env: {
480
+ ...process.env,
481
+ PORT: port.toString(),
482
+ HOSTNAME: host
483
+ }
484
+ });
485
+ }
486
+
487
+ let server = spawnServer();
477
488
 
478
489
  // Cleanup function - force kill server process
479
490
  let isCleaningUp = false;
@@ -485,14 +496,14 @@ function startServer(latestVersion) {
485
496
  try {
486
497
  const { killTray } = require("./src/cli/tray/tray");
487
498
  killTray();
488
- } catch (e) {}
499
+ } catch (e) { }
489
500
  // Kill server process directly
490
501
  if (server.pid) {
491
502
  process.kill(server.pid, "SIGKILL");
492
503
  }
493
504
  // Also try to kill process group
494
505
  process.kill(-server.pid, "SIGKILL");
495
- } catch (e) {}
506
+ } catch (e) { }
496
507
  }
497
508
 
498
509
  // Suppress all errors during shutdown (systray lib throws JSON parse errors)
@@ -546,13 +557,13 @@ function startServer(latestVersion) {
546
557
  if (trayMode) {
547
558
  console.log(`\n🚀 ${pkg.name} v${pkg.version}`);
548
559
  console.log(`Server: http://${displayHost}:${port}`);
549
-
560
+
550
561
  setTimeout(() => {
551
562
  initTrayIcon();
552
563
  console.log("\n💡 Router is now running in system tray. Close this terminal if you want.");
553
564
  console.log(" Right-click tray icon to open dashboard or quit.\n");
554
565
  }, 2000);
555
-
566
+
556
567
  return;
557
568
  }
558
569
 
@@ -560,11 +571,11 @@ function startServer(latestVersion) {
560
571
  setTimeout(async () => {
561
572
  // Start tray icon alongside TUI
562
573
  initTrayIcon();
563
-
574
+
564
575
  try {
565
576
  while (true) {
566
577
  const choice = await showInterfaceMenu(latestVersion);
567
-
578
+
568
579
  if (choice === "update") {
569
580
  cleanup();
570
581
  performUpdate();
@@ -583,7 +594,7 @@ function startServer(latestVersion) {
583
594
  // Hide to tray - spawn detached background process
584
595
  const { clearScreen } = require("./src/cli/utils/display");
585
596
  clearScreen();
586
-
597
+
587
598
  // Enable auto startup on OS boot
588
599
  try {
589
600
  const { enableAutoStart } = require("./src/cli/tray/autostart");
@@ -591,8 +602,8 @@ function startServer(latestVersion) {
591
602
  if (enabled) {
592
603
  console.log("✅ Auto-start enabled (will run on OS boot)");
593
604
  }
594
- } catch (e) {}
595
-
605
+ } catch (e) { }
606
+
596
607
  // Spawn new detached process with --tray flag
597
608
  const bgProcess = spawn(process.execPath, [__filename, "--tray", "--skip-update", "-p", port.toString()], {
598
609
  detached: true,
@@ -600,13 +611,13 @@ function startServer(latestVersion) {
600
611
  env: { ...process.env }
601
612
  });
602
613
  bgProcess.unref();
603
-
614
+
604
615
  console.log(`\n🔔 9Router is now running in background (PID: ${bgProcess.pid})`);
605
616
  console.log(` Server: http://${displayHost}:${port}`);
606
617
  console.log(`\n💡 You can close this terminal. Right-click tray icon to:`);
607
618
  console.log(` • Open Dashboard`);
608
619
  console.log(` • Quit\n`);
609
-
620
+
610
621
  // Exit current process - background process takes over
611
622
  cleanup();
612
623
  process.exit(0);
@@ -624,13 +635,43 @@ function startServer(latestVersion) {
624
635
  }
625
636
  }, 3000);
626
637
 
627
- server.on("error", (err) => {
628
- console.error("Failed to start server:", err.message);
629
- cleanup();
630
- process.exit(1);
631
- });
638
+ function attachServerEvents() {
639
+ server.on("error", (err) => {
640
+ console.error("Failed to start server:", err.message);
641
+ if (!isShuttingDown) tryRestart();
642
+ else { cleanup(); process.exit(1); }
643
+ });
632
644
 
633
- server.on("close", (code) => {
634
- process.exit(code || 0);
635
- });
645
+ server.on("close", (code) => {
646
+ if (isShuttingDown || code === 0) {
647
+ process.exit(code || 0);
648
+ return;
649
+ }
650
+ tryRestart(code);
651
+ });
652
+ }
653
+
654
+ function tryRestart(code) {
655
+ const aliveMs = Date.now() - serverStartTime;
656
+ // Reset counter if last run was stable
657
+ if (aliveMs >= RESTART_RESET_MS) restartCount = 0;
658
+
659
+ if (restartCount >= MAX_RESTARTS) {
660
+ console.error(`\n❌ Server crashed ${MAX_RESTARTS} times. Giving up.`);
661
+ cleanup();
662
+ process.exit(1);
663
+ return;
664
+ }
665
+
666
+ restartCount++;
667
+ const delay = Math.min(1000 * restartCount, 10000);
668
+ console.error(`\n⚠️ Server exited (code=${code ?? "unknown"}). Restarting in ${delay / 1000}s... (${restartCount}/${MAX_RESTARTS})`);
669
+
670
+ setTimeout(() => {
671
+ server = spawnServer();
672
+ attachServerEvents();
673
+ }, delay);
674
+ }
675
+
676
+ attachServerEvents();
636
677
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9router",
3
- "version": "0.3.48",
3
+ "version": "0.3.50",
4
4
  "description": "9Router CLI - Start and manage 9Router server",
5
5
  "bin": {
6
6
  "9router": "./cli.js"
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2652],{45564:(e,i,a)=>{a.d(i,{Xg:()=>l,vq:()=>s,KC:()=>r});var n=a(54642);let o={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"},t="https://api.kimi.com/coding/v1/messages",m={claude:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.63 (external, cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.3.0","X-Stainless-Package-Version":"0.74.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":function(){switch((0,n.arch)()){case"x64":return"x64";case"arm64":return"arm64";case"ia32":return"x86";default:return`other::${(0,n.arch)()}`}}(),"X-Stainless-Os":function(){switch((0,n.platform)()){case"darwin":return"MacOS";case"win32":return"Windows";case"linux":return"Linux";case"freebsd":return"FreeBSD";default:return`Other::${(0,n.platform)()}`}}(),"X-Stainless-Timeout":"600"},clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",tokenUrl:"https://api.anthropic.com/v1/oauth/token"},gemini:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},"gemini-cli":{baseUrl:"https://cloudcode-pa.googleapis.com/v1internal",format:"gemini-cli",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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"},codex:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",headers:{originator:"codex-cli","User-Agent":"codex-cli/1.0.18 (macOS; arm64)"},clientId:"app_EMoamEEZ73f0CkXaXp7hrann",clientSecret:"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",tokenUrl:"https://auth.openai.com/oauth/token"},qwen:{baseUrl:"https://portal.qwen.ai/v1/chat/completions",format:"openai",headers:{"User-Agent":"google-api-nodejs-client/9.15.1","X-Goog-Api-Client":"gl-node/22.17.0"},clientId:"f0304373b74a44d2b584a3fb70ca9e56",tokenUrl:"https://chat.qwen.ai/api/v1/oauth2/token",authUrl:"https://chat.qwen.ai/api/v1/oauth2/device/code"},iflow:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",format:"openai",headers:{"User-Agent":"iFlow-Cli"},clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",tokenUrl:"https://iflow.cn/oauth/token",authUrl:"https://iflow.cn/oauth"},antigravity:{baseUrls:["https://daily-cloudcode-pa.googleapis.com","https://cloudcode-pa.googleapis.com"],format:"antigravity",headers:{"User-Agent":`antigravity/1.104.0 ${(0,n.platform)()}/${(0,n.arch)()}`},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},openrouter:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},openai:{baseUrl:"https://api.openai.com/v1/chat/completions",format:"openai"},glm:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",headers:{...o}},"glm-cn":{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",format:"openai",headers:{}},kimi:{baseUrl:t,format:"claude",headers:{...o}},minimax:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",headers:{...o}},"minimax-cn":{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",headers:{...o}},alicode:{baseUrl:"https://coding.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},"alicode-intl":{baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1/chat/completions",format:"openai",headers:{}},github:{baseUrl:"https://api.githubcopilot.com/chat/completions",responsesUrl:"https://api.githubcopilot.com/responses",format:"openai",headers:{"copilot-integration-id":"vscode-chat","editor-version":"vscode/1.110.0","editor-plugin-version":"copilot-chat/0.38.0","user-agent":"GitHubCopilotChat/0.38.0","openai-intent":"conversation-panel","x-github-api-version":"2025-04-01","x-vscode-user-agent-library-version":"electron-fetch","X-Initiator":"user",Accept:"application/json","Content-Type":"application/json"}},kiro:{baseUrl:"https://codewhisperer.us-east-1.amazonaws.com/generateAssistantResponse",format:"kiro",headers:{"Content-Type":"application/json",Accept:"application/vnd.amazon.eventstream","X-Amz-Target":"AmazonCodeWhispererStreamingService.GenerateAssistantResponse","User-Agent":"AWS-SDK-JS/3.0.0 kiro-ide/1.0.0","X-Amz-User-Agent":"aws-sdk-js/3.0.0 kiro-ide/1.0.0"},tokenUrl:"https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken",authUrl:"https://prod.us-east-1.auth.desktop.kiro.dev"},cursor:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"1.1.3"},"kimi-coding":{baseUrl:t,format:"claude",headers:{...o},clientId:"17e5f671-d194-4dfb-9706-5516cb48c098",tokenUrl:"https://auth.kimi.com/api/oauth/token",refreshUrl:"https://auth.kimi.com/api/oauth/token"},kilocode:{baseUrl:"https://api.kilo.ai/api/openrouter/chat/completions",format:"openai",headers:{}},cline:{baseUrl:"https://api.cline.bot/api/v1/chat/completions",format:"openai",headers:{"HTTP-Referer":"https://cline.bot","X-Title":"Cline"},tokenUrl:"https://api.cline.bot/api/v1/auth/token",refreshUrl:"https://api.cline.bot/api/v1/auth/refresh"},nvidia:{baseUrl:"https://integrate.api.nvidia.com/v1/chat/completions",format:"openai"},anthropic:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",headers:{...o}},deepseek:{baseUrl:"https://api.deepseek.com/chat/completions",format:"openai"},groq:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",format:"openai"},xai:{baseUrl:"https://api.x.ai/v1/chat/completions",format:"openai"},mistral:{baseUrl:"https://api.mistral.ai/v1/chat/completions",format:"openai"},perplexity:{baseUrl:"https://api.perplexity.ai/chat/completions",format:"openai"},together:{baseUrl:"https://api.together.xyz/v1/chat/completions",format:"openai"},fireworks:{baseUrl:"https://api.fireworks.ai/inference/v1/chat/completions",format:"openai"},cerebras:{baseUrl:"https://api.cerebras.ai/v1/chat/completions",format:"openai"},cohere:{baseUrl:"https://api.cohere.ai/v1/chat/completions",format:"openai"},nebius:{baseUrl:"https://api.studio.nebius.ai/v1/chat/completions",format:"openai"},siliconflow:{baseUrl:"https://api.siliconflow.cn/v1/chat/completions",format:"openai"},hyperbolic:{baseUrl:"https://api.hyperbolic.xyz/v1/chat/completions",format:"openai"},deepgram:{baseUrl:"https://api.deepgram.com/v1/listen",format:"openai"},assemblyai:{baseUrl:"https://api.assemblyai.com/v1/audio/transcriptions",format:"openai"},nanobanana:{baseUrl:"https://api.nanobananaapi.ai/v1/chat/completions",format:"openai"},chutes:{baseUrl:"https://llm.chutes.ai/v1/chat/completions",format:"openai"},ollama:{baseUrl:"https://ollama.com/api/chat",format:"ollama"},"ollama-local":{baseUrl:"http://localhost:11434/api/chat",format:"ollama"}},s={cc:[{id:"claude-opus-4-6",name:"Claude Opus 4.6"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-5-20251101",name:"Claude 4.5 Opus"},{id:"claude-sonnet-4-5-20250929",name:"Claude 4.5 Sonnet"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],cx:[{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"},{id:"gpt-5.3-codex-xhigh",name:"GPT 5.3 Codex (xHigh)"},{id:"gpt-5.3-codex-high",name:"GPT 5.3 Codex (High)"},{id:"gpt-5.3-codex-low",name:"GPT 5.3 Codex (Low)"},{id:"gpt-5.3-codex-none",name:"GPT 5.3 Codex (None)"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini"},{id:"gpt-5.1-codex-mini-high",name:"GPT 5.1 Codex Mini (High)"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max"},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex"},{id:"gpt-5.1",name:"GPT 5.1"},{id:"gpt-5-codex",name:"GPT 5 Codex"},{id:"gpt-5-codex-mini",name:"GPT 5 Codex Mini"}],gc:[{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"}],qw:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-coder-flash",name:"Qwen3 Coder Flash"},{id:"vision-model",name:"Qwen3 Vision Model"},{id:"coder-model",name:"Qwen3.5 Coder Model"}],if:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],ag:[{id:"gemini-3.1-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3.1-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium"}],gh:[{id:"gpt-3.5-turbo",name:"GPT-3.5 Turbo"},{id:"gpt-4",name:"GPT-4"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o mini"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-codex",name:"GPT-5 Codex"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex"},{id:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini"},{id:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.2-codex",name:"GPT-5.2 Codex"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"gpt-5.4",name:"GPT-5.4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"claude-opus-4.1",name:"Claude Opus 4.1"},{id:"claude-opus-4.5",name:"Claude Opus 4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4"},{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"claude-opus-4.6",name:"Claude Opus 4.6"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash"},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro"},{id:"grok-code-fast-1",name:"Grok Code Fast 1"},{id:"oswe-vscode-prime",name:"Raptor Mini"}],kr:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2"},{id:"deepseek-3.1",name:"DeepSeek 3.1"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"}],cu:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],kmc:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],kc:[{id:"anthropic/claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"anthropic/claude-opus-4-20250514",name:"Claude Opus 4"},{id:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"openai/gpt-4.1",name:"GPT-4.1"},{id:"openai/o3",name:"o3"},{id:"deepseek/deepseek-chat",name:"DeepSeek Chat"},{id:"deepseek/deepseek-reasoner",name:"DeepSeek Reasoner"}],cl:[{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6"},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6"},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex"},{id:"openai/gpt-5.4",name:"GPT-5.4"},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"google/gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"kwaipilot/kat-coder-pro",name:"KAT Coder Pro"}],openai:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"}],anthropic:[{id:"claude-sonnet-4-20250514",name:"Claude Sonnet 4"},{id:"claude-opus-4-20250514",name:"Claude Opus 4"},{id:"claude-3-5-sonnet-20241022",name:"Claude 3.5 Sonnet"}],gemini:[{id:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",type:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",type:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",type:"embedding"}],openrouter:[{id:"auto",name:"Auto (Best Available)"}],glm:[{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],"glm-cn":[{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],kimi:[{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"kimi-k2.5-thinking",name:"Kimi K2.5 Thinking"},{id:"kimi-latest",name:"Kimi Latest"}],minimax:[{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],"minimax-cn":[{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"}],alicode:[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-max-2026-01-23",name:"Qwen3 Max"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],"alicode-intl":[{id:"qwen3.5-plus",name:"Qwen3.5 Plus"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"qwen3-coder-next",name:"Qwen3 Coder Next"},{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"glm-4.7",name:"GLM 4.7"}],deepseek:[{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],groq:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"}],xai:[{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"}],mistral:[{id:"mistral-large-latest",name:"Mistral Large 3"},{id:"codestral-latest",name:"Codestral"},{id:"mistral-medium-latest",name:"Mistral Medium 3"}],perplexity:[{id:"sonar-pro",name:"Sonar Pro"},{id:"sonar",name:"Sonar"}],together:[{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B"},{id:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick"}],fireworks:[{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1"},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B"},{id:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B"}],cerebras:[{id:"gpt-oss-120b",name:"GPT OSS 120B"},{id:"zai-glm-4.7",name:"ZAI GLM 4.7"},{id:"llama-3.3-70b",name:"Llama 3.3 70B"},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout"},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B"},{id:"qwen-3-32b",name:"Qwen3 32B"}],cohere:[{id:"command-r-plus-08-2024",name:"Command R+ (Aug 2024)"},{id:"command-r-08-2024",name:"Command R (Aug 2024)"},{id:"command-a-03-2025",name:"Command A (Mar 2025)"}],nvidia:[{id:"moonshotai/kimi-k2.5",name:"Kimi K2.5"},{id:"z-ai/glm4.7",name:"GLM 4.7"},{id:"deepseek-ai/deepseek-v3.2",name:"DeepSeek V3.2"},{id:"nvidia/llama-3.3-70b-instruct",name:"Llama 3.3 70B"},{id:"meta/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"deepseek/deepseek-r1",name:"DeepSeek R1"}],nebius:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct"}],siliconflow:[{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B"},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B"},{id:"Qwen/Qwen3-32B",name:"Qwen3 32B"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"zai-org/GLM-4.7",name:"GLM 4.7"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"baidu/ERNIE-4.5-300B-A47B",name:"ERNIE 4.5 300B"}],hyperbolic:[{id:"Qwen/QwQ-32B",name:"QwQ 32B"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3"},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B"},{id:"meta-llama/Llama-3.2-3B-Instruct",name:"Llama 3.2 3B"},{id:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen 2.5 72B"},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B"},{id:"NousResearch/Hermes-3-Llama-3.1-70B",name:"Hermes 3 70B"}],ollama:[{id:"gpt-oss:120b",name:"GPT OSS 120B"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"glm-5",name:"GLM 5"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7-flash",name:"GLM 4.7 Flash"},{id:"qwen3.5",name:"Qwen3.5"}]},d={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",cursor:"cu","kimi-coding":"kmc",kilocode:"kc",cline:"cl"},l=Object.fromEntries(Object.keys(m).map(e=>[e,d[e]||e]));function r(e){return s[l[e]||e]||[]}},52679:(e,i,a)=>{a.d(i,{DI:()=>s,IS:()=>n,JH:()=>m,MA:()=>c,Q2:()=>r,fg:()=>t,gb:()=>l,mq:()=>d,wG:()=>h,wb:()=>u,zN:()=>o,zt:()=>p});let n={iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},qwen:{id:"qwen",alias:"qw",name:"Qwen Code",icon:"psychology",color:"#10B981"},"gemini-cli":{id:"gemini-cli",alias:"gc",name:"Gemini CLI",icon:"terminal",color:"#4285F4"},kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"}},o={claude:{id:"claude",alias:"cc",name:"Claude Code",icon:"smart_toy",color:"#D97757"},antigravity:{id:"antigravity",alias:"ag",name:"Antigravity",icon:"rocket_launch",color:"#F59E0B"},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},t={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",passthroughModels:!0,website:"https://openrouter.ai"},glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com"},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com"},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"},deepseek:{id:"deepseek",alias:"ds",name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com"},groq:{id:"groq",alias:"groq",name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com"},xai:{id:"xai",alias:"xai",name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai"},mistral:{id:"mistral",alias:"mistral",name:"Mistral",icon:"air",color:"#FF7000",textIcon:"MI",website:"https://mistral.ai"},perplexity:{id:"perplexity",alias:"pplx",name:"Perplexity",icon:"search",color:"#20808D",textIcon:"PP",website:"https://www.perplexity.ai"},together:{id:"together",alias:"together",name:"Together AI",icon:"group_work",color:"#0F6FFF",textIcon:"TG",website:"https://www.together.ai"},fireworks:{id:"fireworks",alias:"fireworks",name:"Fireworks AI",icon:"local_fire_department",color:"#7B2EF2",textIcon:"FW",website:"https://fireworks.ai"},cerebras:{id:"cerebras",alias:"cerebras",name:"Cerebras",icon:"memory",color:"#FF4F00",textIcon:"CB",website:"https://www.cerebras.ai"},cohere:{id:"cohere",alias:"cohere",name:"Cohere",icon:"hub",color:"#39594D",textIcon:"CO",website:"https://cohere.com"},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim"},nebius:{id:"nebius",alias:"nebius",name:"Nebius AI",icon:"cloud",color:"#6C5CE7",textIcon:"NB",website:"https://nebius.com"},siliconflow:{id:"siliconflow",alias:"siliconflow",name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com"},hyperbolic:{id:"hyperbolic",alias:"hyp",name:"Hyperbolic",icon:"bolt",color:"#00D4FF",textIcon:"HY",website:"https://hyperbolic.xyz"},deepgram:{id:"deepgram",alias:"dg",name:"Deepgram",icon:"mic",color:"#13EF93",textIcon:"DG",website:"https://deepgram.com"},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com"},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai"},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"}},m="openai-compatible-",s="anthropic-compatible-";function d(e){return"string"==typeof e&&e.startsWith(m)}function l(e){return"string"==typeof e&&e.startsWith(s)}let r={...n,...o,...t},c={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function p(e){for(let i of Object.values(r))if(i.alias===e||i.id===e)return i;return null}function h(e){let i=r[e];return i?.alias||e}Object.values(r).reduce((e,i)=>(e[i.alias]=i.id,e),{}),Object.values(r).reduce((e,i)=>(e[i.id]=i.alias,e),{});let u=["claude","antigravity","kiro","github","codex","kimi-coding"]}}]);