9router 0.2.87 → 0.2.89

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 (488) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/app-path-routes-manifest.json +27 -26
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/routes-manifest.json +18 -12
  5. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +4 -4
  6. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  10. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  12. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  20. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/_global-error.html +2 -2
  27. package/app/.next/server/app/_global-error.rsc +1 -1
  28. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  30. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  31. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/app/.next/server/app/_not-found/page.js +1 -1
  35. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/_not-found.html +1 -1
  37. package/app/.next/server/app/_not-found.rsc +2 -2
  38. package/app/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  39. package/app/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  40. package/app/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  41. package/app/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  42. package/app/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  43. package/app/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  44. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  45. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  46. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  47. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/cloud/auth/route.js +1 -1
  54. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  56. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  58. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/cloud/models/alias/route.js +1 -1
  60. package/app/.next/server/app/api/cloud/models/alias/route.js.nft.json +1 -1
  61. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/combos/[id]/route.js +1 -1
  63. package/app/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/combos/route.js +1 -1
  66. package/app/.next/server/app/api/combos/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/init/route.js +1 -1
  69. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/keys/[id]/route.js +1 -1
  71. package/app/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  72. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/keys/route.js +1 -1
  74. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/models/alias/route.js +1 -1
  76. package/app/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  77. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/models/route.js +1 -1
  79. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  81. package/app/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  82. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  85. package/app/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  86. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  89. package/app/.next/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  90. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  93. package/app/.next/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  94. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  97. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/provider-nodes/route.js +1 -1
  99. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  102. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/providers/[id]/route.js +1 -1
  104. package/app/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  105. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/providers/[id]/test/route.js +1 -1
  107. package/app/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  108. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  109. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/providers/route.js +1 -1
  111. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  112. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/providers/test-batch/route.js +1 -1
  114. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  115. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  117. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/tunnel/disable/route.js +1 -0
  127. package/app/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  128. package/app/.next/server/app/api/tunnel/enable/route.js +1 -0
  129. package/app/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  130. package/app/.next/server/app/api/tunnel/status/route.js +1 -0
  131. package/app/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  132. package/app/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  133. package/app/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  134. package/app/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  135. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/usage/stream/route.js +6 -2
  142. package/app/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/v1/api/chat/route.js +1 -1
  144. package/app/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  145. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/v1/chat/completions/route.js +1 -1
  147. package/app/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  148. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/v1/embeddings/route.js +1 -1
  150. package/app/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  151. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/v1/messages/route.js +1 -1
  154. package/app/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  155. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/v1/responses/route.js +1 -1
  158. package/app/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  159. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  162. package/app/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  163. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/callback/page.js +2 -2
  166. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/callback.html +1 -1
  168. package/app/.next/server/app/callback.rsc +2 -2
  169. package/app/.next/server/app/callback.segments/_full.segment.rsc +2 -2
  170. package/app/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  171. package/app/.next/server/app/callback.segments/_index.segment.rsc +2 -2
  172. package/app/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  173. package/app/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  174. package/app/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  175. package/app/.next/server/app/dashboard/cli-tools.html +1 -1
  176. package/app/.next/server/app/dashboard/cli-tools.rsc +4 -4
  177. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  178. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  179. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  180. package/app/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  181. package/app/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +4 -4
  182. package/app/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  183. package/app/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +2 -2
  184. package/app/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  185. package/app/.next/server/app/dashboard/combos.html +1 -1
  186. package/app/.next/server/app/dashboard/combos.rsc +4 -4
  187. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  188. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  189. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  190. package/app/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  191. package/app/.next/server/app/dashboard/combos.segments/_full.segment.rsc +4 -4
  192. package/app/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  193. package/app/.next/server/app/dashboard/combos.segments/_index.segment.rsc +2 -2
  194. package/app/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  195. package/app/.next/server/app/dashboard/endpoint.html +1 -1
  196. package/app/.next/server/app/dashboard/endpoint.rsc +4 -4
  197. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  198. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  199. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  200. package/app/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  201. package/app/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +4 -4
  202. package/app/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  203. package/app/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +2 -2
  204. package/app/.next/server/app/dashboard/endpoint.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 +4 -4
  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 +4 -4
  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 +2 -2
  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 +4 -4
  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 +4 -4
  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 +2 -2
  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 +4 -4
  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 +4 -4
  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 +2 -2
  235. package/app/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  236. package/app/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  237. package/app/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  238. package/app/.next/server/app/dashboard/settings/pricing.html +1 -1
  239. package/app/.next/server/app/dashboard/settings/pricing.rsc +2 -2
  240. package/app/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +2 -2
  241. package/app/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  242. package/app/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +2 -2
  243. package/app/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  244. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  245. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  246. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  247. package/app/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  248. package/app/.next/server/app/dashboard/translator.html +1 -1
  249. package/app/.next/server/app/dashboard/translator.rsc +4 -4
  250. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  251. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  252. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  253. package/app/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  254. package/app/.next/server/app/dashboard/translator.segments/_full.segment.rsc +4 -4
  255. package/app/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  256. package/app/.next/server/app/dashboard/translator.segments/_index.segment.rsc +2 -2
  257. package/app/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  258. package/app/.next/server/app/dashboard/usage.html +1 -1
  259. package/app/.next/server/app/dashboard/usage.rsc +4 -4
  260. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  261. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  262. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  263. package/app/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  264. package/app/.next/server/app/dashboard/usage.segments/_full.segment.rsc +4 -4
  265. package/app/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  266. package/app/.next/server/app/dashboard/usage.segments/_index.segment.rsc +2 -2
  267. package/app/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  268. package/app/.next/server/app/dashboard.html +1 -1
  269. package/app/.next/server/app/dashboard.rsc +4 -4
  270. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  271. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  272. package/app/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  273. package/app/.next/server/app/dashboard.segments/_full.segment.rsc +4 -4
  274. package/app/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  275. package/app/.next/server/app/dashboard.segments/_index.segment.rsc +2 -2
  276. package/app/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  277. package/app/.next/server/app/index.html +1 -1
  278. package/app/.next/server/app/index.rsc +2 -2
  279. package/app/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  280. package/app/.next/server/app/index.segments/_full.segment.rsc +2 -2
  281. package/app/.next/server/app/index.segments/_head.segment.rsc +1 -1
  282. package/app/.next/server/app/index.segments/_index.segment.rsc +2 -2
  283. package/app/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  284. package/app/.next/server/app/landing/page.js +2 -2
  285. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  286. package/app/.next/server/app/landing.html +1 -1
  287. package/app/.next/server/app/landing.rsc +2 -2
  288. package/app/.next/server/app/landing.segments/_full.segment.rsc +2 -2
  289. package/app/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  290. package/app/.next/server/app/landing.segments/_index.segment.rsc +2 -2
  291. package/app/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  292. package/app/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  293. package/app/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  294. package/app/.next/server/app/login/page.js +1 -1
  295. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  296. package/app/.next/server/app/login.html +1 -1
  297. package/app/.next/server/app/login.rsc +3 -3
  298. package/app/.next/server/app/login.segments/_full.segment.rsc +3 -3
  299. package/app/.next/server/app/login.segments/_head.segment.rsc +1 -1
  300. package/app/.next/server/app/login.segments/_index.segment.rsc +2 -2
  301. package/app/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  302. package/app/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  303. package/app/.next/server/app/login.segments/login.segment.rsc +1 -1
  304. package/app/.next/server/app/page.js +1 -1
  305. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  306. package/app/.next/server/app-paths-manifest.json +27 -26
  307. package/app/.next/server/chunks/3990.js +2 -2
  308. package/app/.next/server/chunks/412.js +1 -1
  309. package/app/.next/server/chunks/6084.js +1 -0
  310. package/app/.next/server/chunks/{5330.js → 7189.js} +3 -3
  311. package/app/.next/server/chunks/7533.js +1 -0
  312. package/app/.next/server/chunks/8954.js +1 -1
  313. package/app/.next/server/chunks/9489.js +1 -1
  314. package/app/.next/server/chunks/9718.js +1 -1
  315. package/app/.next/server/chunks/9862.js +2 -2
  316. package/app/.next/server/pages/404.html +1 -1
  317. package/app/.next/server/pages/500.html +2 -2
  318. package/app/.next/server/server-reference-manifest.js +1 -1
  319. package/app/.next/server/server-reference-manifest.json +1 -1
  320. package/app/.next/server/webpack-runtime.js +1 -1
  321. package/app/.next/static/0kBQAQeQcXjhcg1PkyrJY/_buildManifest.js +1 -0
  322. package/app/.next/static/chunks/1393-1761cc0c24573e2e.js +3 -0
  323. package/app/.next/static/chunks/5497-590ec825fbd92e55.js +7 -0
  324. package/app/.next/static/chunks/{8729-4d9f5ebc26ea7fb5.js → 8729-8e5ba4c38b294fe1.js} +1 -1
  325. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-f1a3de0e067ff7c4.js +15 -0
  326. package/app/.next/static/chunks/app/_global-error/page-6fc4c655a6c0cae7.js +1 -0
  327. package/app/.next/static/chunks/app/api/auth/login/route-6fc4c655a6c0cae7.js +1 -0
  328. package/app/.next/static/chunks/app/api/auth/logout/route-6fc4c655a6c0cae7.js +1 -0
  329. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-6fc4c655a6c0cae7.js +1 -0
  330. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-6fc4c655a6c0cae7.js +1 -0
  331. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-6fc4c655a6c0cae7.js +1 -0
  332. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-6fc4c655a6c0cae7.js +1 -0
  333. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-6fc4c655a6c0cae7.js +1 -0
  334. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-6fc4c655a6c0cae7.js +1 -0
  335. package/app/.next/static/chunks/app/api/cloud/auth/route-6fc4c655a6c0cae7.js +1 -0
  336. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-6fc4c655a6c0cae7.js +1 -0
  337. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-6fc4c655a6c0cae7.js +1 -0
  338. package/app/.next/static/chunks/app/api/cloud/models/alias/route-6fc4c655a6c0cae7.js +1 -0
  339. package/app/.next/static/chunks/app/api/combos/[id]/route-6fc4c655a6c0cae7.js +1 -0
  340. package/app/.next/static/chunks/app/api/combos/route-6fc4c655a6c0cae7.js +1 -0
  341. package/app/.next/static/chunks/app/api/init/route-6fc4c655a6c0cae7.js +1 -0
  342. package/app/.next/static/chunks/app/api/keys/[id]/route-6fc4c655a6c0cae7.js +1 -0
  343. package/app/.next/static/chunks/app/api/keys/route-6fc4c655a6c0cae7.js +1 -0
  344. package/app/.next/static/chunks/app/api/models/alias/route-6fc4c655a6c0cae7.js +1 -0
  345. package/app/.next/static/chunks/app/api/models/route-6fc4c655a6c0cae7.js +1 -0
  346. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-6fc4c655a6c0cae7.js +1 -0
  347. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-6fc4c655a6c0cae7.js +1 -0
  348. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-6fc4c655a6c0cae7.js +1 -0
  349. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-6fc4c655a6c0cae7.js +1 -0
  350. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-6fc4c655a6c0cae7.js +1 -0
  351. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-6fc4c655a6c0cae7.js +1 -0
  352. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-6fc4c655a6c0cae7.js +1 -0
  353. package/app/.next/static/chunks/app/api/pricing/route-6fc4c655a6c0cae7.js +1 -0
  354. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-6fc4c655a6c0cae7.js +1 -0
  355. package/app/.next/static/chunks/app/api/provider-nodes/route-6fc4c655a6c0cae7.js +1 -0
  356. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-6fc4c655a6c0cae7.js +1 -0
  357. package/app/.next/static/chunks/app/api/providers/[id]/models/route-6fc4c655a6c0cae7.js +1 -0
  358. package/app/.next/static/chunks/app/api/providers/[id]/route-6fc4c655a6c0cae7.js +1 -0
  359. package/app/.next/static/chunks/app/api/providers/[id]/test/route-6fc4c655a6c0cae7.js +1 -0
  360. package/app/.next/static/chunks/app/api/providers/client/route-6fc4c655a6c0cae7.js +1 -0
  361. package/app/.next/static/chunks/app/api/providers/route-6fc4c655a6c0cae7.js +1 -0
  362. package/app/.next/static/chunks/app/api/providers/test-batch/route-6fc4c655a6c0cae7.js +1 -0
  363. package/app/.next/static/chunks/app/api/providers/validate/route-6fc4c655a6c0cae7.js +1 -0
  364. package/app/.next/static/chunks/app/api/settings/require-login/route-6fc4c655a6c0cae7.js +1 -0
  365. package/app/.next/static/chunks/app/api/settings/route-6fc4c655a6c0cae7.js +1 -0
  366. package/app/.next/static/chunks/app/api/shutdown/route-6fc4c655a6c0cae7.js +1 -0
  367. package/app/.next/static/chunks/app/api/tags/route-6fc4c655a6c0cae7.js +1 -0
  368. package/app/.next/static/chunks/app/api/translator/load/route-6fc4c655a6c0cae7.js +1 -0
  369. package/app/.next/static/chunks/app/api/translator/save/route-6fc4c655a6c0cae7.js +1 -0
  370. package/app/.next/static/chunks/app/api/translator/send/route-6fc4c655a6c0cae7.js +1 -0
  371. package/app/.next/static/chunks/app/api/translator/translate/route-6fc4c655a6c0cae7.js +1 -0
  372. package/app/.next/static/chunks/app/api/tunnel/disable/route-6fc4c655a6c0cae7.js +1 -0
  373. package/app/.next/static/chunks/app/api/tunnel/enable/route-6fc4c655a6c0cae7.js +1 -0
  374. package/app/.next/static/chunks/app/api/tunnel/status/route-6fc4c655a6c0cae7.js +1 -0
  375. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-6fc4c655a6c0cae7.js +1 -0
  376. package/app/.next/static/chunks/app/api/usage/chart/route-6fc4c655a6c0cae7.js +1 -0
  377. package/app/.next/static/chunks/app/api/usage/history/route-6fc4c655a6c0cae7.js +1 -0
  378. package/app/.next/static/chunks/app/api/usage/providers/route-6fc4c655a6c0cae7.js +1 -0
  379. package/app/.next/static/chunks/app/api/usage/request-details/route-6fc4c655a6c0cae7.js +1 -0
  380. package/app/.next/static/chunks/app/api/usage/request-logs/route-6fc4c655a6c0cae7.js +1 -0
  381. package/app/.next/static/chunks/app/api/usage/stream/route-6fc4c655a6c0cae7.js +1 -0
  382. package/app/.next/static/chunks/app/api/v1/api/chat/route-6fc4c655a6c0cae7.js +1 -0
  383. package/app/.next/static/chunks/app/api/v1/chat/completions/route-6fc4c655a6c0cae7.js +1 -0
  384. package/app/.next/static/chunks/app/api/v1/embeddings/route-6fc4c655a6c0cae7.js +1 -0
  385. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-6fc4c655a6c0cae7.js +1 -0
  386. package/app/.next/static/chunks/app/api/v1/messages/route-6fc4c655a6c0cae7.js +1 -0
  387. package/app/.next/static/chunks/app/api/v1/models/route-6fc4c655a6c0cae7.js +1 -0
  388. package/app/.next/static/chunks/app/api/v1/responses/route-6fc4c655a6c0cae7.js +1 -0
  389. package/app/.next/static/chunks/app/api/v1/route-6fc4c655a6c0cae7.js +1 -0
  390. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-6fc4c655a6c0cae7.js +1 -0
  391. package/app/.next/static/chunks/app/api/v1beta/models/route-6fc4c655a6c0cae7.js +1 -0
  392. package/app/.next/static/chunks/app/page-6fc4c655a6c0cae7.js +1 -0
  393. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-6fc4c655a6c0cae7.js +1 -0
  394. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-6fc4c655a6c0cae7.js +1 -0
  395. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-6fc4c655a6c0cae7.js +1 -0
  396. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-6fc4c655a6c0cae7.js +1 -0
  397. package/app/package.json +1 -1
  398. package/cli.js +4 -4
  399. package/package.json +1 -1
  400. package/src/cli/api/client.js +33 -0
  401. package/src/cli/menus/settings.js +38 -27
  402. package/src/cli/terminalUI.js +8 -10
  403. package/src/cli/tray/icon.png +0 -0
  404. package/src/cli/tray/tray.js +3 -2
  405. package/src/cli/utils/endpoint.js +10 -12
  406. package/app/.next/server/app/api/sync/cloud/route.js +0 -1
  407. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +0 -1
  408. package/app/.next/server/app/api/sync/initialize/route.js +0 -1
  409. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +0 -1
  410. package/app/.next/server/chunks/1638.js +0 -1
  411. package/app/.next/server/chunks/8647.js +0 -1
  412. package/app/.next/static/chunks/1393-5b60aa357f848139.js +0 -3
  413. package/app/.next/static/chunks/5497-825dd88e0a663cfe.js +0 -7
  414. package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-d5e2be111394971e.js +0 -15
  415. package/app/.next/static/chunks/app/_global-error/page-d1d78f0818dfa7f5.js +0 -1
  416. package/app/.next/static/chunks/app/api/auth/login/route-d1d78f0818dfa7f5.js +0 -1
  417. package/app/.next/static/chunks/app/api/auth/logout/route-d1d78f0818dfa7f5.js +0 -1
  418. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-d1d78f0818dfa7f5.js +0 -1
  419. package/app/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-d1d78f0818dfa7f5.js +0 -1
  420. package/app/.next/static/chunks/app/api/cli-tools/claude-settings/route-d1d78f0818dfa7f5.js +0 -1
  421. package/app/.next/static/chunks/app/api/cli-tools/codex-settings/route-d1d78f0818dfa7f5.js +0 -1
  422. package/app/.next/static/chunks/app/api/cli-tools/droid-settings/route-d1d78f0818dfa7f5.js +0 -1
  423. package/app/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-d1d78f0818dfa7f5.js +0 -1
  424. package/app/.next/static/chunks/app/api/cloud/auth/route-d1d78f0818dfa7f5.js +0 -1
  425. package/app/.next/static/chunks/app/api/cloud/credentials/update/route-d1d78f0818dfa7f5.js +0 -1
  426. package/app/.next/static/chunks/app/api/cloud/model/resolve/route-d1d78f0818dfa7f5.js +0 -1
  427. package/app/.next/static/chunks/app/api/cloud/models/alias/route-d1d78f0818dfa7f5.js +0 -1
  428. package/app/.next/static/chunks/app/api/combos/[id]/route-d1d78f0818dfa7f5.js +0 -1
  429. package/app/.next/static/chunks/app/api/combos/route-d1d78f0818dfa7f5.js +0 -1
  430. package/app/.next/static/chunks/app/api/init/route-d1d78f0818dfa7f5.js +0 -1
  431. package/app/.next/static/chunks/app/api/keys/[id]/route-d1d78f0818dfa7f5.js +0 -1
  432. package/app/.next/static/chunks/app/api/keys/route-d1d78f0818dfa7f5.js +0 -1
  433. package/app/.next/static/chunks/app/api/models/alias/route-d1d78f0818dfa7f5.js +0 -1
  434. package/app/.next/static/chunks/app/api/models/route-d1d78f0818dfa7f5.js +0 -1
  435. package/app/.next/static/chunks/app/api/oauth/[provider]/[action]/route-d1d78f0818dfa7f5.js +0 -1
  436. package/app/.next/static/chunks/app/api/oauth/cursor/auto-import/route-d1d78f0818dfa7f5.js +0 -1
  437. package/app/.next/static/chunks/app/api/oauth/cursor/import/route-d1d78f0818dfa7f5.js +0 -1
  438. package/app/.next/static/chunks/app/api/oauth/kiro/auto-import/route-d1d78f0818dfa7f5.js +0 -1
  439. package/app/.next/static/chunks/app/api/oauth/kiro/import/route-d1d78f0818dfa7f5.js +0 -1
  440. package/app/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-d1d78f0818dfa7f5.js +0 -1
  441. package/app/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-d1d78f0818dfa7f5.js +0 -1
  442. package/app/.next/static/chunks/app/api/pricing/route-d1d78f0818dfa7f5.js +0 -1
  443. package/app/.next/static/chunks/app/api/provider-nodes/[id]/route-d1d78f0818dfa7f5.js +0 -1
  444. package/app/.next/static/chunks/app/api/provider-nodes/route-d1d78f0818dfa7f5.js +0 -1
  445. package/app/.next/static/chunks/app/api/provider-nodes/validate/route-d1d78f0818dfa7f5.js +0 -1
  446. package/app/.next/static/chunks/app/api/providers/[id]/models/route-d1d78f0818dfa7f5.js +0 -1
  447. package/app/.next/static/chunks/app/api/providers/[id]/route-d1d78f0818dfa7f5.js +0 -1
  448. package/app/.next/static/chunks/app/api/providers/[id]/test/route-d1d78f0818dfa7f5.js +0 -1
  449. package/app/.next/static/chunks/app/api/providers/client/route-d1d78f0818dfa7f5.js +0 -1
  450. package/app/.next/static/chunks/app/api/providers/route-d1d78f0818dfa7f5.js +0 -1
  451. package/app/.next/static/chunks/app/api/providers/test-batch/route-d1d78f0818dfa7f5.js +0 -1
  452. package/app/.next/static/chunks/app/api/providers/validate/route-d1d78f0818dfa7f5.js +0 -1
  453. package/app/.next/static/chunks/app/api/settings/require-login/route-d1d78f0818dfa7f5.js +0 -1
  454. package/app/.next/static/chunks/app/api/settings/route-d1d78f0818dfa7f5.js +0 -1
  455. package/app/.next/static/chunks/app/api/shutdown/route-d1d78f0818dfa7f5.js +0 -1
  456. package/app/.next/static/chunks/app/api/sync/cloud/route-d1d78f0818dfa7f5.js +0 -1
  457. package/app/.next/static/chunks/app/api/sync/initialize/route-d1d78f0818dfa7f5.js +0 -1
  458. package/app/.next/static/chunks/app/api/tags/route-d1d78f0818dfa7f5.js +0 -1
  459. package/app/.next/static/chunks/app/api/translator/load/route-d1d78f0818dfa7f5.js +0 -1
  460. package/app/.next/static/chunks/app/api/translator/save/route-d1d78f0818dfa7f5.js +0 -1
  461. package/app/.next/static/chunks/app/api/translator/send/route-d1d78f0818dfa7f5.js +0 -1
  462. package/app/.next/static/chunks/app/api/translator/translate/route-d1d78f0818dfa7f5.js +0 -1
  463. package/app/.next/static/chunks/app/api/usage/[connectionId]/route-d1d78f0818dfa7f5.js +0 -1
  464. package/app/.next/static/chunks/app/api/usage/chart/route-d1d78f0818dfa7f5.js +0 -1
  465. package/app/.next/static/chunks/app/api/usage/history/route-d1d78f0818dfa7f5.js +0 -1
  466. package/app/.next/static/chunks/app/api/usage/providers/route-d1d78f0818dfa7f5.js +0 -1
  467. package/app/.next/static/chunks/app/api/usage/request-details/route-d1d78f0818dfa7f5.js +0 -1
  468. package/app/.next/static/chunks/app/api/usage/request-logs/route-d1d78f0818dfa7f5.js +0 -1
  469. package/app/.next/static/chunks/app/api/usage/stream/route-d1d78f0818dfa7f5.js +0 -1
  470. package/app/.next/static/chunks/app/api/v1/api/chat/route-d1d78f0818dfa7f5.js +0 -1
  471. package/app/.next/static/chunks/app/api/v1/chat/completions/route-d1d78f0818dfa7f5.js +0 -1
  472. package/app/.next/static/chunks/app/api/v1/embeddings/route-d1d78f0818dfa7f5.js +0 -1
  473. package/app/.next/static/chunks/app/api/v1/messages/count_tokens/route-d1d78f0818dfa7f5.js +0 -1
  474. package/app/.next/static/chunks/app/api/v1/messages/route-d1d78f0818dfa7f5.js +0 -1
  475. package/app/.next/static/chunks/app/api/v1/models/route-d1d78f0818dfa7f5.js +0 -1
  476. package/app/.next/static/chunks/app/api/v1/responses/route-d1d78f0818dfa7f5.js +0 -1
  477. package/app/.next/static/chunks/app/api/v1/route-d1d78f0818dfa7f5.js +0 -1
  478. package/app/.next/static/chunks/app/api/v1beta/models/[...path]/route-d1d78f0818dfa7f5.js +0 -1
  479. package/app/.next/static/chunks/app/api/v1beta/models/route-d1d78f0818dfa7f5.js +0 -1
  480. package/app/.next/static/chunks/app/page-d1d78f0818dfa7f5.js +0 -1
  481. package/app/.next/static/chunks/next/dist/client/components/builtin/app-error-d1d78f0818dfa7f5.js +0 -1
  482. package/app/.next/static/chunks/next/dist/client/components/builtin/forbidden-d1d78f0818dfa7f5.js +0 -1
  483. package/app/.next/static/chunks/next/dist/client/components/builtin/not-found-d1d78f0818dfa7f5.js +0 -1
  484. package/app/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d1d78f0818dfa7f5.js +0 -1
  485. package/app/.next/static/jWN0ATVbXrki9UzHFr5nv/_buildManifest.js +0 -1
  486. /package/app/.next/server/app/api/{sync/cloud → tunnel/disable}/route.js.nft.json +0 -0
  487. /package/app/.next/server/app/api/{sync/initialize → tunnel/enable}/route.js.nft.json +0 -0
  488. /package/app/.next/static/{jWN0ATVbXrki9UzHFr5nv → 0kBQAQeQcXjhcg1PkyrJY}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- exports.id=8954,exports.ids=[8954],exports.modules={11020:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23)),Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},12020:(a,b,c)=>{"use strict";c.d(b,{Q2:()=>d.Q2,fg:()=>d.fg,vQ:()=>e,MA:()=>d.MA,zN:()=>d.zN,B2:()=>f});var d=c(96919);c(91431);let e={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.2.87"},f={storageKey:"theme",defaultTheme:"system"}},13033:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(31417),e=c(300),f=c(12020);let g=(0,d.v)((0,e.Zr)((a,b)=>({theme:f.B2.defaultTheme,setTheme:b=>{a({theme:b})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{b().theme}}),{name:f.B2.storageKey}))},16591:(a,b,c)=>{"use strict";var d=c(40012);let e=!1;(async function(){if(!e)try{await (0,d.A)(),e=!0}catch(a){console.error("[ServerInit] Error initializing cloud sync:",a)}return e})().catch(console.log)},19308:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(13033);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},40012:(a,b,c)=>{"use strict";c.d(b,{A:()=>k});var d=c(54603),e=c(89718);let f=process.env.BASE_URL||process.env.NEXT_PUBLIC_BASE_URL||"http://localhost:20128";class g{constructor(a=null,b=15){this.machineId=a,this.intervalMinutes=b,this.intervalId=null}async initializeMachineId(){this.machineId||(this.machineId=await (0,d.Xj)())}async start(){this.intervalId||(await this.initializeMachineId(),setTimeout(()=>{this.syncWithRetry().catch(()=>{})},3e4),this.intervalId=setInterval(()=>{this.syncWithRetry().catch(()=>{})},60*this.intervalMinutes*1e3))}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}async syncWithRetry(a=1){for(let b=1;b<=a;b++)try{return await this.sync()}catch(d){if(b===a)return null;let c=Math.min(1e3*Math.pow(2,b),1e4);await new Promise(a=>setTimeout(a,c))}}async sync(){if(!await (0,e.Nx)())return null;await this.initializeMachineId();let a=await fetch(`${f}/api/sync/cloud`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({machineId:this.machineId,action:"sync"})});if(!a.ok)throw Error((await a.json().catch(()=>({}))).error||"Sync failed");return await a.json()}isRunning(){return null!==this.intervalId}}let h=null;async function i(a=null,b=15){return h||(h=new g(a,b)),h}async function j(){try{await (0,e.bI)();let a=await i(null,15);return await a.start(),a}catch(a){throw console.error("[CloudSync] Error initializing scheduler:",a),a}}a=c.hmd(a),c.c[c.s]===a&&j().catch(console.log);let k=j},50385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,metadata:()=>h});var d=c(5735),e=c(75329),f=c.n(e);c(61135);var g=c(89886);c(16591);let h={title:"9Router - AI Infrastructure Management",description:"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.",icons:{icon:"/favicon.svg"}};function i({children:a}){return(0,d.jsxs)("html",{lang:"en",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsx)("body",{className:`${f().variable} font-sans antialiased`,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})}},54603:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},56680:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23))},60757:(a,b,c)=>{"use strict";c.d(b,{KC:()=>f,Xg:()=>e,vq:()=>d});let d={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.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"},{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"}],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:"kimi-k2",name:"Kimi K2"},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3.2-chat",name:"DeepSeek V3.2 Chat"},{id:"minimax-m2.1",name:"MiniMax M2.1"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-5",name:"GLM 5"}],ag:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3-1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3-1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"}],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:"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"}],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"}],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-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"}],openai:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o 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"}],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"}]},e={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",openai:"openai",anthropic:"anthropic",gemini:"gemini",openrouter:"openrouter",glm:"glm","glm-cn":"glm-cn",kimi:"kimi",minimax:"minimax","minimax-cn":"minimax-cn",deepseek:"deepseek",groq:"groq",xai:"xai",mistral:"mistral",perplexity:"perplexity",together:"together",fireworks:"fireworks",cerebras:"cerebras",cohere:"cohere",nvidia:"nvidia",nebius:"nebius",siliconflow:"siliconflow",hyperbolic:"hyperbolic"};function f(a){return d[e[a]||a]||[]}},61135:()=>{},69832:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23))},70440:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(88868);let e=async a=>[{type:"image/x-icon",sizes:"16x16",url:(0,d.fillMetadataSegment)(".",await a.params,"favicon.ico")+"?603d046c9a6fdfbb"}]},78335:()=>{},85440:(a,b,c)=>{Promise.resolve().then(c.bind(c,19308))},89886:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/Working/router4/app/src/shared/components/ThemeProvider.js","ThemeProvider")},91431:(a,b,c)=>{"use strict";c.d(b,{KC:()=>d.KC,Xg:()=>d.Xg});var d=c(60757);Object.entries(c(96919).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},96487:()=>{},96919:(a,b,c)=>{"use strict";c.d(b,{DI:()=>h,IS:()=>d,JH:()=>g,MA:()=>l,Q2:()=>k,fg:()=>f,gb:()=>j,mq:()=>i,wG:()=>n,wb:()=>o,zN:()=>e,zt:()=>m});let d={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"}},e={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"}},f={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"},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"},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"}},g="openai-compatible-",h="anthropic-compatible-";function i(a){return"string"==typeof a&&a.startsWith(g)}function j(a){return"string"==typeof a&&a.startsWith(h)}let k={...d,...e,...f},l={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function m(a){for(let b of Object.values(k))if(b.alias===a||b.id===a)return b;return null}function n(a){let b=k[a];return b?.alias||a}Object.values(k).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(k).reduce((a,b)=>(a[b.id]=b.alias,a),{});let o=["antigravity","kiro","github","codex"]},97868:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23)),Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},98592:(a,b,c)=>{Promise.resolve().then(c.bind(c,89886))}};
1
+ exports.id=8954,exports.ids=[8954],exports.modules={3179:(a,b,c)=>{"use strict";c.d(b,{Al:()=>t,F0:()=>v,nN:()=>x,ss:()=>w});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(55591),i=c.n(h),j=c(21820),k=c.n(j),l=c(79646),m=c(85567);let n=g().join(k().homedir(),".9router","bin"),o="cloudflared",p="win32"===k().platform(),q=p?`${o}.exe`:o,r=g().join(n,q),s={darwin:{x64:"cloudflared-darwin-amd64.tgz",arm64:"cloudflared-darwin-amd64.tgz"},win32:{x64:"cloudflared-windows-amd64.exe"},linux:{x64:"cloudflared-linux-amd64",arm64:"cloudflared-linux-arm64"}};async function t(){if(e().existsSync(n)||e().mkdirSync(n,{recursive:!0}),e().existsSync(r))return p||e().chmodSync(r,"755"),r;let a=function(){let a=k().platform(),b=k().arch(),c=s[a];if(!c)throw Error(`Unsupported platform: ${a}`);let d=c[b];if(!d)throw Error(`Unsupported architecture: ${b} for platform ${a}`);return`https://github.com/cloudflare/cloudflared/releases/latest/download/${d}`}(),b=a.endsWith(".tgz"),c=b?g().join(n,"cloudflared.tgz"):r;return await function a(b,c){return new Promise((d,f)=>{let g=e().createWriteStream(c);i().get(b,b=>{if([301,302].includes(b.statusCode)){g.close(),e().unlinkSync(c),a(b.headers.location,c).then(d).catch(f);return}if(200!==b.statusCode){g.close(),e().unlinkSync(c),f(Error(`Download failed with status ${b.statusCode}`));return}b.pipe(g),g.on("finish",()=>{g.close(()=>d(c))}),g.on("error",a=>{g.close(),e().unlinkSync(c),f(a)})}).on("error",a=>{g.close(),e().existsSync(c)&&e().unlinkSync(c),f(a)})})}(a,c),b&&((0,l.execSync)(`tar -xzf "${c}" -C "${n}"`,{stdio:"pipe"}),e().unlinkSync(c)),p||e().chmodSync(r,"755"),r}let u=null;async function v(a){let b=await t(),c=(0,l.spawn)(b,["tunnel","run","--dns-resolver-addrs","1.1.1.1:53","--token",a],{detached:!1,stdio:["ignore","pipe","pipe"]});return u=c,(0,m.xS)(c.pid),new Promise((a,b)=>{let d=0,e=setTimeout(()=>{a(c)},9e4),f=b=>{b.toString().includes("Registered tunnel connection")&&++d>=4&&(clearTimeout(e),a(c))};c.stdout.on("data",f),c.stderr.on("data",f),c.on("error",a=>{clearTimeout(e),b(a)}),c.on("exit",a=>{clearTimeout(e),0===d&&b(Error(`cloudflared exited with code ${a}`))})})}function w(){if(u){try{u.kill()}catch(a){}u=null}let a=(0,m.Cr)();if(a){try{process.kill(a)}catch(a){}(0,m.r4)()}try{(0,l.execSync)("pkill -f cloudflared 2>/dev/null || true",{stdio:"ignore"})}catch(a){}}function x(){let a=(0,m.Cr)();if(!a)return!1;try{return process.kill(a,0),!0}catch(a){return!1}}},11020:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23)),Promise.resolve().then(c.t.bind(c,15098,23)),Promise.resolve().then(c.t.bind(c,47644,23)),Promise.resolve().then(c.t.bind(c,33859,23)),Promise.resolve().then(c.t.bind(c,98099,23)),Promise.resolve().then(c.t.bind(c,16237,23)),Promise.resolve().then(c.t.bind(c,98562,23)),Promise.resolve().then(c.t.bind(c,36675,23))},12020:(a,b,c)=>{"use strict";c.d(b,{Q2:()=>d.Q2,fg:()=>d.fg,vQ:()=>e,MA:()=>d.MA,zN:()=>d.zN,B2:()=>f});var d=c(96919);c(91431);let e={name:"Endpoint Proxy",description:"AI Infrastructure Management",version:"0.2.89"},f={storageKey:"theme",defaultTheme:"system"}},13033:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(31417),e=c(300),f=c(12020);let g=(0,d.v)((0,e.Zr)((a,b)=>({theme:f.B2.defaultTheme,setTheme:b=>{a({theme:b})},toggleTheme:()=>{let c="dark"===b().theme?"light":"dark";a({theme:c})},initTheme:()=>{b().theme}}),{name:f.B2.storageKey}))},19201:(a,b,c)=>{"use strict";var d=c(89718),e=c(53855),f=c(3179);async function g(){try{if(await (0,d.bI)(),(await (0,d.getSettings)()).tunnelEnabled&&!(0,f.nN)()){console.log("[InitApp] Tunnel was enabled, auto-reconnecting...");try{await (0,e.cb)(),console.log("[InitApp] Tunnel reconnected")}catch(a){console.log("[InitApp] Tunnel reconnect failed:",a.message)}}let a=()=>{(0,f.ss)(),process.exit()};process.on("SIGINT",a),process.on("SIGTERM",a),(0,f.Al)().catch(()=>{})}catch(a){console.error("[InitApp] Error:",a)}}let h=!1;(async function(){if(!h)try{await g(),h=!0}catch(a){console.error("[ServerInit] Error initializing app:",a)}return h})().catch(console.log)},19308:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>f});var d=c(48249);c(67484);var e=c(13033);function f({children:a}){let{initTheme:b}=(0,e.A)();return(0,d.jsx)(d.Fragment,{children:a})}},50385:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i,metadata:()=>h});var d=c(5735),e=c(75329),f=c.n(e);c(61135);var g=c(89886);c(19201);let h={title:"9Router - AI Infrastructure Management",description:"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.",icons:{icon:"/favicon.svg"}};function i({children:a}){return(0,d.jsxs)("html",{lang:"en",suppressHydrationWarning:!0,children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,d.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,d.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap",rel:"stylesheet"})]}),(0,d.jsx)("body",{className:`${f().variable} font-sans antialiased`,children:(0,d.jsx)(g.ThemeProvider,{children:a})})]})}},53855:(a,b,c)=>{"use strict";c.d(b,{Jv:()=>n,Rg:()=>m,cb:()=>l});var d=c(55511),e=c.n(d),f=c(85567),g=c(3179),h=c(89718);let i=process.env.TUNNEL_WORKER_URL||"https://tunnel.9router.com",j="abcdefghijklmnpqrstuvwxyz23456789";async function k(a,b={}){let c=`${i}${a}`;return(await fetch(c,{...b,headers:{"Content-Type":"application/json",...b.headers}})).json()}async function l(){let a=(0,f.C7)();if(a&&a.tunnelUrl&&(0,g.nN)())return{success:!0,tunnelUrl:a.tunnelUrl,shortId:a.shortId,alreadyRunning:!0};(0,g.ss)();let b=function(){try{let{machineIdSync:a}=c(19713),b=a();return e().createHash("sha256").update(b+"9router-tunnel-salt").digest("hex").substring(0,16)}catch(a){return e().randomUUID().replace(/-/g,"").substring(0,16)}}(),d=a?.shortId||function(){let a="";for(let b=0;b<6;b++)a+=j.charAt(Math.floor(Math.random()*j.length));return a}(),i=a?.apiKey||function(a){let b="abcdefghijklmnopqrstuvwxyz0123456789",c="";for(let a=0;a<6;a++)c+=b.charAt(Math.floor(Math.random()*b.length));let d=e().createHmac("sha256","9router-tunnel-api-key-secret").update(a+c).digest("hex").slice(0,8);return`sk-${a}-${c}-${d}`}(b);await k("/api/session/create",{method:"POST",body:JSON.stringify({apiKey:i,shortId:d})});let l=await k("/api/tunnel/create",{method:"POST",body:JSON.stringify({apiKey:i})});if(l.error)throw Error(l.error);let{token:m,hostname:n}=l;return await (0,g.F0)(m),(0,f.LZ)({shortId:d,apiKey:i,tunnelUrl:n,machineId:b}),await (0,h.Xx)({tunnelEnabled:!0,tunnelUrl:n}),{success:!0,tunnelUrl:n,shortId:d}}async function m(){let a=(0,f.C7)();if((0,g.ss)(),a?.apiKey)try{await k("/api/tunnel/delete",{method:"DELETE",body:JSON.stringify({apiKey:a.apiKey})})}catch(a){}return a&&(0,f.LZ)({shortId:a.shortId,apiKey:a.apiKey,machineId:a.machineId,tunnelUrl:null}),await (0,h.Xx)({tunnelEnabled:!1,tunnelUrl:""}),{success:!0}}async function n(){let a=(0,f.C7)(),b=(0,g.nN)();return{enabled:!0===(await (0,h.getSettings)()).tunnelEnabled&&b,tunnelUrl:a?.tunnelUrl||"",shortId:a?.shortId||"",running:b}}},56680:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23))},60757:(a,b,c)=>{"use strict";c.d(b,{KC:()=>f,Xg:()=>e,vq:()=>d});let d={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.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"},{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"}],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:"kimi-k2",name:"Kimi K2"},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"deepseek-v3.2-chat",name:"DeepSeek V3.2 Chat"},{id:"minimax-m2.1",name:"MiniMax M2.1"},{id:"minimax-m2.5",name:"MiniMax M2.5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6",name:"GLM 4.6"},{id:"glm-5",name:"GLM 5"}],ag:[{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6"},{id:"gemini-3-1-pro-high",name:"Gemini 3.1 Pro High"},{id:"gemini-3-1-pro-low",name:"Gemini 3.1 Pro Low"},{id:"gemini-3-pro-high",name:"Gemini 3 Pro High"},{id:"gemini-3-pro-low",name:"Gemini 3 Pro Low"},{id:"gemini-3-flash",name:"Gemini 3 Flash"}],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:"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"}],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"}],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-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"}],openai:[{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o 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"}],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"}]},e={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",openai:"openai",anthropic:"anthropic",gemini:"gemini",openrouter:"openrouter",glm:"glm","glm-cn":"glm-cn",kimi:"kimi",minimax:"minimax","minimax-cn":"minimax-cn",deepseek:"deepseek",groq:"groq",xai:"xai",mistral:"mistral",perplexity:"perplexity",together:"together",fireworks:"fireworks",cerebras:"cerebras",cohere:"cohere",nvidia:"nvidia",nebius:"nebius",siliconflow:"siliconflow",hyperbolic:"hyperbolic"};function f(a){return d[e[a]||a]||[]}},61135:()=>{},69832:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,95547,23))},70440:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(88868);let e=async a=>[{type:"image/x-icon",sizes:"16x16",url:(0,d.fillMetadataSegment)(".",await a.params,"favicon.ico")+"?603d046c9a6fdfbb"}]},78335:()=>{},85440:(a,b,c)=>{Promise.resolve().then(c.bind(c,19308))},85567:(a,b,c)=>{"use strict";c.d(b,{C7:()=>n,Cr:()=>q,LZ:()=>o,r4:()=>r,xS:()=>p});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f),h=c(21820),i=c.n(h);let j=g().join(i().homedir(),".9router","tunnel"),k=g().join(j,"state.json"),l=g().join(j,"cloudflared.pid");function m(){e().existsSync(j)||e().mkdirSync(j,{recursive:!0})}function n(){try{if(e().existsSync(k))return JSON.parse(e().readFileSync(k,"utf8"))}catch(a){}return null}function o(a){m(),e().writeFileSync(k,JSON.stringify(a,null,2))}function p(a){m(),e().writeFileSync(l,a.toString())}function q(){try{if(e().existsSync(l))return parseInt(e().readFileSync(l,"utf8"))}catch(a){}return null}function r(){try{e().existsSync(l)&&e().unlinkSync(l)}catch(a){}}},89886:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/Working/router4/app/src/shared/components/ThemeProvider.js","ThemeProvider")},91431:(a,b,c)=>{"use strict";c.d(b,{KC:()=>d.KC,Xg:()=>d.Xg});var d=c(60757);Object.entries(c(96919).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a),Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))},96487:()=>{},96919:(a,b,c)=>{"use strict";c.d(b,{DI:()=>h,IS:()=>d,JH:()=>g,MA:()=>l,Q2:()=>k,fg:()=>f,gb:()=>j,mq:()=>i,wG:()=>n,wb:()=>o,zN:()=>e,zt:()=>m});let d={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"}},e={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"}},f={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"},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"},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"}},g="openai-compatible-",h="anthropic-compatible-";function i(a){return"string"==typeof a&&a.startsWith(g)}function j(a){return"string"==typeof a&&a.startsWith(h)}let k={...d,...e,...f},l={oauth:{id:"oauth",name:"OAuth",icon:"lock"},apikey:{id:"apikey",name:"API Key",icon:"key"}};function m(a){for(let b of Object.values(k))if(b.alias===a||b.id===a)return b;return null}function n(a){let b=k[a];return b?.alias||a}Object.values(k).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(k).reduce((a,b)=>(a[b.id]=b.alias,a),{});let o=["antigravity","kiro","github","codex"]},97868:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,81921,23)),Promise.resolve().then(c.t.bind(c,60440,23)),Promise.resolve().then(c.t.bind(c,84342,23)),Promise.resolve().then(c.t.bind(c,82265,23)),Promise.resolve().then(c.t.bind(c,35421,23)),Promise.resolve().then(c.t.bind(c,61335,23)),Promise.resolve().then(c.t.bind(c,70664,23)),Promise.resolve().then(c.bind(c,74661))},98592:(a,b,c)=>{Promise.resolve().then(c.bind(c,89886))}};
@@ -1,4 +1,4 @@
1
1
  "use strict";exports.id=9489,exports.ids=[9489],exports.modules={18910:(a,b,c)=>{c.d(b,{P:()=>f});var d=c(12557),e=c(43659);async function f({body:a,models:b,handleSingleModel:c,log:f}){let g=null,h=null,i=null;for(let e=0;e<b.length;e++){let j=b[e];f.info("COMBO",`Trying model ${e+1}/${b.length}: ${j}`);let k=await c(a,j);if(k.ok)return f.info("COMBO",`Model ${j} succeeded`),k;let l=k.statusText||"",m=null;try{let a=await k.clone().json();l=a?.error?.message||a?.error||a?.message||l,m=a?.retryAfter||null}catch{}if(m&&(!h||new Date(m)<new Date(h))&&(h=m),"string"!=typeof l)try{l=JSON.stringify(l)}catch{l=String(l)}let{shouldFallback:n}=(0,d.hk)(k.status,l);if(!n)return f.warn("COMBO",`Model ${j} failed (no fallback)`,{status:k.status}),k;g=l||String(k.status),i||(i=k.status),f.warn("COMBO",`Model ${j} failed, trying next`,{status:k.status})}let j=g||"All combo models unavailable";if(h){let a=(0,d.Qo)(h);return f.warn("COMBO",`All models failed | ${j} (${a})`),(0,e.wO)(406,j,h,a)}return f.warn("COMBO",`All models failed | ${j}`),new Response(JSON.stringify({error:{message:j}}),{status:406,headers:{"Content-Type":"application/json"}})}},27349:(a,b,c)=>{c.d(b,{c:()=>i});var d=c(57647),e=c(33110),f=c(14170),g=c(2255),h=c(71857);function i(a,b,c=""){if(!c.includes("claude-cli")||!a.messages?.length)return null;let l=a.messages,m=a=>"string"==typeof a?a:Array.isArray(a)?a.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"",n=!1,o=l[l.length-1];if(o?.role==="assistant"&&o.content?.[0]?.text==="{"&&(n=!0),n||"Warmup"===m(l[0]?.content)&&(n=!0),n||1!==l.length||l[0]?.role!=="user"||"count"===m(l[0]?.content)&&(n=!0),!n&&g.C8?.length){let a=l.filter(a=>"user"===a.role).map(a=>m(a.content)).join(" ");g.C8.some(b=>a.includes(b))&&(n=!0)}if(!n)return null;let p=(0,d.Tz)(a);return!1!==a.stream?function(a,b){let c=j(b),d=(0,e.Ws)(a);d.model=b;let g=k(c),i=[];for(let b of g){let c=(0,e.Y8)(f.h.OPENAI,a,b,d);if(c?.length>0)for(let b of c)i.push((0,h.v8)(b,a))}let l=(0,e.Y8)(f.h.OPENAI,a,null,d);if(l?.length>0)for(let b of l)i.push((0,h.v8)(b,a));return i.push("data: [DONE]\n\n"),{success:!0,response:new Response(i.join(""),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}})}}(p,b):function(a,b){let c=j(b);if(a===f.h.OPENAI)return{success:!0,response:new Response(JSON.stringify(c),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})};let d=(0,e.Ws)(a);d.model=b;let g=k(c),h=[];for(let b of g){let c=(0,e.Y8)(f.h.OPENAI,a,b,d);c?.length>0&&h.push(...c)}let i=(0,e.Y8)(f.h.OPENAI,a,null,d);return i?.length>0&&h.push(...i),{success:!0,response:new Response(JSON.stringify(function(a,b){if(!a||0===a.length)return j("unknown");let c=a[a.length-1];if(b===f.h.CLAUDE&&a.find(a=>"message_stop"===a.type)){a.find(a=>"content_block_delta"===a.type);let b=a.find(a=>"message_delta"===a.type),d=a.find(a=>"message_start"===a.type);d?.message&&(c=d.message,b?.usage&&(c.usage=b.usage))}return c}(h,a)),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}(p,b)}function j(a){let b=`chatcmpl-${Date.now()}`;return{id:b,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,message:{role:"assistant",content:"CLI Command Execution: Clear Terminal"},finish_reason:"stop"}],usage:{prompt_tokens:1,completion_tokens:1,total_tokens:2}}}function k(a){let{id:b,created:c,model:d,choices:e}=a;return[{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{role:"assistant",content:e[0].message.content},finish_reason:null}]},{id:b,object:"chat.completion.chunk",created:c,model:d,choices:[{index:0,delta:{},finish_reason:"stop"}],usage:a.usage}]}},52422:(a,b,c)=>{function d(a,b){let c;if(!a.trim())return;let d=a.match(/^event:\s*(.+)$/m),e=a.match(/^data:\s*(.+)$/m);if(!d||!e)return;let f=d[1].trim(),g=e[1].trim();if("[DONE]"!==g){try{c=JSON.parse(g)}catch{return}"response.created"===f?(b.responseId=c.response?.id||b.responseId,b.created=c.response?.created_at||b.created):"response.output_item.done"===f?b.items.set(c.output_index??0,c.item):"response.completed"===f?(b.status="completed",c.response?.usage&&(b.usage.input_tokens=c.response.usage.input_tokens||0,b.usage.output_tokens=c.response.usage.output_tokens||0,b.usage.total_tokens=c.response.usage.total_tokens||0)):"response.failed"===f&&(b.status="failed")}}c.d(b,{x:()=>f});let e={input_tokens:0,output_tokens:0,total_tokens:0};async function f(a){if(!a||"function"!=typeof a.getReader)return{id:`resp_${Date.now()}`,object:"response",created_at:Math.floor(Date.now()/1e3),status:"failed",output:[],usage:{...e}};let b=a.getReader(),c=new TextDecoder,f="",g={responseId:"",created:Math.floor(Date.now()/1e3),status:"in_progress",usage:{...e},items:new Map};try{for(;;){let{done:a,value:e}=await b.read();if(a)break;let h=(f+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(f=h.pop()||"",h))d(a,g)}f.trim()&&d(f,g)}finally{b.releaseLock()}let h=[],i=g.items.size>0?Math.max(...g.items.keys()):-1;for(let a=0;a<=i;a++)h.push(g.items.get(a)||{type:"message",content:[],role:"assistant"});return{id:g.responseId||`resp_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,object:"response",created_at:g.created,status:g.status||"completed",output:h,usage:g.usage}}},59657:(a,b,c)=>{function d({onDisconnect:a,onError:b,log:c,provider:e,model:f}={}){let g=new AbortController,h=Date.now(),i=!1,j=null,k=a=>{let b=Date.now()-h,c=e?.toUpperCase()||"UNKNOWN";console.log(`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}] 🌊 [STREAM] ${c} | ${f||"unknown"} | ${b}ms | ${a}`)};return{signal:g.signal,startTime:h,isConnected:()=>!i,handleDisconnect:(b="client_closed")=>{i||(i=!0,k(`disconnect: ${b}`),j=setTimeout(()=>{g.abort()},500),a?.({reason:b,duration:Date.now()-h}))},handleComplete:()=>{!i&&(i=!0,k("complete"),j&&(clearTimeout(j),j=null))},handleError:a=>{if(!i){if(i=!0,j&&(clearTimeout(j),j=null),"AbortError"===a.name)return void k("aborted");k(`error: ${a.message}`),b?.(a)}},abort:()=>g.abort()}}function e(a,b,c){var d;let e,f;return d={readable:a.body.pipeThrough(b),writable:{getWriter:()=>({abort:()=>{}})}},e=d.readable.getReader(),f=d.writable.getWriter(),new ReadableStream({async pull(a){if(!c.isConnected())return void a.close();try{let{done:b,value:d}=await e.read();if(b){c.handleComplete(),a.close();return}a.enqueue(d)}catch(b){c.handleError(b),a.error(b)}},cancel(a){c.handleDisconnect(a||"cancelled"),e.cancel(),f.abort()}})}c.d(b,{Jb:()=>e,jd:()=>d})},71336:(a,b,c)=>{c.d(b,{q7:()=>m});let d="u">typeof process&&process.versions?.node&&!0,e="u">typeof process&&process.env?.ENABLE_REQUEST_LOGS==="true",f=null,g=null,h=null;async function i(){if(d&&e&&!f)try{f=await Promise.resolve().then(c.t.bind(c,29021,23)),h=(g=await Promise.resolve().then(c.t.bind(c,33873,23))).join("u">typeof process&&process.cwd?process.cwd():".","logs")}catch{}}async function j(a,b,c){if(await i(),!f||!h)return null;try{f.existsSync(h)||f.mkdirSync(h,{recursive:!0});let d=function(a=new Date){let b=a=>String(a).padStart(2,"0"),c=a.getFullYear(),d=b(a.getMonth()+1),e=b(a.getDate()),f=b(a.getHours()),g=b(a.getMinutes()),h=b(a.getSeconds());return`${c}${d}${e}_${f}${g}${h}`}(),e=c.replace(/[/:]/g,"-"),i=`${a}_${b}_${e}_${d}`,j=g.join(h,i);return f.mkdirSync(j,{recursive:!0}),j}catch(a){return console.log("[LOG] Failed to create log session:",a.message),null}}function k(a,b,c){if(f&&a)try{let d=g.join(a,b);f.writeFileSync(d,JSON.stringify(c,null,2))}catch(a){console.log(`[LOG] Failed to write ${b}:`,a.message)}}function l(a){return a?{...a}:{}}async function m(a,b,c){if(!e)return{sessionPath:null,logClientRawRequest(){},logRawRequest(){},logOpenAIRequest(){},logTargetRequest(){},logProviderResponse(){},appendProviderChunk(){},appendOpenAIChunk(){},logConvertedResponse(){},appendConvertedChunk(){},logError(){}};let d=await j(a,b,c);return{get sessionPath(){return d},logClientRawRequest(a,b,c={}){k(d,"1_req_client.json",{timestamp:new Date().toISOString(),endpoint:a,headers:l(c),body:b})},logRawRequest(a,b={}){k(d,"2_req_source.json",{timestamp:new Date().toISOString(),headers:l(b),body:a})},logOpenAIRequest(a){k(d,"3_req_openai.json",{timestamp:new Date().toISOString(),body:a})},logTargetRequest(a,b,c){k(d,"4_req_target.json",{timestamp:new Date().toISOString(),url:a,headers:l(b),body:c})},logProviderResponse(a,b,c,e){k(d,"5_res_provider.json",{timestamp:new Date().toISOString(),status:a,statusText:b,headers:c?"function"==typeof c.entries?Object.fromEntries(c.entries()):c:{},body:e})},appendProviderChunk(a){if(f&&d)try{let b=g.join(d,"5_res_provider.txt");f.appendFileSync(b,a)}catch(a){}},appendOpenAIChunk(a){if(f&&d)try{let b=g.join(d,"6_res_openai.txt");f.appendFileSync(b,a)}catch(a){}},logConvertedResponse(a){k(d,"7_res_client.json",{timestamp:new Date().toISOString(),body:a})},appendConvertedChunk(a){if(f&&d)try{let b=g.join(d,"7_res_client.txt");f.appendFileSync(b,a)}catch(a){}},logError(a,b=null){k(d,"6_error.json",{timestamp:new Date().toISOString(),error:a?.message||String(a),stack:a?.stack,requestBody:b})}}}},71857:(a,b,c)=>{c.d(b,{i5:()=>n,l2:()=>o,lm:()=>g.lm,v8:()=>h.v8});var d=c(33110),e=c(14170),f=c(47370),g=c(73483),h=c(9024);let i=new TextDecoder,j=new TextEncoder,k="translate",l="passthrough";function m(a={}){let{mode:b=k,targetFormat:c,sourceFormat:n,provider:o=null,reqLogger:p=null,toolNameMap:q=null,model:r=null,connectionId:s=null,body:t=null,onStreamComplete:u=null,apiKey:v=null}=a,w="",x=null,y=b===k?{...(0,d.Ws)(n),provider:o,toolNameMap:q,model:r}:null,z=0,A="",B="",C=null;return new TransformStream({transform(a,f){C||(C=Date.now());let k=i.decode(a,{stream:!0});w+=k,p?.appendProviderChunk?.(k);let m=w.split("\n");for(let a of(w=m.pop()||"",m)){let i=a.trim();if(b===l){let b,c=!1;if(i.startsWith("data:")&&"[DONE]"!==i.slice(5).trim())try{let a=JSON.parse(i.slice(5).trim()),d=(0,h.A4)(a),f=!1;if(a.object||(a.object="chat.completion.chunk",f=!0),a.created||(a.created=Math.floor(Date.now()/1e3),f=!0),void 0!==a.prompt_filter_results&&(delete a.prompt_filter_results,f=!0),a?.choices)for(let b of a.choices)void 0!==b.content_filter_results&&(delete b.content_filter_results,f=!0);if(!(0,h.c2)(a,e.h.OPENAI))continue;let j=a.choices?.[0]?.delta,k=j?.content,l=j?.reasoning_content;k&&"string"==typeof k&&(z+=k.length,A+=k),l&&"string"==typeof l&&(z+=l.length,B+=l);let m=(0,g.f5)(a);m&&(x=m);let n=a.choices?.[0]?.finish_reason;if(n&&!(0,g.Gh)(a.usage)){let d=(0,g.OF)(t,z,e.h.OPENAI);a.usage=(0,g.WL)(d,e.h.OPENAI),b=`data: ${JSON.stringify(a)}
2
2
  `,x=d,c=!0}else if(n&&x){let d=(0,g.O9)(x);a.usage=(0,g.WL)(d,e.h.OPENAI),b=`data: ${JSON.stringify(a)}
3
3
  `,c=!0}else(d||f)&&(b=`data: ${JSON.stringify(a)}
4
- `,c=!0)}catch{}c||(b=a.startsWith("data:")&&!a.startsWith("data: ")?"data: "+a.slice(5)+"\n":a+"\n"),p?.appendConvertedChunk?.(b),f.enqueue(j.encode(b));continue}if(!i)continue;let k=(0,h.tV)(i);if(!k)continue;if(k&&k.done){let a="data: [DONE]\n\n";p?.appendConvertedChunk?.(a),f.enqueue(j.encode(a));continue}if(k.delta?.text&&(z+=k.delta.text.length,A+=k.delta.text),k.delta?.thinking&&(z+=k.delta.thinking.length,B+=k.delta.thinking),k.choices?.[0]?.delta?.content&&(z+=k.choices[0].delta.content.length,A+=k.choices[0].delta.content),k.choices?.[0]?.delta?.reasoning_content&&(z+=k.choices[0].delta.reasoning_content.length,B+=k.choices[0].delta.reasoning_content),k.candidates?.[0]?.content?.parts)for(let a of k.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(z+=a.text.length,!0===a.thought?B+=a.text:A+=a.text);let m=(0,g.f5)(k);m&&(y.usage=m);let o=(0,d.Y8)(c,n,k,y);if(o?._openaiIntermediate)for(let a of o._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(o?.length>0)for(let a of o){if(!(0,h.c2)(a,n))continue;let b="message_delta"===a.type||a.choices?.[0]?.finish_reason;if(y.finishReason&&b&&!(0,g.Gh)(a.usage)&&z>0){let b=(0,g.OF)(t,z,n);a.usage=(0,g.WL)(b,n),y.usage=b}else if(y.finishReason&&b&&y.usage){let b=(0,g.O9)(y.usage);a.usage=(0,g.WL)(b,n)}let c=(0,h.v8)(a,n);p?.appendConvertedChunk?.(c),f.enqueue(j.encode(c))}}},flush(a){(0,f.uw)(r,o,s,!1);try{let k=i.decode();if(k&&(w+=k),b===l){if(w){let b=w;w.startsWith("data:")&&!w.startsWith("data: ")&&(b="data: "+w.slice(5)),p?.appendConvertedChunk?.(b),a.enqueue(j.encode(b))}!(0,g.Gh)(x)&&z>0&&(x=(0,g.OF)(t,z,e.h.OPENAI)),(0,g.Gh)(x)?(0,g.IF)(o,x,r,s,v):(0,f.E5)({model:r,provider:o,connectionId:s,tokens:null,status:"200 OK"}).catch(()=>{});let b="data: [DONE]\n\n";p?.appendConvertedChunk?.(b),a.enqueue(j.encode(b)),u&&u({content:A,thinking:B},x,C);return}if(w.trim()){let b=(0,h.tV)(w.trim());if(b&&!b.done){let f=(0,d.Y8)(c,n,b,y);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){let c=(0,h.v8)(b,n);p?.appendConvertedChunk?.(c),a.enqueue(j.encode(c))}}}let m=(0,d.Y8)(c,n,null,y);if(m?._openaiIntermediate)for(let a of m._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(m?.length>0)for(let b of m){let c=(0,h.v8)(b,n);p?.appendConvertedChunk?.(c),a.enqueue(j.encode(c))}let q="data: [DONE]\n\n";p?.appendConvertedChunk?.(q),a.enqueue(j.encode(q)),!(0,g.Gh)(y?.usage)&&z>0&&(y.usage=(0,g.OF)(t,z,n)),(0,g.Gh)(y?.usage)?(0,g.IF)(y.provider||c,y.usage,r,s,v):(0,f.E5)({model:r,provider:o,connectionId:s,tokens:null,status:"200 OK"}).catch(()=>{}),u&&u({content:A,thinking:B},y?.usage,C)}catch(a){console.log("Error in flush:",a)}}})}function n(a,b,c=null,d=null,e=null,f=null,g=null,h=null,i=null,j=null){return m({mode:k,targetFormat:a,sourceFormat:b,provider:c,reqLogger:d,toolNameMap:e,model:f,connectionId:g,body:h,onStreamComplete:i,apiKey:j})}function o(a=null,b=null,c=null,d=null,e=null,f=null,g=null){return m({mode:l,provider:a,reqLogger:b,model:c,connectionId:d,body:e,onStreamComplete:f,apiKey:g})}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>o});var e=c(80238),f=c(89718),g=c(2525),h=c(92500),i=c(43659),j=c(18910),k=c(2255),l=c(7803),m=c(67828),n=a([h]);async function o(a,b=null){let c;try{c=await a.json()}catch{return l.warn("CHAT","Invalid JSON body"),(0,i.yj)(k.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:c,headers:Object.fromEntries(a.headers.entries())});let d=new URL(a.url),h=c.model,m=c.messages?.length||c.input?.length||0,n=c.tools?.length||0,q=c.reasoning_effort||c.reasoning?.effort||null;l.request("POST",`${d.pathname} | ${h} | ${m} msgs${n?` | ${n} tools`:""}${q?` | effort=${q}`:""}`);let r=a.headers.get("Authorization"),s=(0,e.Tr)(a);if(r&&s){let a=l.maskKey(s);l.debug("AUTH",`API Key: ${a}`)}else l.debug("AUTH","No API key provided (local mode)");if((await (0,f.getSettings)()).requireApiKey){if(!s)return l.warn("AUTH","Missing API key (requireApiKey=true)"),(0,i.yj)(k.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(s))return l.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,i.yj)(k.gx.UNAUTHORIZED,"Invalid API key")}if(!h)return l.warn("CHAT","Missing model"),(0,i.yj)(k.gx.BAD_REQUEST,"Missing model");let t=await (0,g.d_)(h);return t?(l.info("CHAT",`Combo "${h}" with ${t.length} models`),(0,j.P)({body:c,models:t,handleSingleModel:(c,d)=>p(c,d,b,a,s),log:l})):p(c,h,b,a,s)}async function p(a,b,c=null,d=null,f=null){let j=await (0,g.mA)(b);if(!j.provider)return l.warn("CHAT","Invalid model format",{model:b}),(0,i.yj)(k.gx.BAD_REQUEST,"Invalid model format");let{provider:n,model:o}=j;b!==`${n}/${o}`?l.info("ROUTING",`${b} → ${n}/${o}`):l.info("ROUTING",`Provider: ${n}, Model: ${o}`);let q=d?.headers?.get("user-agent")||"",r=null,s=null,t=null;for(;;){let b=await (0,e.c1)(n,r,o);if(!b||b.allRateLimited){if(b?.allRateLimited){let a=s||b.lastError||"Unavailable",c=t||Number(b.lastErrorCode)||k.gx.SERVICE_UNAVAILABLE;return l.warn("CHAT",`[${n}/${o}] ${a} (${b.retryAfterHuman})`),(0,i.wO)(c,`[${n}/${o}] ${a}`,b.retryAfter,b.retryAfterHuman)}if(!r)return l.error("AUTH",`No credentials for provider: ${n}`),(0,i.yj)(k.gx.BAD_REQUEST,`No credentials for provider: ${n}`);return l.warn("CHAT","No more accounts available",{provider:n}),(0,i.yj)(t||k.gx.SERVICE_UNAVAILABLE,s||"All accounts unavailable")}let d=b.connectionId.slice(0,8);l.info("AUTH",`Using ${n} account: ${d}...`);let g=await (0,m.eU)(n,b),j=await (0,h.w)({body:{...a,model:`${n}/${o}`},modelInfo:{provider:n,model:o},credentials:g,log:l,clientRawRequest:c,connectionId:b.connectionId,userAgent:q,apiKey:f,onCredentialsRefreshed:async a=>{await (0,m.vN)(b.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,e.Pt)(b.connectionId,b)}});if(j.success)return j.response;let{shouldFallback:p}=await (0,e.vk)(b.connectionId,j.status,j.error,n,o);if(p){l.warn("AUTH",`Account ${d}... unavailable (${j.status}), trying fallback`),r=b.connectionId,s=j.error,t=j.status;continue}return j.response}}h=(n.then?(await n)():n)[0],d()}catch(a){d(a)}})},92500:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{w:()=>w});var e=c(57647),f=c(33110),g=c(14170),h=c(71857),i=c(59657),j=c(73483),k=c(8590),l=c(71336),m=c(57247),n=c(43659),o=c(2255),p=c(27349),q=c(47370),r=c(55330),s=c(52422),t=a([r]);function u(a,b){let c={messages:a.messages||[],model:a.model,stream:b};for(let b of["temperature","top_p","top_k","max_tokens","max_completion_tokens","thinking","reasoning","enable_thinking","presence_penalty","frequency_penalty","seed","stop","tools","tool_choice","response_format","prediction","store","metadata","n","logprobs","top_logprobs","logit_bias","user","parallel_tool_calls"])void 0!==a[b]&&(c[b]=a[b]);return c}function v(a,b){let c=String(a||"").split("\n"),d=[];for(let a of c){let b=a.trim();if(!b.startsWith("data:"))continue;let c=b.slice(5).trim();if(c&&"[DONE]"!==c)try{d.push(JSON.parse(c))}catch{}}if(0===d.length)return null;let e=d[0],f=[],g=[],h="stop",i=null;for(let a of d){let b=a?.choices?.[0],c=b?.delta||{};"string"==typeof c.content&&c.content.length>0&&f.push(c.content),"string"==typeof c.reasoning_content&&c.reasoning_content.length>0&&g.push(c.reasoning_content),b?.finish_reason&&(h=b.finish_reason),a?.usage&&"object"==typeof a.usage&&(i=a.usage)}let j={role:"assistant",content:f.join("")};g.length>0&&(j.reasoning_content=g.join(""));let k={id:e.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:e.created||Math.floor(Date.now()/1e3),model:e.model||b||"unknown",choices:[{index:0,message:j,finish_reason:h}]};return i&&(k.usage=i),k}async function w({body:a,modelInfo:b,credentials:c,log:d,onCredentialsRefreshed:t,onRequestSuccess:w,onDisconnect:x,clientRawRequest:y,connectionId:z,userAgent:A,apiKey:B}){let C,D,E,F,G,{provider:H,model:I}=b,J=Date.now(),K=(0,e.Tz)(a),L=(0,p.c)(a,I,A);if(L)return L;let M=m.Xg[H]||H,N=(0,m.ux)(M,I)||(0,e.jJ)(H),O=!0===a.stream,P="openai"===H||"codex"===H,Q=!!P||!1!==a.stream,R=await (0,l.q7)(K,N,I);y&&R.logClientRawRequest(y.endpoint,y.body,y.headers),R.logRawRequest(a),d?.debug?.("FORMAT",`${K} → ${N} | stream=${Q}`);let S=a,T=(S=(0,f.GH)(K,N,I,a,Q,c,H,R))._toolNameMap;delete S._toolNameMap,S.model=I;let U=(0,r.SB)(H);(0,q.uw)(I,H,z,!0),(0,q.E5)({model:I,provider:H,connectionId:z,status:"PENDING"}).catch(()=>{});let V=S.messages?.length||S.contents?.length||S.request?.contents?.length||0;d?.debug?.("REQUEST",`${H.toUpperCase()} | ${I} | ${V} msgs`);let W=(0,i.jd)({onDisconnect:a=>{(0,q.uw)(I,H,z,!1),x&&x(a)},onError:a=>{(0,q.uw)(I,H,z,!1)},log:d,provider:H,model:I});try{let a=await U.execute({model:I,body:S,stream:Q,credentials:c,signal:W.signal,log:d});C=a.response,D=a.url,E=a.headers,F=a.transformedBody,R.logTargetRequest(D,E,F)}catch(d){(0,q.uw)(I,H,z,!1),(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${"AbortError"===d.name?499:o.gx.BAD_GATEWAY}`}).catch(()=>{});let b={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:S||null,providerResponse:null,response:{error:d.message||String(d),status:"AbortError"===d.name?499:502,thinking:null},status:"error"};if((0,q.ox)(b).catch(()=>{}),"AbortError"===d.name)return W.handleError(d),(0,n.A1)(499,"Request aborted");let c=(0,n.lR)(d,H,I,o.gx.BAD_GATEWAY);return console.log(`${h.lm.red}[ERROR] ${c}${h.lm.reset}`),(0,n.A1)(o.gx.BAD_GATEWAY,c)}if(C.status===o.gx.UNAUTHORIZED||C.status===o.gx.FORBIDDEN){let a=await (0,k.qZ)(()=>U.refreshCredentials(c,d),3,d);if(a?.accessToken||a?.copilotToken){d?.info?.("TOKEN",`${H.toUpperCase()} | refreshed`),Object.assign(c,a),t&&a&&await t(a);try{let a=await U.execute({model:I,body:S,stream:Q,credentials:c,signal:W.signal,log:d});a.response.ok&&(C=a.response,D=a.url)}catch(a){d?.warn?.("TOKEN",`${H.toUpperCase()} | retry after refresh failed`)}}else d?.warn?.("TOKEN",`${H.toUpperCase()} | refresh failed`)}if(!C.ok){(0,q.uw)(I,H,z,!1);let{statusCode:b,message:c,retryAfterMs:e}=await (0,n.zL)(C,H);(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${b}`}).catch(()=>{});let f={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{error:c,status:b,thinking:null},status:"error"};(0,q.ox)(f).catch(()=>{});let g=(0,n.lR)(Error(c),H,I,b);if(console.log(`${h.lm.red}[ERROR] ${g}${h.lm.reset}`),e&&"antigravity"===H){let a=Math.ceil(e/1e3);d?.debug?.("RETRY",`Antigravity quota reset in ${a}s (${e}ms)`)}return R.logError(Error(c),F||S),(0,n.A1)(b,g,e)}if(!O&&P){(0,q.uw)(I,H,z,!1);let b=C.headers.get("content-type")||"";if(b.includes("text/event-stream")||""===b&&"codex"===H){if("openai-responses"===K)try{let b=await (0,s.x)(C.body);d?.info?.("STREAM",`Converted Responses API SSE → JSON for non-streaming client`),w&&await w();let c=b.usage||{};if((0,q.E5)({model:I,provider:H,connectionId:z,tokens:c,status:"200 OK"}).catch(()=>{}),c&&"object"==typeof c){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [USAGE] ${H.toUpperCase()} | in=${c?.input_tokens||0} | out=${c?.output_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0},timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0}).catch(()=>{})}let e=Date.now()-J;return(0,q.ox)({provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:e,total:e},tokens:{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0},request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{content:b.output?.[0]?.content?.[0]?.text||null,thinking:null,finish_reason:b.status||"unknown"},status:"success",endpoint:y?.endpoint||null}).catch(()=>{}),{success:!0,response:new Response(JSON.stringify(b),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Responses API SSE→JSON conversion failed:",a),(0,n.A1)(o.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}try{let b=await C.text(),c=v(b,I);if(c){w&&await w();let b=c.usage||{};(0,q.E5)({model:I,provider:H,connectionId:z,tokens:b,status:"200 OK"}).catch(()=>{}),b&&"object"==typeof b&&(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:b,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(()=>{});let d=Date.now()-J;return(0,q.ox)({provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:d,total:d},tokens:b,request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{content:c.choices?.[0]?.message?.content||null,thinking:c.choices?.[0]?.message?.reasoning_content||null,finish_reason:c.choices?.[0]?.finish_reason||"unknown"},status:"success",endpoint:y?.endpoint||null}).catch(()=>{}),{success:!0,response:new Response(JSON.stringify(c),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}return(0,n.A1)(o.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request")}catch(a){return console.error("[ChatCore] Chat Completions SSE→JSON conversion failed:",a),(0,n.A1)(o.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}}}if(!Q){var X;let b;if((0,q.uw)(I,H,z,!1),(C.headers.get("content-type")||"").includes("text/event-stream")){let a=await C.text(),c=v(a,I);if(!c)return(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${o.gx.BAD_GATEWAY}`}).catch(()=>{}),(0,n.A1)(o.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");b=c}else try{b=await C.json()}catch(a){return(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${o.gx.BAD_GATEWAY}`}).catch(()=>{}),console.error(`[ChatCore] Failed to parse JSON response from ${H}:`,a.message),(0,n.A1)(o.gx.BAD_GATEWAY,`Invalid JSON response from ${H}`)}R.logProviderResponse(C.status,C.statusText,C.headers,b),w&&await w();let c=(X=b,X&&"object"==typeof X?X.usage&&"object"==typeof X.usage&&void 0!==X.usage.input_tokens?{prompt_tokens:X.usage.input_tokens||0,completion_tokens:X.usage.output_tokens||0,cache_read_input_tokens:X.usage.cache_read_input_tokens,cache_creation_input_tokens:X.usage.cache_creation_input_tokens}:X.usage&&"object"==typeof X.usage&&void 0!==X.usage.prompt_tokens?{prompt_tokens:X.usage.prompt_tokens||0,completion_tokens:X.usage.completion_tokens||0,cached_tokens:X.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:X.usage.completion_tokens_details?.reasoning_tokens}:X.usageMetadata&&"object"==typeof X.usageMetadata?{prompt_tokens:X.usageMetadata.promptTokenCount||0,completion_tokens:X.usageMetadata.candidatesTokenCount||0,reasoning_tokens:X.usageMetadata.thoughtsTokenCount}:null:null);if((0,q.E5)({model:I,provider:H,connectionId:z,tokens:c,status:"200 OK"}).catch(()=>{}),c&&"object"==typeof c){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [USAGE] ${H.toUpperCase()} | in=${c?.prompt_tokens||0} | out=${c?.completion_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:c,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(a=>{console.error("Failed to save usage stats:",a.message)})}let d=(0,f.nZ)(N,K)?function(a,b,c){if(b===c||b===g.h.OPENAI)return a;if(b===g.h.GEMINI||b===g.h.ANTIGRAVITY||b===g.h.GEMINI_CLI){let b=a.response||a;if(!b?.candidates?.[0])return a;let c=b.candidates[0],d=c.content,e=b.usageMetadata||a.usageMetadata,f="",g=[],h="";if(d?.parts)for(let a of d.parts)!0===a.thought&&a.text?h+=a.text:void 0!==a.text&&(f+=a.text),a.functionCall&&g.push({id:`call_${a.functionCall.name}_${Date.now()}_${g.length}`,type:"function",function:{name:a.functionCall.name,arguments:JSON.stringify(a.functionCall.args||{})}});let i={role:"assistant"};f&&(i.content=f),h&&(i.reasoning_content=h),g.length>0&&(i.tool_calls=g),i.content||i.tool_calls||(i.content="");let j=(c.finishReason||"stop").toLowerCase();"stop"===j&&g.length>0&&(j="tool_calls");let k={id:`chatcmpl-${b.responseId||Date.now()}`,object:"chat.completion",created:Math.floor(new Date(b.createTime||Date.now()).getTime()/1e3),model:b.modelVersion||"gemini",choices:[{index:0,message:i,finish_reason:j}]};return e&&(k.usage={prompt_tokens:(e.promptTokenCount||0)+(e.thoughtsTokenCount||0),completion_tokens:e.candidatesTokenCount||0,total_tokens:e.totalTokenCount||0},e.thoughtsTokenCount>0&&(k.usage.completion_tokens_details={reasoning_tokens:e.thoughtsTokenCount})),k}if(b===g.h.CLAUDE){if(!a.content)return a;let b="",c="",d=[];for(let e of a.content)"text"===e.type?b+=e.text:"thinking"===e.type?c+=e.thinking||"":"tool_use"===e.type&&d.push({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.input||{})}});let e={role:"assistant"};b&&(e.content=b),c&&(e.reasoning_content=c),d.length>0&&(e.tool_calls=d),e.content||e.tool_calls||(e.content="");let f=a.stop_reason||"stop";"end_turn"===f&&(f="stop"),"tool_use"===f&&(f="tool_calls");let g={id:`chatcmpl-${a.id||Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a.model||"claude",choices:[{index:0,message:e,finish_reason:f}]};return a.usage&&(g.usage={prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,total_tokens:(a.usage.input_tokens||0)+(a.usage.output_tokens||0)}),g}return a}(b,N,K):b;if(d.object||(d.object="chat.completion"),d.created||(d.created=Math.floor(Date.now()/1e3)),void 0!==d.prompt_filter_results&&delete d.prompt_filter_results,d?.choices)for(let a of d.choices)void 0!==a.content_filter_results&&delete a.content_filter_results;if(d?.usage){let a=(0,j.O9)(d.usage);d.usage=(0,j.WL)(a,K)}R.logConvertedResponse(d);let e=Date.now()-J,i={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:e,total:e},tokens:c||{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:b||null,response:{content:d?.choices?.[0]?.message?.content||d?.content||null,thinking:d?.choices?.[0]?.message?.reasoning_content||d?.reasoning_content||null,finish_reason:d?.choices?.[0]?.finish_reason||"unknown"},status:"success",endpoint:y?.endpoint||null};return(0,q.ox)(i).catch(a=>{console.error("[RequestDetail] Failed to save:",a.message)}),{success:!0,response:new Response(JSON.stringify(d),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}w&&await w();let Y=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,Z=(b,c,d)=>{let e={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:d?d-J:Date.now()-J,total:Date.now()-J},tokens:c||{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:b.content||"[Empty streaming response]",response:{content:b.content||"[Empty streaming response]",thinking:b.thinking||null,type:"streaming"},status:"success",id:Y};if((0,q.ox)(e).catch(a=>{console.error("[RequestDetail] Failed to update streaming content:",a.message)}),c&&"object"==typeof c){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [STREAM USAGE] ${H.toUpperCase()} | in=${c?.prompt_tokens||0} | out=${c?.completion_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:c,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(a=>{console.error("Failed to save streaming usage stats:",a.message)})}},$=A?.toLowerCase().includes("droid")||A?.toLowerCase().includes("codex-cli");if("codex"!==H||"openai-responses"!==N||$)(0,f.nZ)(N,K)?(d?.debug?.("STREAM",`Translation mode: ${N} → ${K}`),G=(0,h.i5)(N,K,H,R,T,I,z,a,Z,B)):(d?.debug?.("STREAM","Standard passthrough mode"),G=(0,h.l2)(H,R,I,z,a,Z,B));else{let b=K===g.h.CLAUDE?g.h.CLAUDE:g.h.OPENAI;d?.debug?.("STREAM",`Codex translation mode: openai-responses → ${b}`),G=(0,h.i5)("openai-responses",b,H,R,T,I,z,a,Z,B)}let _=(0,i.Jb)(C,G,W);Date.now();let aa={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:"[Streaming - raw response not captured]",response:{content:"[Streaming in progress...]",thinking:null,type:"streaming"},status:"success",id:Y};return(0,q.ox)(aa).catch(a=>{console.error("[RequestDetail] Failed to save streaming request:",a.message)}),{success:!0,response:new Response(_,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}})}}r=(t.then?(await t)():t)[0],d()}catch(a){d(a)}})}};
4
+ `,c=!0)}catch{}c||(b=a.startsWith("data:")&&!a.startsWith("data: ")?"data: "+a.slice(5)+"\n":a+"\n"),p?.appendConvertedChunk?.(b),f.enqueue(j.encode(b));continue}if(!i)continue;let k=(0,h.tV)(i);if(!k)continue;if(k&&k.done){let a="data: [DONE]\n\n";p?.appendConvertedChunk?.(a),f.enqueue(j.encode(a));continue}if(k.delta?.text&&(z+=k.delta.text.length,A+=k.delta.text),k.delta?.thinking&&(z+=k.delta.thinking.length,B+=k.delta.thinking),k.choices?.[0]?.delta?.content&&(z+=k.choices[0].delta.content.length,A+=k.choices[0].delta.content),k.choices?.[0]?.delta?.reasoning_content&&(z+=k.choices[0].delta.reasoning_content.length,B+=k.choices[0].delta.reasoning_content),k.candidates?.[0]?.content?.parts)for(let a of k.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(z+=a.text.length,!0===a.thought?B+=a.text:A+=a.text);let m=(0,g.f5)(k);m&&(y.usage=m);let o=(0,d.Y8)(c,n,k,y);if(o?._openaiIntermediate)for(let a of o._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(o?.length>0)for(let a of o){if(!(0,h.c2)(a,n))continue;let b="message_delta"===a.type||a.choices?.[0]?.finish_reason;if(y.finishReason&&b&&!(0,g.Gh)(a.usage)&&z>0){let b=(0,g.OF)(t,z,n);a.usage=(0,g.WL)(b,n),y.usage=b}else if(y.finishReason&&b&&y.usage){let b=(0,g.O9)(y.usage);a.usage=(0,g.WL)(b,n)}let c=(0,h.v8)(a,n);p?.appendConvertedChunk?.(c),f.enqueue(j.encode(c))}}},flush(a){(0,f.uw)(r,o,s,!1);try{let k=i.decode();if(k&&(w+=k),b===l){if(w){let b=w;w.startsWith("data:")&&!w.startsWith("data: ")&&(b="data: "+w.slice(5)),p?.appendConvertedChunk?.(b),a.enqueue(j.encode(b))}!(0,g.Gh)(x)&&z>0&&(x=(0,g.OF)(t,z,e.h.OPENAI)),(0,g.Gh)(x)?(0,g.IF)(o,x,r,s,v):(0,f.E5)({model:r,provider:o,connectionId:s,tokens:null,status:"200 OK"}).catch(()=>{});let b="data: [DONE]\n\n";p?.appendConvertedChunk?.(b),a.enqueue(j.encode(b)),u&&u({content:A,thinking:B},x,C);return}if(w.trim()){let b=(0,h.tV)(w.trim());if(b&&!b.done){let f=(0,d.Y8)(c,n,b,y);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){let c=(0,h.v8)(b,n);p?.appendConvertedChunk?.(c),a.enqueue(j.encode(c))}}}let m=(0,d.Y8)(c,n,null,y);if(m?._openaiIntermediate)for(let a of m._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);p?.appendOpenAIChunk?.(b)}if(m?.length>0)for(let b of m){let c=(0,h.v8)(b,n);p?.appendConvertedChunk?.(c),a.enqueue(j.encode(c))}let q="data: [DONE]\n\n";p?.appendConvertedChunk?.(q),a.enqueue(j.encode(q)),!(0,g.Gh)(y?.usage)&&z>0&&(y.usage=(0,g.OF)(t,z,n)),(0,g.Gh)(y?.usage)?(0,g.IF)(y.provider||c,y.usage,r,s,v):(0,f.E5)({model:r,provider:o,connectionId:s,tokens:null,status:"200 OK"}).catch(()=>{}),u&&u({content:A,thinking:B},y?.usage,C)}catch(a){console.log("Error in flush:",a)}}})}function n(a,b,c=null,d=null,e=null,f=null,g=null,h=null,i=null,j=null){return m({mode:k,targetFormat:a,sourceFormat:b,provider:c,reqLogger:d,toolNameMap:e,model:f,connectionId:g,body:h,onStreamComplete:i,apiKey:j})}function o(a=null,b=null,c=null,d=null,e=null,f=null,g=null){return m({mode:l,provider:a,reqLogger:b,model:c,connectionId:d,body:e,onStreamComplete:f,apiKey:g})}},79489:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{P:()=>o});var e=c(80238),f=c(89718),g=c(2525),h=c(92500),i=c(43659),j=c(18910),k=c(2255),l=c(7803),m=c(67828),n=a([h]);async function o(a,b=null){let c;try{c=await a.json()}catch{return l.warn("CHAT","Invalid JSON body"),(0,i.yj)(k.gx.BAD_REQUEST,"Invalid JSON body")}b||(b={endpoint:new URL(a.url).pathname,body:c,headers:Object.fromEntries(a.headers.entries())});let d=new URL(a.url),h=c.model,m=c.messages?.length||c.input?.length||0,n=c.tools?.length||0,q=c.reasoning_effort||c.reasoning?.effort||null;l.request("POST",`${d.pathname} | ${h} | ${m} msgs${n?` | ${n} tools`:""}${q?` | effort=${q}`:""}`);let r=a.headers.get("Authorization"),s=(0,e.Tr)(a);if(r&&s){let a=l.maskKey(s);l.debug("AUTH",`API Key: ${a}`)}else l.debug("AUTH","No API key provided (local mode)");if((await (0,f.getSettings)()).requireApiKey){if(!s)return l.warn("AUTH","Missing API key (requireApiKey=true)"),(0,i.yj)(k.gx.UNAUTHORIZED,"Missing API key");if(!await (0,e.kI)(s))return l.warn("AUTH","Invalid API key (requireApiKey=true)"),(0,i.yj)(k.gx.UNAUTHORIZED,"Invalid API key")}if(!h)return l.warn("CHAT","Missing model"),(0,i.yj)(k.gx.BAD_REQUEST,"Missing model");let t=await (0,g.d_)(h);return t?(l.info("CHAT",`Combo "${h}" with ${t.length} models`),(0,j.P)({body:c,models:t,handleSingleModel:(c,d)=>p(c,d,b,a,s),log:l})):p(c,h,b,a,s)}async function p(a,b,c=null,d=null,f=null){let j=await (0,g.mA)(b);if(!j.provider)return l.warn("CHAT","Invalid model format",{model:b}),(0,i.yj)(k.gx.BAD_REQUEST,"Invalid model format");let{provider:n,model:o}=j;b!==`${n}/${o}`?l.info("ROUTING",`${b} → ${n}/${o}`):l.info("ROUTING",`Provider: ${n}, Model: ${o}`);let q=d?.headers?.get("user-agent")||"",r=null,s=null,t=null;for(;;){let b=await (0,e.c1)(n,r,o);if(!b||b.allRateLimited){if(b?.allRateLimited){let a=s||b.lastError||"Unavailable",c=t||Number(b.lastErrorCode)||k.gx.SERVICE_UNAVAILABLE;return l.warn("CHAT",`[${n}/${o}] ${a} (${b.retryAfterHuman})`),(0,i.wO)(c,`[${n}/${o}] ${a}`,b.retryAfter,b.retryAfterHuman)}if(!r)return l.error("AUTH",`No credentials for provider: ${n}`),(0,i.yj)(k.gx.BAD_REQUEST,`No credentials for provider: ${n}`);return l.warn("CHAT","No more accounts available",{provider:n}),(0,i.yj)(t||k.gx.SERVICE_UNAVAILABLE,s||"All accounts unavailable")}let d=b.connectionId.slice(0,8);l.info("AUTH",`Using ${n} account: ${d}...`);let g=await (0,m.eU)(n,b),j=await (0,h.w)({body:{...a,model:`${n}/${o}`},modelInfo:{provider:n,model:o},credentials:g,log:l,clientRawRequest:c,connectionId:b.connectionId,userAgent:q,apiKey:f,onCredentialsRefreshed:async a=>{await (0,m.vN)(b.connectionId,{accessToken:a.accessToken,refreshToken:a.refreshToken,providerSpecificData:a.providerSpecificData,testStatus:"active"})},onRequestSuccess:async()=>{await (0,e.Pt)(b.connectionId,b)}});if(j.success)return j.response;let{shouldFallback:p}=await (0,e.vk)(b.connectionId,j.status,j.error,n,o);if(p){l.warn("AUTH",`Account ${d}... unavailable (${j.status}), trying fallback`),r=b.connectionId,s=j.error,t=j.status;continue}return j.response}}h=(n.then?(await n)():n)[0],d()}catch(a){d(a)}})},92500:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{w:()=>w});var e=c(57647),f=c(33110),g=c(14170),h=c(71857),i=c(59657),j=c(73483),k=c(8590),l=c(71336),m=c(57247),n=c(43659),o=c(2255),p=c(27349),q=c(47370),r=c(55330),s=c(52422),t=a([r]);function u(a,b){let c={messages:a.messages||[],model:a.model,stream:b};for(let b of["temperature","top_p","top_k","max_tokens","max_completion_tokens","thinking","reasoning","enable_thinking","presence_penalty","frequency_penalty","seed","stop","tools","tool_choice","response_format","prediction","store","metadata","n","logprobs","top_logprobs","logit_bias","user","parallel_tool_calls"])void 0!==a[b]&&(c[b]=a[b]);return c}function v(a,b){let c=String(a||"").split("\n"),d=[];for(let a of c){let b=a.trim();if(!b.startsWith("data:"))continue;let c=b.slice(5).trim();if(c&&"[DONE]"!==c)try{d.push(JSON.parse(c))}catch{}}if(0===d.length)return null;let e=d[0],f=[],g=[],h="stop",i=null;for(let a of d){let b=a?.choices?.[0],c=b?.delta||{};"string"==typeof c.content&&c.content.length>0&&f.push(c.content),"string"==typeof c.reasoning_content&&c.reasoning_content.length>0&&g.push(c.reasoning_content),b?.finish_reason&&(h=b.finish_reason),a?.usage&&"object"==typeof a.usage&&(i=a.usage)}let j={role:"assistant",content:f.join("")};g.length>0&&(j.reasoning_content=g.join(""));let k={id:e.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:e.created||Math.floor(Date.now()/1e3),model:e.model||b||"unknown",choices:[{index:0,message:j,finish_reason:h}]};return i&&(k.usage=i),k}async function w({body:a,modelInfo:b,credentials:c,log:d,onCredentialsRefreshed:t,onRequestSuccess:w,onDisconnect:x,clientRawRequest:y,connectionId:z,userAgent:A,apiKey:B}){let C,D,E,F,G,{provider:H,model:I}=b,J=Date.now(),K=(0,e.Tz)(a),L=(0,p.c)(a,I,A);if(L)return L;let M=m.Xg[H]||H,N=(0,m.ux)(M,I)||(0,e.jJ)(H),O=!0===a.stream,P="openai"===H||"codex"===H,Q=!!P||!1!==a.stream,R=await (0,l.q7)(K,N,I);y&&R.logClientRawRequest(y.endpoint,y.body,y.headers),R.logRawRequest(a),d?.debug?.("FORMAT",`${K} → ${N} | stream=${Q}`);let S=a,T=(S=(0,f.GH)(K,N,I,a,Q,c,H,R))._toolNameMap;delete S._toolNameMap,S.model=I;let U=(0,r.SB)(H);(0,q.uw)(I,H,z,!0),(0,q.E5)({model:I,provider:H,connectionId:z,status:"PENDING"}).catch(()=>{});let V=S.messages?.length||S.contents?.length||S.request?.contents?.length||0;d?.debug?.("REQUEST",`${H.toUpperCase()} | ${I} | ${V} msgs`);let W=(0,i.jd)({onDisconnect:a=>{(0,q.uw)(I,H,z,!1),x&&x(a)},onError:a=>{(0,q.uw)(I,H,z,!1)},log:d,provider:H,model:I});try{let a=await U.execute({model:I,body:S,stream:Q,credentials:c,signal:W.signal,log:d});C=a.response,D=a.url,E=a.headers,F=a.transformedBody,R.logTargetRequest(D,E,F)}catch(d){(0,q.uw)(I,H,z,!1,!0),(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${"AbortError"===d.name?499:o.gx.BAD_GATEWAY}`}).catch(()=>{});let b={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:S||null,providerResponse:null,response:{error:d.message||String(d),status:"AbortError"===d.name?499:502,thinking:null},status:"error"};if((0,q.ox)(b).catch(()=>{}),"AbortError"===d.name)return W.handleError(d),(0,n.A1)(499,"Request aborted");let c=(0,n.lR)(d,H,I,o.gx.BAD_GATEWAY);return console.log(`${h.lm.red}[ERROR] ${c}${h.lm.reset}`),(0,n.A1)(o.gx.BAD_GATEWAY,c)}if(C.status===o.gx.UNAUTHORIZED||C.status===o.gx.FORBIDDEN){let a=await (0,k.qZ)(()=>U.refreshCredentials(c,d),3,d);if(a?.accessToken||a?.copilotToken){d?.info?.("TOKEN",`${H.toUpperCase()} | refreshed`),Object.assign(c,a),t&&a&&await t(a);try{let a=await U.execute({model:I,body:S,stream:Q,credentials:c,signal:W.signal,log:d});a.response.ok&&(C=a.response,D=a.url)}catch(a){d?.warn?.("TOKEN",`${H.toUpperCase()} | retry after refresh failed`)}}else d?.warn?.("TOKEN",`${H.toUpperCase()} | refresh failed`)}if(!C.ok){(0,q.uw)(I,H,z,!1,!0);let{statusCode:b,message:c,retryAfterMs:e}=await (0,n.zL)(C,H);(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${b}`}).catch(()=>{});let f={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{error:c,status:b,thinking:null},status:"error"};(0,q.ox)(f).catch(()=>{});let g=(0,n.lR)(Error(c),H,I,b);if(console.log(`${h.lm.red}[ERROR] ${g}${h.lm.reset}`),e&&"antigravity"===H){let a=Math.ceil(e/1e3);d?.debug?.("RETRY",`Antigravity quota reset in ${a}s (${e}ms)`)}return R.logError(Error(c),F||S),(0,n.A1)(b,g,e)}if(!O&&P){(0,q.uw)(I,H,z,!1);let b=C.headers.get("content-type")||"";if(b.includes("text/event-stream")||""===b&&"codex"===H){if("openai-responses"===K)try{let b=await (0,s.x)(C.body);d?.info?.("STREAM",`Converted Responses API SSE → JSON for non-streaming client`),w&&await w();let c=b.usage||{};if((0,q.E5)({model:I,provider:H,connectionId:z,tokens:c,status:"200 OK"}).catch(()=>{}),c&&"object"==typeof c){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [USAGE] ${H.toUpperCase()} | in=${c?.input_tokens||0} | out=${c?.output_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0},timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0}).catch(()=>{})}let e=Date.now()-J;return(0,q.ox)({provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:e,total:e},tokens:{prompt_tokens:c.input_tokens||0,completion_tokens:c.output_tokens||0},request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{content:b.output?.[0]?.content?.[0]?.text||null,thinking:null,finish_reason:b.status||"unknown"},status:"success",endpoint:y?.endpoint||null}).catch(()=>{}),{success:!0,response:new Response(JSON.stringify(b),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Responses API SSE→JSON conversion failed:",a),(0,n.A1)(o.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}try{let b=await C.text(),c=v(b,I);if(c){w&&await w();let b=c.usage||{};(0,q.E5)({model:I,provider:H,connectionId:z,tokens:b,status:"200 OK"}).catch(()=>{}),b&&"object"==typeof b&&(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:b,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(()=>{});let d=Date.now()-J;return(0,q.ox)({provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:d,total:d},tokens:b,request:u(a,Q),providerRequest:F||S||null,providerResponse:null,response:{content:c.choices?.[0]?.message?.content||null,thinking:c.choices?.[0]?.message?.reasoning_content||null,finish_reason:c.choices?.[0]?.finish_reason||"unknown"},status:"success",endpoint:y?.endpoint||null}).catch(()=>{}),{success:!0,response:new Response(JSON.stringify(c),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}return(0,n.A1)(o.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request")}catch(a){return console.error("[ChatCore] Chat Completions SSE→JSON conversion failed:",a),(0,n.A1)(o.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}}}if(!Q){var X;let b;if((0,q.uw)(I,H,z,!1),(C.headers.get("content-type")||"").includes("text/event-stream")){let a=await C.text(),c=v(a,I);if(!c)return(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${o.gx.BAD_GATEWAY}`}).catch(()=>{}),(0,n.A1)(o.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");b=c}else try{b=await C.json()}catch(a){return(0,q.E5)({model:I,provider:H,connectionId:z,status:`FAILED ${o.gx.BAD_GATEWAY}`}).catch(()=>{}),console.error(`[ChatCore] Failed to parse JSON response from ${H}:`,a.message),(0,n.A1)(o.gx.BAD_GATEWAY,`Invalid JSON response from ${H}`)}R.logProviderResponse(C.status,C.statusText,C.headers,b),w&&await w();let c=(X=b,X&&"object"==typeof X?X.usage&&"object"==typeof X.usage&&void 0!==X.usage.input_tokens?{prompt_tokens:X.usage.input_tokens||0,completion_tokens:X.usage.output_tokens||0,cache_read_input_tokens:X.usage.cache_read_input_tokens,cache_creation_input_tokens:X.usage.cache_creation_input_tokens}:X.usage&&"object"==typeof X.usage&&void 0!==X.usage.prompt_tokens?{prompt_tokens:X.usage.prompt_tokens||0,completion_tokens:X.usage.completion_tokens||0,cached_tokens:X.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:X.usage.completion_tokens_details?.reasoning_tokens}:X.usageMetadata&&"object"==typeof X.usageMetadata?{prompt_tokens:X.usageMetadata.promptTokenCount||0,completion_tokens:X.usageMetadata.candidatesTokenCount||0,reasoning_tokens:X.usageMetadata.thoughtsTokenCount}:null:null);if((0,q.E5)({model:I,provider:H,connectionId:z,tokens:c,status:"200 OK"}).catch(()=>{}),c&&"object"==typeof c){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [USAGE] ${H.toUpperCase()} | in=${c?.prompt_tokens||0} | out=${c?.completion_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:c,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(a=>{console.error("Failed to save usage stats:",a.message)})}let d=(0,f.nZ)(N,K)?function(a,b,c){if(b===c||b===g.h.OPENAI)return a;if(b===g.h.GEMINI||b===g.h.ANTIGRAVITY||b===g.h.GEMINI_CLI){let b=a.response||a;if(!b?.candidates?.[0])return a;let c=b.candidates[0],d=c.content,e=b.usageMetadata||a.usageMetadata,f="",g=[],h="";if(d?.parts)for(let a of d.parts)!0===a.thought&&a.text?h+=a.text:void 0!==a.text&&(f+=a.text),a.functionCall&&g.push({id:`call_${a.functionCall.name}_${Date.now()}_${g.length}`,type:"function",function:{name:a.functionCall.name,arguments:JSON.stringify(a.functionCall.args||{})}});let i={role:"assistant"};f&&(i.content=f),h&&(i.reasoning_content=h),g.length>0&&(i.tool_calls=g),i.content||i.tool_calls||(i.content="");let j=(c.finishReason||"stop").toLowerCase();"stop"===j&&g.length>0&&(j="tool_calls");let k={id:`chatcmpl-${b.responseId||Date.now()}`,object:"chat.completion",created:Math.floor(new Date(b.createTime||Date.now()).getTime()/1e3),model:b.modelVersion||"gemini",choices:[{index:0,message:i,finish_reason:j}]};return e&&(k.usage={prompt_tokens:(e.promptTokenCount||0)+(e.thoughtsTokenCount||0),completion_tokens:e.candidatesTokenCount||0,total_tokens:e.totalTokenCount||0},e.thoughtsTokenCount>0&&(k.usage.completion_tokens_details={reasoning_tokens:e.thoughtsTokenCount})),k}if(b===g.h.CLAUDE){if(!a.content)return a;let b="",c="",d=[];for(let e of a.content)"text"===e.type?b+=e.text:"thinking"===e.type?c+=e.thinking||"":"tool_use"===e.type&&d.push({id:e.id,type:"function",function:{name:e.name,arguments:JSON.stringify(e.input||{})}});let e={role:"assistant"};b&&(e.content=b),c&&(e.reasoning_content=c),d.length>0&&(e.tool_calls=d),e.content||e.tool_calls||(e.content="");let f=a.stop_reason||"stop";"end_turn"===f&&(f="stop"),"tool_use"===f&&(f="tool_calls");let g={id:`chatcmpl-${a.id||Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a.model||"claude",choices:[{index:0,message:e,finish_reason:f}]};return a.usage&&(g.usage={prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,total_tokens:(a.usage.input_tokens||0)+(a.usage.output_tokens||0)}),g}return a}(b,N,K):b;if(d.object||(d.object="chat.completion"),d.created||(d.created=Math.floor(Date.now()/1e3)),void 0!==d.prompt_filter_results&&delete d.prompt_filter_results,d?.choices)for(let a of d.choices)void 0!==a.content_filter_results&&delete a.content_filter_results;if(d?.usage){let a=(0,j.O9)(d.usage);d.usage=(0,j.WL)(a,K)}R.logConvertedResponse(d);let e=Date.now()-J,i={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:e,total:e},tokens:c||{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:b||null,response:{content:d?.choices?.[0]?.message?.content||d?.content||null,thinking:d?.choices?.[0]?.message?.reasoning_content||d?.reasoning_content||null,finish_reason:d?.choices?.[0]?.finish_reason||"unknown"},status:"success",endpoint:y?.endpoint||null};return(0,q.ox)(i).catch(a=>{console.error("[RequestDetail] Failed to save:",a.message)}),{success:!0,response:new Response(JSON.stringify(d),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}w&&await w();let Y=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`,Z=(b,c,d)=>{let e={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:d?d-J:Date.now()-J,total:Date.now()-J},tokens:c||{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:b.content||"[Empty streaming response]",response:{content:b.content||"[Empty streaming response]",thinking:b.thinking||null,type:"streaming"},status:"success",id:Y};if((0,q.ox)(e).catch(a=>{console.error("[RequestDetail] Failed to update streaming content:",a.message)}),c&&"object"==typeof c&&(c.prompt_tokens>0||c.completion_tokens>0)){let a=`[${new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit"})}] 📊 [STREAM USAGE] ${H.toUpperCase()} | in=${c?.prompt_tokens||0} | out=${c?.completion_tokens||0}${z?` | account=${z.slice(0,8)}...`:""}`;console.log(`${h.lm.green}${a}${h.lm.reset}`),(0,q.sZ)({provider:H||"unknown",model:I||"unknown",tokens:c,timestamp:new Date().toISOString(),connectionId:z||void 0,apiKey:B||void 0,endpoint:y?.endpoint||null}).catch(a=>{console.error("Failed to save streaming usage stats:",a.message)})}},$=A?.toLowerCase().includes("droid")||A?.toLowerCase().includes("codex-cli");if("codex"!==H||"openai-responses"!==N||$)(0,f.nZ)(N,K)?(d?.debug?.("STREAM",`Translation mode: ${N} → ${K}`),G=(0,h.i5)(N,K,H,R,T,I,z,a,Z,B)):(d?.debug?.("STREAM","Standard passthrough mode"),G=(0,h.l2)(H,R,I,z,a,Z,B));else{let b=K===g.h.CLAUDE?g.h.CLAUDE:g.h.OPENAI;d?.debug?.("STREAM",`Codex translation mode: openai-responses → ${b}`),G=(0,h.i5)("openai-responses",b,H,R,T,I,z,a,Z,B)}let _=(0,i.Jb)(C,G,W);Date.now();let aa={provider:H||"unknown",model:I||"unknown",connectionId:z||void 0,timestamp:new Date().toISOString(),latency:{ttft:0,total:Date.now()-J},tokens:{prompt_tokens:0,completion_tokens:0},request:u(a,Q),providerRequest:F||S||null,providerResponse:"[Streaming - raw response not captured]",response:{content:"[Streaming in progress...]",thinking:null,type:"streaming"},status:"success",id:Y};return(0,q.ox)(aa).catch(a=>{console.error("[RequestDetail] Failed to save streaming request:",a.message)}),{success:!0,response:new Response(_,{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}})}}r=(t.then?(await t)():t)[0],d()}catch(a){d(a)}})}};
@@ -1 +1 @@
1
- "use strict";exports.id=9718,exports.ids=[9718],exports.modules={89718:(a,b,c)=>{c.d(b,{CG:()=>O,Dj:()=>L,Fh:()=>t,Iq:()=>Q,KJ:()=>aa,L:()=>K,L9:()=>I,Lh:()=>R,Mc:()=>z,Nx:()=>Y,OM:()=>E,Pc:()=>x,Qu:()=>u,Uv:()=>J,VT:()=>ac,XW:()=>T,Xx:()=>X,bI:()=>V,c:()=>H,ek:()=>U,fK:()=>C,fv:()=>G,getApiKeys:()=>P,getPricingForModel:()=>_,getProviderConnections:()=>s,getSettings:()=>W,ho:()=>w,i0:()=>v,iE:()=>A,jd:()=>M,o5:()=>F,oG:()=>N,op:()=>y,r4:()=>$,rj:()=>B,yF:()=>ab,yg:()=>S,z9:()=>Z});var d=c(82996),e=c(11259),f=c(94755),g=c(76760),h=c.n(g),i=c(48161),j=c.n(i),k=c(73024),l=c.n(k);let m="u">typeof caches||"object"==typeof caches,n=function(){if(m)return"/tmp";if(process.env.DATA_DIR)return process.env.DATA_DIR;let a=process.platform,b=j().homedir(),c="9router";return"win32"===a?h().join(process.env.APPDATA||h().join(b,"AppData","Roaming"),c):h().join(b,`.${c}`)}(),o=m?null:h().join(n,"db.json");function p(){return{providerConnections:[],providerNodes:[],modelAliases:{},mitmAlias:{},combos:[],apiKeys:[],settings:{cloudEnabled:!1,stickyRoundRobinLimit:3,requireLogin:!0,observabilityEnabled:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:1024},pricing:{}}}m||l().existsSync(n)||l().mkdirSync(n,{recursive:!0});let q=null;async function r(){if(m){if(!q){let a=p();(q=new d.t({read:async()=>{},write:async()=>{}},a)).data=a}return q}if(!q){let a=new e.Pv(o);q=new d.t(a,p())}try{await q.read()}catch(a){if(a instanceof SyntaxError)console.warn("[DB] Corrupt JSON detected, resetting to defaults..."),q.data=p(),await q.write();else throw a}if(q.data){let{data:a,changed:b}=function(a){let b=p(),c=a&&"object"==typeof a?a:{},d=!1;for(let[a,e]of Object.entries(b)){if(void 0===c[a]||null===c[a]){c[a]=e,d=!0;continue}if("settings"===a&&("object"!=typeof c.settings||Array.isArray(c.settings))){c.settings={...e},d=!0;continue}if("settings"===a&&"object"==typeof c.settings&&!Array.isArray(c.settings))for(let[a,b]of Object.entries(e))void 0===c.settings[a]&&(c.settings[a]=b,d=!0);if("apiKeys"===a&&Array.isArray(c.apiKeys))for(let a of c.apiKeys)(void 0===a.isActive||null===a.isActive)&&(a.isActive=!0,d=!0)}return{data:c,changed:d}}(q.data);q.data=a,b&&await q.write()}else q.data=p(),await q.write();return q}async function s(a={}){let b=(await r()).data.providerConnections||[];return a.provider&&(b=b.filter(b=>b.provider===a.provider)),void 0!==a.isActive&&(b=b.filter(b=>b.isActive===a.isActive)),b.sort((a,b)=>(a.priority||999)-(b.priority||999)),b}async function t(a={}){let b=(await r()).data.providerNodes||[];return a.type&&(b=b.filter(b=>b.type===a.type)),b}async function u(a){return(await r()).data.providerNodes.find(b=>b.id===a)||null}async function v(a){let b=await r();b.data.providerNodes||(b.data.providerNodes=[]);let c=new Date().toISOString(),d={id:a.id||(0,f.A)(),type:a.type,name:a.name,prefix:a.prefix,apiType:a.apiType,baseUrl:a.baseUrl,createdAt:c,updatedAt:c};return b.data.providerNodes.push(d),await b.write(),d}async function w(a,b){let c=await r();c.data.providerNodes||(c.data.providerNodes=[]);let d=c.data.providerNodes.findIndex(b=>b.id===a);return -1===d?null:(c.data.providerNodes[d]={...c.data.providerNodes[d],...b,updatedAt:new Date().toISOString()},await c.write(),c.data.providerNodes[d])}async function x(a){let b=await r();b.data.providerNodes||(b.data.providerNodes=[]);let c=b.data.providerNodes.findIndex(b=>b.id===a);if(-1===c)return null;let[d]=b.data.providerNodes.splice(c,1);return await b.write(),d}async function y(a){let b=await r(),c=b.data.providerConnections.length;b.data.providerConnections=b.data.providerConnections.filter(b=>b.provider!==a);let d=c-b.data.providerConnections.length;return await b.write(),d}async function z(a){return(await r()).data.providerConnections.find(b=>b.id===a)||null}async function A(a){let b=await r(),c=new Date().toISOString(),d=-1;if("oauth"===a.authType&&a.email?d=b.data.providerConnections.findIndex(b=>b.provider===a.provider&&"oauth"===b.authType&&b.email===a.email):"apikey"===a.authType&&a.name&&(d=b.data.providerConnections.findIndex(b=>b.provider===a.provider&&"apikey"===b.authType&&b.name===a.name)),-1!==d)return b.data.providerConnections[d]={...b.data.providerConnections[d],...a,updatedAt:c},await b.write(),b.data.providerConnections[d];let e=a.name||null;if(!e&&"oauth"===a.authType)if(a.email)e=a.email;else{let c=b.data.providerConnections.filter(b=>b.provider===a.provider).length;e=`Account ${c+1}`}let g=a.priority;g||(g=b.data.providerConnections.filter(b=>b.provider===a.provider).reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let h={id:(0,f.A)(),provider:a.provider,authType:a.authType||"oauth",name:e,priority:g,isActive:void 0===a.isActive||a.isActive,createdAt:c,updatedAt:c};for(let b of["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","idToken","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount"])void 0!==a[b]&&null!==a[b]&&(h[b]=a[b]);return a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(h.providerSpecificData=a.providerSpecificData),b.data.providerConnections.push(h),await b.write(),await D(a.provider),h}async function B(a,b){let c=await r(),d=c.data.providerConnections.findIndex(b=>b.id===a);if(-1===d)return null;let e=c.data.providerConnections[d].provider;return c.data.providerConnections[d]={...c.data.providerConnections[d],...b,updatedAt:new Date().toISOString()},await c.write(),void 0!==b.priority&&await D(e),c.data.providerConnections[d]}async function C(a){let b=await r(),c=b.data.providerConnections.findIndex(b=>b.id===a);if(-1===c)return!1;let d=b.data.providerConnections[c].provider;return b.data.providerConnections.splice(c,1),await b.write(),await D(d),!0}async function D(a){let b=await r();b.data.providerConnections&&(b.data.providerConnections.filter(b=>b.provider===a).sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}).forEach((a,b)=>{a.priority=b+1}),await b.write())}async function E(){return(await r()).data.modelAliases||{}}async function F(a,b){let c=await r();c.data.modelAliases[a]=b,await c.write()}async function G(a){let b=await r();delete b.data.modelAliases[a],await b.write()}async function H(a){let b=(await r()).data.mitmAlias||{};return a?b[a]||{}:b}async function I(a,b){let c=await r();c.data.mitmAlias||(c.data.mitmAlias={}),c.data.mitmAlias[a]=b||{},await c.write()}async function J(){return(await r()).data.combos||[]}async function K(a){return((await r()).data.combos||[]).find(b=>b.id===a)||null}async function L(a){return((await r()).data.combos||[]).find(b=>b.name===a)||null}async function M(a){let b=await r();b.data.combos||(b.data.combos=[]);let c=new Date().toISOString(),d={id:(0,f.A)(),name:a.name,models:a.models||[],createdAt:c,updatedAt:c};return b.data.combos.push(d),await b.write(),d}async function N(a,b){let c=await r();c.data.combos||(c.data.combos=[]);let d=c.data.combos.findIndex(b=>b.id===a);return -1===d?null:(c.data.combos[d]={...c.data.combos[d],...b,updatedAt:new Date().toISOString()},await c.write(),c.data.combos[d])}async function O(a){let b=await r();if(!b.data.combos)return!1;let c=b.data.combos.findIndex(b=>b.id===a);return -1!==c&&(b.data.combos.splice(c,1),await b.write(),!0)}async function P(){return(await r()).data.apiKeys||[]}async function Q(a,b){if(!b)throw Error("machineId is required");let d=await r(),e=new Date().toISOString(),{generateApiKeyWithMachine:g}=await c.e(6844).then(c.bind(c,86844)),h=g(b),i={id:(0,f.A)(),name:a,key:h.key,machineId:b,isActive:!0,createdAt:e};return d.data.apiKeys.push(i),await d.write(),i}async function R(a){let b=await r(),c=b.data.apiKeys.findIndex(b=>b.id===a);return -1!==c&&(b.data.apiKeys.splice(c,1),await b.write(),!0)}async function S(a){return(await r()).data.apiKeys.find(b=>b.id===a)||null}async function T(a,b){let c=await r(),d=c.data.apiKeys.findIndex(b=>b.id===a);return -1===d?null:(c.data.apiKeys[d]={...c.data.apiKeys[d],...b},await c.write(),c.data.apiKeys[d])}async function U(a){let b=(await r()).data.apiKeys.find(b=>b.key===a);return b&&!1!==b.isActive}async function V(){let a=await r(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","idToken","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;for(let d of a.data.providerConnections){for(let a of b)(null===d[a]||void 0===d[a])&&(delete d[a],c++);d.providerSpecificData&&0===Object.keys(d.providerSpecificData).length&&(delete d.providerSpecificData,c++)}return c>0&&await a.write(),c}async function W(){return(await r()).data.settings||{cloudEnabled:!1}}async function X(a){let b=await r();return b.data.settings={...b.data.settings,...a},await b.write(),b.data.settings}async function Y(){return!0===(await W()).cloudEnabled}async function Z(){return(await W()).cloudUrl||process.env.CLOUD_URL||"https://9router.com"}async function $(){let a=(await r()).data.pricing||{},{getDefaultPricing:b}=await c.e(7341).then(c.bind(c,57341)),d=b(),e={};for(let[b,c]of Object.entries(d))if(e[b]={...c},a[b])for(let[c,d]of Object.entries(a[b]))e[b][c]?e[b][c]={...e[b][c],...d}:e[b][c]=d;for(let[b,c]of Object.entries(a))if(e[b])for(let[a,d]of Object.entries(c))e[b][a]||(e[b][a]=d);else e[b]={...c};return e}async function _(a,b){let c=await $();if(c[a]?.[b])return c[a][b];let d={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",openai:"openai",anthropic:"anthropic",gemini:"gemini",openrouter:"openrouter",glm:"glm",kimi:"kimi",minimax:"minimax"}[a];return d&&c[d]&&c[d][b]||null}async function aa(a){let b=await r();for(let[c,d]of(b.data.pricing||(b.data.pricing={}),Object.entries(a)))for(let[a,e]of(b.data.pricing[c]||(b.data.pricing[c]={}),Object.entries(d)))b.data.pricing[c][a]=e;return await b.write(),b.data.pricing}async function ab(a,b){let c=await r();return c.data.pricing||(c.data.pricing={}),b?c.data.pricing[a]&&(delete c.data.pricing[a][b],0===Object.keys(c.data.pricing[a]).length&&delete c.data.pricing[a]):delete c.data.pricing[a],await c.write(),c.data.pricing}async function ac(){let a=await r();return a.data.pricing={},await a.write(),a.data.pricing}}};
1
+ "use strict";exports.id=9718,exports.ids=[9718],exports.modules={89718:(a,b,c)=>{c.d(b,{CG:()=>O,Dj:()=>L,Fh:()=>t,Iq:()=>Q,KJ:()=>$,L:()=>K,L9:()=>I,Lh:()=>R,Mc:()=>z,OM:()=>E,Pc:()=>x,Qu:()=>u,Uv:()=>J,VT:()=>aa,XW:()=>T,Xx:()=>X,bI:()=>V,c:()=>H,ek:()=>U,fK:()=>C,fv:()=>G,getApiKeys:()=>P,getPricingForModel:()=>Z,getProviderConnections:()=>s,getSettings:()=>W,ho:()=>w,i0:()=>v,iE:()=>A,jd:()=>M,o5:()=>F,oG:()=>N,op:()=>y,r4:()=>Y,rj:()=>B,yF:()=>_,yg:()=>S});var d=c(82996),e=c(11259),f=c(94755),g=c(76760),h=c.n(g),i=c(48161),j=c.n(i),k=c(73024),l=c.n(k);let m="u">typeof caches||"object"==typeof caches,n=function(){if(m)return"/tmp";if(process.env.DATA_DIR)return process.env.DATA_DIR;let a=process.platform,b=j().homedir(),c="9router";return"win32"===a?h().join(process.env.APPDATA||h().join(b,"AppData","Roaming"),c):h().join(b,`.${c}`)}(),o=m?null:h().join(n,"db.json");function p(){return{providerConnections:[],providerNodes:[],modelAliases:{},mitmAlias:{},combos:[],apiKeys:[],settings:{cloudEnabled:!1,tunnelEnabled:!1,tunnelUrl:"",stickyRoundRobinLimit:3,requireLogin:!0,observabilityEnabled:!0,observabilityMaxRecords:1e3,observabilityBatchSize:20,observabilityFlushIntervalMs:5e3,observabilityMaxJsonSize:1024},pricing:{}}}m||l().existsSync(n)||l().mkdirSync(n,{recursive:!0});let q=null;async function r(){if(m){if(!q){let a=p();(q=new d.t({read:async()=>{},write:async()=>{}},a)).data=a}return q}if(!q){let a=new e.Pv(o);q=new d.t(a,p())}try{await q.read()}catch(a){if(a instanceof SyntaxError)console.warn("[DB] Corrupt JSON detected, resetting to defaults..."),q.data=p(),await q.write();else throw a}if(q.data){let{data:a,changed:b}=function(a){let b=p(),c=a&&"object"==typeof a?a:{},d=!1;for(let[a,e]of Object.entries(b)){if(void 0===c[a]||null===c[a]){c[a]=e,d=!0;continue}if("settings"===a&&("object"!=typeof c.settings||Array.isArray(c.settings))){c.settings={...e},d=!0;continue}if("settings"===a&&"object"==typeof c.settings&&!Array.isArray(c.settings))for(let[a,b]of Object.entries(e))void 0===c.settings[a]&&(c.settings[a]=b,d=!0);if("apiKeys"===a&&Array.isArray(c.apiKeys))for(let a of c.apiKeys)(void 0===a.isActive||null===a.isActive)&&(a.isActive=!0,d=!0)}return{data:c,changed:d}}(q.data);q.data=a,b&&await q.write()}else q.data=p(),await q.write();return q}async function s(a={}){let b=(await r()).data.providerConnections||[];return a.provider&&(b=b.filter(b=>b.provider===a.provider)),void 0!==a.isActive&&(b=b.filter(b=>b.isActive===a.isActive)),b.sort((a,b)=>(a.priority||999)-(b.priority||999)),b}async function t(a={}){let b=(await r()).data.providerNodes||[];return a.type&&(b=b.filter(b=>b.type===a.type)),b}async function u(a){return(await r()).data.providerNodes.find(b=>b.id===a)||null}async function v(a){let b=await r();b.data.providerNodes||(b.data.providerNodes=[]);let c=new Date().toISOString(),d={id:a.id||(0,f.A)(),type:a.type,name:a.name,prefix:a.prefix,apiType:a.apiType,baseUrl:a.baseUrl,createdAt:c,updatedAt:c};return b.data.providerNodes.push(d),await b.write(),d}async function w(a,b){let c=await r();c.data.providerNodes||(c.data.providerNodes=[]);let d=c.data.providerNodes.findIndex(b=>b.id===a);return -1===d?null:(c.data.providerNodes[d]={...c.data.providerNodes[d],...b,updatedAt:new Date().toISOString()},await c.write(),c.data.providerNodes[d])}async function x(a){let b=await r();b.data.providerNodes||(b.data.providerNodes=[]);let c=b.data.providerNodes.findIndex(b=>b.id===a);if(-1===c)return null;let[d]=b.data.providerNodes.splice(c,1);return await b.write(),d}async function y(a){let b=await r(),c=b.data.providerConnections.length;b.data.providerConnections=b.data.providerConnections.filter(b=>b.provider!==a);let d=c-b.data.providerConnections.length;return await b.write(),d}async function z(a){return(await r()).data.providerConnections.find(b=>b.id===a)||null}async function A(a){let b=await r(),c=new Date().toISOString(),d=-1;if("oauth"===a.authType&&a.email?d=b.data.providerConnections.findIndex(b=>b.provider===a.provider&&"oauth"===b.authType&&b.email===a.email):"apikey"===a.authType&&a.name&&(d=b.data.providerConnections.findIndex(b=>b.provider===a.provider&&"apikey"===b.authType&&b.name===a.name)),-1!==d)return b.data.providerConnections[d]={...b.data.providerConnections[d],...a,updatedAt:c},await b.write(),b.data.providerConnections[d];let e=a.name||null;if(!e&&"oauth"===a.authType)if(a.email)e=a.email;else{let c=b.data.providerConnections.filter(b=>b.provider===a.provider).length;e=`Account ${c+1}`}let g=a.priority;g||(g=b.data.providerConnections.filter(b=>b.provider===a.provider).reduce((a,b)=>Math.max(a,b.priority||0),0)+1);let h={id:(0,f.A)(),provider:a.provider,authType:a.authType||"oauth",name:e,priority:g,isActive:void 0===a.isActive||a.isActive,createdAt:c,updatedAt:c};for(let b of["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","idToken","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","errorCode","consecutiveUseCount"])void 0!==a[b]&&null!==a[b]&&(h[b]=a[b]);return a.providerSpecificData&&Object.keys(a.providerSpecificData).length>0&&(h.providerSpecificData=a.providerSpecificData),b.data.providerConnections.push(h),await b.write(),await D(a.provider),h}async function B(a,b){let c=await r(),d=c.data.providerConnections.findIndex(b=>b.id===a);if(-1===d)return null;let e=c.data.providerConnections[d].provider;return c.data.providerConnections[d]={...c.data.providerConnections[d],...b,updatedAt:new Date().toISOString()},await c.write(),void 0!==b.priority&&await D(e),c.data.providerConnections[d]}async function C(a){let b=await r(),c=b.data.providerConnections.findIndex(b=>b.id===a);if(-1===c)return!1;let d=b.data.providerConnections[c].provider;return b.data.providerConnections.splice(c,1),await b.write(),await D(d),!0}async function D(a){let b=await r();b.data.providerConnections&&(b.data.providerConnections.filter(b=>b.provider===a).sort((a,b)=>{let c=(a.priority||0)-(b.priority||0);return 0!==c?c:new Date(b.updatedAt||0)-new Date(a.updatedAt||0)}).forEach((a,b)=>{a.priority=b+1}),await b.write())}async function E(){return(await r()).data.modelAliases||{}}async function F(a,b){let c=await r();c.data.modelAliases[a]=b,await c.write()}async function G(a){let b=await r();delete b.data.modelAliases[a],await b.write()}async function H(a){let b=(await r()).data.mitmAlias||{};return a?b[a]||{}:b}async function I(a,b){let c=await r();c.data.mitmAlias||(c.data.mitmAlias={}),c.data.mitmAlias[a]=b||{},await c.write()}async function J(){return(await r()).data.combos||[]}async function K(a){return((await r()).data.combos||[]).find(b=>b.id===a)||null}async function L(a){return((await r()).data.combos||[]).find(b=>b.name===a)||null}async function M(a){let b=await r();b.data.combos||(b.data.combos=[]);let c=new Date().toISOString(),d={id:(0,f.A)(),name:a.name,models:a.models||[],createdAt:c,updatedAt:c};return b.data.combos.push(d),await b.write(),d}async function N(a,b){let c=await r();c.data.combos||(c.data.combos=[]);let d=c.data.combos.findIndex(b=>b.id===a);return -1===d?null:(c.data.combos[d]={...c.data.combos[d],...b,updatedAt:new Date().toISOString()},await c.write(),c.data.combos[d])}async function O(a){let b=await r();if(!b.data.combos)return!1;let c=b.data.combos.findIndex(b=>b.id===a);return -1!==c&&(b.data.combos.splice(c,1),await b.write(),!0)}async function P(){return(await r()).data.apiKeys||[]}async function Q(a,b){if(!b)throw Error("machineId is required");let d=await r(),e=new Date().toISOString(),{generateApiKeyWithMachine:g}=await c.e(6844).then(c.bind(c,86844)),h=g(b),i={id:(0,f.A)(),name:a,key:h.key,machineId:b,isActive:!0,createdAt:e};return d.data.apiKeys.push(i),await d.write(),i}async function R(a){let b=await r(),c=b.data.apiKeys.findIndex(b=>b.id===a);return -1!==c&&(b.data.apiKeys.splice(c,1),await b.write(),!0)}async function S(a){return(await r()).data.apiKeys.find(b=>b.id===a)||null}async function T(a,b){let c=await r(),d=c.data.apiKeys.findIndex(b=>b.id===a);return -1===d?null:(c.data.apiKeys[d]={...c.data.apiKeys[d],...b},await c.write(),c.data.apiKeys[d])}async function U(a){let b=(await r()).data.apiKeys.find(b=>b.key===a);return b&&!1!==b.isActive}async function V(){let a=await r(),b=["displayName","email","globalPriority","defaultModel","accessToken","refreshToken","expiresAt","tokenType","scope","idToken","projectId","apiKey","testStatus","lastTested","lastError","lastErrorAt","rateLimitedUntil","expiresIn","consecutiveUseCount"],c=0;for(let d of a.data.providerConnections){for(let a of b)(null===d[a]||void 0===d[a])&&(delete d[a],c++);d.providerSpecificData&&0===Object.keys(d.providerSpecificData).length&&(delete d.providerSpecificData,c++)}return c>0&&await a.write(),c}async function W(){return(await r()).data.settings||{cloudEnabled:!1}}async function X(a){let b=await r();return b.data.settings={...b.data.settings,...a},await b.write(),b.data.settings}async function Y(){let a=(await r()).data.pricing||{},{getDefaultPricing:b}=await c.e(7341).then(c.bind(c,57341)),d=b(),e={};for(let[b,c]of Object.entries(d))if(e[b]={...c},a[b])for(let[c,d]of Object.entries(a[b]))e[b][c]?e[b][c]={...e[b][c],...d}:e[b][c]=d;for(let[b,c]of Object.entries(a))if(e[b])for(let[a,d]of Object.entries(c))e[b][a]||(e[b][a]=d);else e[b]={...c};return e}async function Z(a,b){let c=await Y();if(c[a]?.[b])return c[a][b];let d={claude:"cc",codex:"cx","gemini-cli":"gc",qwen:"qw",iflow:"if",antigravity:"ag",github:"gh",kiro:"kr",openai:"openai",anthropic:"anthropic",gemini:"gemini",openrouter:"openrouter",glm:"glm",kimi:"kimi",minimax:"minimax"}[a];return d&&c[d]&&c[d][b]||null}async function $(a){let b=await r();for(let[c,d]of(b.data.pricing||(b.data.pricing={}),Object.entries(a)))for(let[a,e]of(b.data.pricing[c]||(b.data.pricing[c]={}),Object.entries(d)))b.data.pricing[c][a]=e;return await b.write(),b.data.pricing}async function _(a,b){let c=await r();return c.data.pricing||(c.data.pricing={}),b?c.data.pricing[a]&&(delete c.data.pricing[a][b],0===Object.keys(c.data.pricing[a]).length&&delete c.data.pricing[a]):delete c.data.pricing[a],await c.write(),c.data.pricing}async function aa(){let a=await r();return a.data.pricing={},await a.write(),a.data.pricing}}};
@@ -1,3 +1,3 @@
1
- exports.id=9862,exports.ids=[9862],exports.modules={14807:(a,b,c)=>{Promise.resolve().then(c.bind(c,43173))},43173:(a,b,c)=>{"use strict";c.d(b,{default:()=>l});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412),i=c(50377);let j="https://9router.com",k=15e3;function l({machineId:a}){let[b,c]=(0,e.useState)([]),[f,g]=(0,e.useState)(!0),[l,m]=(0,e.useState)(!1),[n,o]=(0,e.useState)(""),[p,q]=(0,e.useState)(null),[r,s]=(0,e.useState)(!1),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(j),[x,y]=(0,e.useState)(j),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(!1),[F,G]=(0,e.useState)(!1),[H,I]=(0,e.useState)(null),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(null),[N,O]=(0,e.useState)(""),{copied:P,copy:Q}=(0,i.C)(),R=async(a,b=k)=>{let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{let b=await fetch("/api/sync/cloud",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:a}),signal:c.signal}),d=await b.json().catch(()=>({}));return{ok:b.ok,status:b.status,data:d}}catch(a){if(a?.name==="AbortError")return{ok:!1,status:408,data:{error:"Cloud request timeout"}};return{ok:!1,status:500,data:{error:a.message||"Cloud request failed"}}}finally{clearTimeout(d)}},S=async a=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApiKey:a})})).ok&&s(a)}catch(a){console.log("Error updating requireApiKey:",a)}},T=async()=>{try{let a=await fetch("/api/keys"),b=await a.json();a.ok&&c(b.keys||[])}catch(a){console.log("Error fetching data:",a)}finally{g(!1)}},U=a=>{a?C(!0):E(!0)},V=async()=>{K(!0),O("syncing");try{let{ok:a,data:b}=await R("enable");a?(O("verifying"),b.verified?(u(!0),M({type:"success",message:"Cloud Proxy connected and verified!"})):(u(!0),M({type:"warning",message:b.verifyError||"Connected but verification failed"})),C(!1),b.createdKey&&await T()):M({type:"error",message:b.error||"Failed to enable cloud"})}catch(a){M({type:"error",message:a.message})}finally{K(!1),O("")}},W=async()=>{K(!0),O("syncing");try{await R("sync"),O("disabling");let{ok:a,data:b}=await R("disable");a?(u(!1),M({type:"success",message:"Cloud disabled"}),E(!1)):M({type:"error",message:b.error||"Failed to disable cloud"})}catch(a){console.log("Error disabling cloud:",a),M({type:"error",message:"Failed to disable cloud"})}finally{K(!1),O("")}},X=async()=>{let a=x.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"");if(a){A(!0),I(null);try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({cloudUrl:a})})).ok?(w(a),y(a),I({type:"success",message:"Worker URL saved"})):I({type:"error",message:"Failed to save Worker URL"})}catch(a){I({type:"error",message:a.message})}finally{A(!1)}}},Y=async()=>{if(v){K(!0),I(null);try{let{ok:a,data:b}=await R("check",8e3);a?I({type:"success",message:b.message||"Worker is running"}):I({type:"error",message:b.error||"Check failed"})}catch{I({type:"error",message:"Cannot reach worker"})}finally{K(!1)}}},Z=async()=>{if(n.trim())try{let a=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n})}),b=await a.json();a.ok&&(q(b.key),await T(),o(""),m(!1))}catch(a){console.log("Error creating key:",a)}},$=async a=>{if(confirm("Delete this API key?"))try{(await fetch(`/api/keys/${a}`,{method:"DELETE"})).ok&&c(b.filter(b=>b.id!==a))}catch(a){console.log("Error deleting key:",a)}},_=async(a,b)=>{try{(await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:b})})).ok&&c(c=>c.map(c=>c.id===a?{...c,isActive:b}:c))}catch(a){console.log("Error toggling key:",a)}},[aa,ab]=(0,e.useState)("/v1"),ac=v?`${v}/v1`:"";if(f)return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsx)(h.Qv,{}),(0,d.jsx)(h.Qv,{})]});let ad=t?ac:aa;return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsxs)(h.Zp,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"API Endpoint"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:t?"Using Cloud Proxy":"Using Local Server"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"settings",onClick:()=>G(!0),children:"Setup Cloudflare"}),t?(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"cloud_off",onClick:()=>U(!1),disabled:J,className:"bg-red-500/10! text-red-500! hover:bg-red-500/20! border-red-500/30!",children:"Disable Cloud"}):(0,d.jsx)(h.$n,{variant:"primary",icon:"cloud_upload",onClick:()=>U(!0),disabled:J||!v,className:"bg-linear-to-r from-primary to-blue-500 hover:from-primary-hover hover:to-blue-600",children:"Enable Cloud"})]})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.pd,{value:ad,readOnly:!0,className:`flex-1 font-mono text-sm ${t?"animate-border-glow":""}`}),(0,d.jsx)(h.$n,{variant:"secondary",icon:"endpoint_url"===P?"check":"content_copy",onClick:()=>Q(ad,"endpoint_url"),children:"endpoint_url"===P?"Copied!":"Copy"})]}),L&&(0,d.jsx)("div",{className:`mt-3 p-2 rounded text-sm ${"success"===L.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===L.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:L.message})]}),(0,d.jsxs)(h.Zp,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"API Keys"}),(0,d.jsx)(h.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between pb-4 mb-4 border-b border-border",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"font-medium",children:"Require API key"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Requests without a valid key will be rejected"})]}),(0,d.jsx)(h.lM,{checked:r,onChange:()=>S(!r)})]}),0===b.length?(0,d.jsxs)("div",{className:"text-center py-12",children:[(0,d.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"vpn_key"})}),(0,d.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No API keys yet"}),(0,d.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create your first API key to get started"}),(0,d.jsx)(h.$n,{icon:"add",onClick:()=>m(!0),children:"Create Key"})]}):(0,d.jsx)("div",{className:"flex flex-col",children:b.map(a=>(0,d.jsxs)("div",{className:`group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0 ${!1===a.isActive?"opacity-60":""}`,children:[(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:a.name}),(0,d.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,d.jsx)("code",{className:"text-xs text-text-muted font-mono",children:a.key}),(0,d.jsx)("button",{onClick:()=>Q(a.key,a.id),className:"p-1 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary opacity-0 group-hover:opacity-100 transition-all",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:P===a.id?"check":"content_copy"})})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Created ",new Date(a.createdAt).toLocaleDateString()]}),!1===a.isActive&&(0,d.jsx)("p",{className:"text-xs text-orange-500 mt-1",children:"Paused"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(h.lM,{size:"sm",checked:a.isActive??!0,onChange:b=>{a.isActive&&!b?confirm(`Pause API key "${a.name}"?
1
+ exports.id=9862,exports.ids=[9862],exports.modules={14807:(a,b,c)=>{Promise.resolve().then(c.bind(c,43173))},43173:(a,b,c)=>{"use strict";c.d(b,{default:()=>k});var d=c(48249),e=c(67484),f=c(49885),g=c.n(f),h=c(50412),i=c(50377);let j=[{icon:"public",title:"Access Anywhere",desc:"Use your API from any network"},{icon:"group",title:"Share Endpoint",desc:"Share URL with team members"},{icon:"code",title:"Use in Cursor/Cline",desc:"Connect AI tools remotely"},{icon:"lock",title:"Encrypted",desc:"End-to-end TLS via Cloudflare"}];function k({machineId:a}){let[b,c]=(0,e.useState)([]),[f,g]=(0,e.useState)(!0),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(""),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(""),[w,x]=(0,e.useState)(""),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(null),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(!1),{copied:I,copy:J}=(0,i.C)(),K=async a=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApiKey:a})})).ok&&r(a)}catch(a){console.log("Error updating requireApiKey:",a)}},L=async()=>{try{let a=await fetch("/api/keys"),b=await a.json();a.ok&&c(b.keys||[])}catch(a){console.log("Error fetching data:",a)}finally{g(!1)}},M=async()=>{H(!1),z(!0),D(null),B("Connecting to server...");let a=[{delay:2e3,msg:"Creating tunnel..."},{delay:5e3,msg:"Starting cloudflared..."},{delay:15e3,msg:"Establishing connections..."},{delay:3e4,msg:"Waiting for tunnel ready..."}].map(({delay:a,msg:b})=>setTimeout(()=>B(b),a));try{let b=new AbortController,c=setTimeout(()=>b.abort(),9e4),d=await fetch("/api/tunnel/enable",{method:"POST",signal:b.signal});clearTimeout(c),a.forEach(clearTimeout);let e=await d.json();d.ok?(t(!0),v(e.tunnelUrl||""),x(e.shortId||""),D({type:"success",message:"Tunnel connected!"})):D({type:"error",message:e.error||"Failed to enable tunnel"})}catch(b){a.forEach(clearTimeout),D({type:"error",message:b?.name==="AbortError"?"Tunnel creation timed out":b.message})}finally{z(!1),B("")}},N=async()=>{z(!0),D(null);try{let a=await fetch("/api/tunnel/disable",{method:"POST"}),b=await a.json();a.ok?(t(!1),v(""),D({type:"success",message:"Tunnel disabled"}),F(!1)):D({type:"error",message:b.error||"Failed to disable tunnel"})}catch(a){D({type:"error",message:a.message})}finally{z(!1)}},O=async()=>{if(m.trim())try{let a=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:m})}),b=await a.json();a.ok&&(p(b.key),await L(),n(""),l(!1))}catch(a){console.log("Error creating key:",a)}},P=async a=>{if(confirm("Delete this API key?"))try{(await fetch(`/api/keys/${a}`,{method:"DELETE"})).ok&&c(b.filter(b=>b.id!==a))}catch(a){console.log("Error deleting key:",a)}},Q=async(a,b)=>{try{(await fetch(`/api/keys/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:b})})).ok&&c(c=>c.map(c=>c.id===a?{...c,isActive:b}:c))}catch(a){console.log("Error toggling key:",a)}},[R,S]=(0,e.useState)("/v1");if(f)return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsx)(h.Qv,{}),(0,d.jsx)(h.Qv,{})]});let T=s&&u?`${u}/v1`:R;return(0,d.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,d.jsxs)(h.Zp,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"API Endpoint"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:s?"Using Tunnel":"Using Local Server"})]}),(0,d.jsx)("div",{className:"flex items-center gap-2",children:s?(0,d.jsx)(h.$n,{size:"sm",variant:"secondary",icon:"cloud_off",onClick:()=>F(!0),disabled:y,className:"bg-red-500/10! text-red-500! hover:bg-red-500/20! border-red-500/30!",children:"Disable Tunnel"}):(0,d.jsx)(h.$n,{variant:"primary",icon:"cloud_upload",onClick:()=>H(!0),disabled:y,className:"bg-linear-to-r from-primary to-blue-500 hover:from-primary-hover hover:to-blue-600",children:y?(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),A||"Creating tunnel..."]}):"Enable Tunnel"})})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.pd,{value:T,readOnly:!0,className:`flex-1 font-mono text-sm ${s?"animate-border-glow":""}`}),(0,d.jsx)(h.$n,{variant:"secondary",icon:"endpoint_url"===I?"check":"content_copy",onClick:()=>J(T,"endpoint_url"),children:"endpoint_url"===I?"Copied!":"Copy"})]}),C&&(0,d.jsx)("div",{className:`mt-3 p-2 rounded text-sm ${"success"===C.type?"bg-green-500/10 text-green-600 dark:text-green-400":"warning"===C.type?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:C.message})]}),(0,d.jsxs)(h.Zp,{children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,d.jsx)("h2",{className:"text-lg font-semibold",children:"API Keys"}),(0,d.jsx)(h.$n,{icon:"add",onClick:()=>l(!0),children:"Create Key"})]}),(0,d.jsxs)("div",{className:"flex items-center justify-between pb-4 mb-4 border-b border-border",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"font-medium",children:"Require API key"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Requests without a valid key will be rejected"})]}),(0,d.jsx)(h.lM,{checked:q,onChange:()=>K(!q)})]}),0===b.length?(0,d.jsxs)("div",{className:"text-center py-12",children:[(0,d.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[32px]",children:"vpn_key"})}),(0,d.jsx)("p",{className:"text-text-main font-medium mb-1",children:"No API keys yet"}),(0,d.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Create your first API key to get started"}),(0,d.jsx)(h.$n,{icon:"add",onClick:()=>l(!0),children:"Create Key"})]}):(0,d.jsx)("div",{className:"flex flex-col",children:b.map(a=>(0,d.jsxs)("div",{className:`group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0 ${!1===a.isActive?"opacity-60":""}`,children:[(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:a.name}),(0,d.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,d.jsx)("code",{className:"text-xs text-text-muted font-mono",children:a.key}),(0,d.jsx)("button",{onClick:()=>J(a.key,a.id),className:"p-1 hover:bg-black/5 dark:hover:bg-white/5 rounded text-text-muted hover:text-primary opacity-0 group-hover:opacity-100 transition-all",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:I===a.id?"check":"content_copy"})})]}),(0,d.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Created ",new Date(a.createdAt).toLocaleDateString()]}),!1===a.isActive&&(0,d.jsx)("p",{className:"text-xs text-orange-500 mt-1",children:"Paused"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)(h.lM,{size:"sm",checked:a.isActive??!0,onChange:b=>{a.isActive&&!b?confirm(`Pause API key "${a.name}"?
2
2
 
3
- This key will stop working immediately but can be resumed later.`)&&_(a.id,b):_(a.id,b)},title:a.isActive?"Pause key":"Resume key"}),(0,d.jsx)("button",{onClick:()=>$(a.id),className:"p-2 hover:bg-red-500/10 rounded text-red-500 opacity-0 group-hover:opacity-100 transition-all",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]})]},a.id))})]}),(0,d.jsx)(h.aF,{isOpen:F,title:"Setup Cloudflare Worker",onClose:()=>{G(!1),I(null)},children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-3",children:(0,d.jsxs)("p",{className:"text-xs text-blue-700 dark:text-blue-300",children:[(0,d.jsx)("code",{className:"font-semibold",children:"https://9router.com"})," is a pre-configured worker ready to use. You can also deploy your own."]})}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm font-medium mb-2",children:"Worker URL"}),(0,d.jsx)("div",{className:"flex gap-2",children:(0,d.jsx)(h.pd,{value:x,onChange:a=>y(a.target.value),placeholder:"https://9router.your-subdomain.workers.dev",className:"flex-1 font-mono text-sm"})}),(0,d.jsxs)("p",{className:"text-xs text-text-muted mt-2",children:["Deploy your own worker from ",(0,d.jsx)("code",{className:"text-xs bg-sidebar px-1 py-0.5 rounded",children:"app/cloud/"})," directory."," ",(0,d.jsx)("a",{href:"https://github.com/decolua/9router/tree/main/app/cloud",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"Setup guide "})]})]}),H&&(0,d.jsx)("div",{className:`p-2 rounded text-sm ${"success"===H.type?"bg-green-500/10 text-green-600 dark:text-green-400":"bg-red-500/10 text-red-600 dark:text-red-400"}`,children:H.message}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:X,fullWidth:!0,disabled:z||!x.trim()||x.trim().replace(/\/v1\/?$/,"").replace(/\/+$/,"")===v,children:z?"Saving...":"Save"}),(0,d.jsx)(h.$n,{onClick:Y,variant:"secondary",fullWidth:!0,disabled:J||!v,icon:"check_circle",children:J?"Checking...":"Check"})]})]})}),(0,d.jsx)(h.aF,{isOpen:B,title:"Enable Cloud Proxy",onClose:()=>C(!1),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4",children:[(0,d.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200 font-medium mb-2",children:"What you will get"}),(0,d.jsxs)("ul",{className:"text-sm text-blue-700 dark:text-blue-300 space-y-1",children:[(0,d.jsx)("li",{children:"• Access your API from anywhere in the world"}),(0,d.jsx)("li",{children:"• Share endpoint with your team easily"}),(0,d.jsx)("li",{children:"• No need to open ports or configure firewall"}),(0,d.jsx)("li",{children:"• Fast global edge network"})]})]}),(0,d.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,d.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 font-medium mb-1",children:"Note"}),(0,d.jsxs)("ul",{className:"text-sm text-yellow-700 dark:text-yellow-300 space-y-1",children:[(0,d.jsx)("li",{children:"• Cloud will keep your auth session for 1 day. If not used, it will be automatically deleted."}),(0,d.jsx)("li",{children:"• Cloud is currently unstable with Claude Code OAuth in some cases."})]})]}),J&&(0,d.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,d.jsx)("div",{className:"flex-1",children:(0,d.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===N&&"Syncing data to cloud...","verifying"===N&&"Verifying connection..."]})})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:V,fullWidth:!0,disabled:J,children:J?(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===N?"Syncing...":"Verifying..."]}):"Enable Cloud"}),(0,d.jsx)(h.$n,{onClick:()=>C(!1),variant:"ghost",fullWidth:!0,disabled:J,children:"Cancel"})]})]})}),(0,d.jsx)(h.aF,{isOpen:l,title:"Create API Key",onClose:()=>{m(!1),o("")},children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)(h.pd,{label:"Key Name",value:n,onChange:a=>o(a.target.value),placeholder:"Production Key"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:Z,fullWidth:!0,disabled:!n.trim(),children:"Create"}),(0,d.jsx)(h.$n,{onClick:()=>{m(!1),o("")},variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,d.jsx)(h.aF,{isOpen:!!p,title:"API Key Created",onClose:()=>q(null),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,d.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 mb-2 font-medium",children:"Save this key now!"}),(0,d.jsx)("p",{className:"text-sm text-yellow-700 dark:text-yellow-300",children:"This is the only time you will see this key. Store it securely."})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.pd,{value:p||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,d.jsx)(h.$n,{variant:"secondary",icon:"created_key"===P?"check":"content_copy",onClick:()=>Q(p,"created_key"),children:"created_key"===P?"Copied!":"Copy"})]}),(0,d.jsx)(h.$n,{onClick:()=>q(null),fullWidth:!0,children:"Done"})]})}),(0,d.jsx)(h.aF,{isOpen:D,title:"Disable Cloud Proxy",onClose:()=>!J&&E(!1),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-red-600 dark:text-red-400",children:"warning"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm text-red-800 dark:text-red-200 font-medium mb-1",children:"Warning"}),(0,d.jsx)("p",{className:"text-sm text-red-700 dark:text-red-300",children:"All auth sessions will be deleted from cloud."})]})]})}),J&&(0,d.jsxs)("div",{className:"flex items-center gap-3 p-3 bg-primary/10 border border-primary/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-primary",children:"progress_activity"}),(0,d.jsx)("div",{className:"flex-1",children:(0,d.jsxs)("p",{className:"text-sm font-medium text-primary",children:["syncing"===N&&"Syncing latest data...","disabling"===N&&"Disabling cloud..."]})})]}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Are you sure you want to disable cloud proxy?"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:W,fullWidth:!0,disabled:J,className:"bg-red-500! hover:bg-red-600! text-white!",children:J?(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"syncing"===N?"Syncing...":"Disabling..."]}):"Disable Cloud"}),(0,d.jsx)(h.$n,{onClick:()=>E(!1),variant:"ghost",fullWidth:!0,disabled:J,children:"Cancel"})]})]})})]})}l.propTypes={machineId:g().string.isRequired}},51747:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/Working/router4/app/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/Working/router4/app/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js","default")},77855:(a,b,c)=>{Promise.resolve().then(c.bind(c,51747))},87250:(a,b,c)=>{"use strict";c.d(b,{D1:()=>e});var d=c(54603);async function e(){return await (0,d.Xj)()}}};
3
+ This key will stop working immediately but can be resumed later.`)&&Q(a.id,b):Q(a.id,b)},title:a.isActive?"Pause key":"Resume key"}),(0,d.jsx)("button",{onClick:()=>P(a.id),className:"p-2 hover:bg-red-500/10 rounded text-red-500 opacity-0 group-hover:opacity-100 transition-all",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"})})]})]},a.id))})]}),(0,d.jsx)(h.aF,{isOpen:k,title:"Create API Key",onClose:()=>{l(!1),n("")},children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)(h.pd,{label:"Key Name",value:m,onChange:a=>n(a.target.value),placeholder:"Production Key"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:O,fullWidth:!0,disabled:!m.trim(),children:"Create"}),(0,d.jsx)(h.$n,{onClick:()=>{l(!1),n("")},variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,d.jsx)(h.aF,{isOpen:!!o,title:"API Key Created",onClose:()=>p(null),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4",children:[(0,d.jsx)("p",{className:"text-sm text-yellow-800 dark:text-yellow-200 mb-2 font-medium",children:"Save this key now!"}),(0,d.jsx)("p",{className:"text-sm text-yellow-700 dark:text-yellow-300",children:"This is the only time you will see this key. Store it securely."})]}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.pd,{value:o||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,d.jsx)(h.$n,{variant:"secondary",icon:"created_key"===I?"check":"content_copy",onClick:()=>J(o,"created_key"),children:"created_key"===I?"Copied!":"Copy"})]}),(0,d.jsx)(h.$n,{onClick:()=>p(null),fullWidth:!0,children:"Done"})]})}),(0,d.jsx)(h.aF,{isOpen:G,title:"Enable Tunnel",onClose:()=>H(!1),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg p-4",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-blue-600 dark:text-blue-400",children:"cloud_upload"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200 font-medium mb-1",children:"Cloudflare Tunnel"}),(0,d.jsx)("p",{className:"text-sm text-blue-700 dark:text-blue-300",children:"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."})]})]})}),(0,d.jsx)("div",{className:"grid grid-cols-2 gap-3",children:j.map(a=>(0,d.jsxs)("div",{className:"flex flex-col items-center text-center p-3 rounded-lg bg-sidebar/50",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-xl text-primary mb-1",children:a.icon}),(0,d.jsx)("p",{className:"text-xs font-semibold",children:a.title}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:a.desc})]},a.title))}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Requires outbound port 7844 (TCP/UDP). Connection may take 10-30s."}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:M,fullWidth:!0,className:"bg-linear-to-r from-primary to-blue-500 hover:from-primary-hover hover:to-blue-600 text-white!",children:"Start Tunnel"}),(0,d.jsx)(h.$n,{onClick:()=>H(!1),variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}),(0,d.jsx)(h.aF,{isOpen:E,title:"Disable Tunnel",onClose:()=>!y&&F(!1),children:(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4",children:(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-red-600 dark:text-red-400",children:"warning"}),(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-sm text-red-800 dark:text-red-200 font-medium mb-1",children:"Warning"}),(0,d.jsx)("p",{className:"text-sm text-red-700 dark:text-red-300",children:"The tunnel will be disconnected. Remote access will stop working."})]})]})}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Are you sure you want to disable the tunnel?"}),(0,d.jsxs)("div",{className:"flex gap-2",children:[(0,d.jsx)(h.$n,{onClick:N,fullWidth:!0,disabled:y,className:"bg-red-500! hover:bg-red-600! text-white!",children:y?(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin text-sm",children:"progress_activity"}),"Disabling..."]}):"Disable Tunnel"}),(0,d.jsx)(h.$n,{onClick:()=>F(!1),variant:"ghost",fullWidth:!0,disabled:y,children:"Cancel"})]})]})})]})}k.propTypes={machineId:g().string.isRequired}},51747:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(77943).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/Users/Working/router4/app/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/Users/Working/router4/app/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.js","default")},54603:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>e});var d=c(19713);async function e(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt";try{let a=(0,d.machineIdSync)();return(await Promise.resolve().then(c.t.bind(c,55511,23))).createHash("sha256").update(a+b).digest("hex").substring(0,16)}catch(a){return console.log("Error getting machine ID:",a),crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){let b=16*Math.random()|0;return("x"==a?b:3&b|8).toString(16)})}}},77855:(a,b,c)=>{Promise.resolve().then(c.bind(c,51747))},87250:(a,b,c)=>{"use strict";c.d(b,{D1:()=>e});var d=c(54603);async function e(){return await (0,d.Xj)()}}};
@@ -1 +1 @@
1
- <!DOCTYPE html><!--jWN0ATVbXrki9UzHFr5nv--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/6a76c1062906da03.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-25c43999146c934e.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-c67589461d449d62.js" async=""></script><script src="/_next/static/chunks/main-app-8803a230dfc5c361.js" async=""></script><script src="/_next/static/chunks/c6123951-59125299ca0d7b46.js" async=""></script><script src="/_next/static/chunks/600-3e3d52de0d15664e.js" async=""></script><script src="/_next/static/chunks/1672-4ed8fbaefe011b6e.js" async=""></script><script src="/_next/static/chunks/8729-4d9f5ebc26ea7fb5.js" async=""></script><script src="/_next/static/chunks/5497-825dd88e0a663cfe.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-66d69a4ba6e79bd5.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-25c43999146c934e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21110,[\"4335\",\"static/chunks/c6123951-59125299ca0d7b46.js\",\"600\",\"static/chunks/600-3e3d52de0d15664e.js\",\"1672\",\"static/chunks/1672-4ed8fbaefe011b6e.js\",\"8729\",\"static/chunks/8729-4d9f5ebc26ea7fb5.js\",\"5497\",\"static/chunks/5497-825dd88e0a663cfe.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-66d69a4ba6e79bd5.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[90484,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/6a76c1062906da03.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jWN0ATVbXrki9UzHFr5nv\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6a76c1062906da03.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[86869,[],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$Ld\",\"4\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--0kBQAQeQcXjhcg1PkyrJY--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/6a76c1062906da03.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-25c43999146c934e.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-c67589461d449d62.js" async=""></script><script src="/_next/static/chunks/main-app-8803a230dfc5c361.js" async=""></script><script src="/_next/static/chunks/c6123951-59125299ca0d7b46.js" async=""></script><script src="/_next/static/chunks/600-3e3d52de0d15664e.js" async=""></script><script src="/_next/static/chunks/1672-4ed8fbaefe011b6e.js" async=""></script><script src="/_next/static/chunks/8729-8e5ba4c38b294fe1.js" async=""></script><script src="/_next/static/chunks/5497-590ec825fbd92e55.js" async=""></script><script src="/_next/static/chunks/app/(dashboard)/layout-66d69a4ba6e79bd5.js" async=""></script><link rel="preload" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&amp;display=swap" as="style"/><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><title>9Router - AI Infrastructure Management</title><meta name="description" content="One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly."/><link rel="icon" href="/favicon.ico?603d046c9a6fdfbb" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/favicon.svg"/><link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&amp;display=swap" rel="stylesheet"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-25c43999146c934e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[21110,[\"4335\",\"static/chunks/c6123951-59125299ca0d7b46.js\",\"600\",\"static/chunks/600-3e3d52de0d15664e.js\",\"1672\",\"static/chunks/1672-4ed8fbaefe011b6e.js\",\"8729\",\"static/chunks/8729-8e5ba4c38b294fe1.js\",\"5497\",\"static/chunks/5497-590ec825fbd92e55.js\",\"9305\",\"static/chunks/app/(dashboard)/layout-66d69a4ba6e79bd5.js\"],\"ThemeProvider\"]\n3:I[57121,[],\"\"]\n4:I[74581,[],\"\"]\n5:I[90484,[],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[90484,[],\"ViewportBoundary\"]\na:I[90484,[],\"MetadataBoundary\"]\nc:I[27123,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/6a76c1062906da03.css\",\"style\"]\n:HL[\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"0kBQAQeQcXjhcg1PkyrJY\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6a76c1062906da03.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200\u0026display=swap\",\"rel\":\"stylesheet\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"d:I[86869,[],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"9Router - AI Infrastructure Management\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"One endpoint for all your AI providers. Manage keys, monitor usage, and scale effortlessly.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?603d046c9a6fdfbb\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\"}],[\"$\",\"$Ld\",\"4\",{}]]\n"])</script></body></html>
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--jWN0ATVbXrki9UzHFr5nv--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-25c43999146c934e.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-c67589461d449d62.js" async=""></script><script src="/_next/static/chunks/main-app-8803a230dfc5c361.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-25c43999146c934e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"jWN0ATVbXrki9UzHFr5nv\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--0kBQAQeQcXjhcg1PkyrJY--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-25c43999146c934e.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-c67589461d449d62.js" async=""></script><script src="/_next/static/chunks/main-app-8803a230dfc5c361.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-25c43999146c934e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"0kBQAQeQcXjhcg1PkyrJY\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>