n9router 0.4.2 → 0.4.5

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 (931) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +14 -4
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/routes-manifest.json +60 -0
  6. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +2 -2
  7. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +2 -2
  10. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  13. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  16. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  19. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +18 -2
  22. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js +2 -2
  28. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js +2 -2
  31. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js +2 -2
  34. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  37. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js +2 -2
  40. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js +2 -2
  43. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  46. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js +2 -2
  49. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  52. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  55. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/_global-error/page.js +3 -3
  58. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  60. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  61. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  68. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  71. package/.next/standalone/.next/server/app/_not-found.rsc +4 -4
  72. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  73. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  74. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  75. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  77. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  78. package/.next/standalone/.next/server/app/api/9remote/install/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/9remote/start/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/9remote/status/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/antigravity-ide/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/antigravity-tools/import/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/antigravity-tools/import/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js +1 -1
  85. package/.next/standalone/.next/server/app/api/antigravity-tools/import-refresh-tokens/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/login/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  89. package/.next/standalone/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
  90. package/.next/standalone/.next/server/app/api/cli-tools/claude-settings/route.js +2 -2
  91. package/.next/standalone/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
  92. package/.next/standalone/.next/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  93. package/.next/standalone/.next/server/app/api/cli-tools/droid-settings/route.js +2 -2
  94. package/.next/standalone/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  95. package/.next/standalone/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  96. package/.next/standalone/.next/server/app/api/cloud/auth/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/cloud/credentials/update/route.js +1 -1
  98. package/.next/standalone/.next/server/app/api/cloud/model/resolve/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/cloud/models/alias/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/combos/[id]/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/combos/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/health/route.js +1 -0
  103. package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -0
  104. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -0
  105. package/.next/standalone/.next/server/app/api/init/route.js +1 -1
  106. package/.next/standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/internal/request-detail/route.js +1 -1
  108. package/.next/standalone/.next/server/app/api/internal/usage/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/keys/[id]/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/keys/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/locale/route.js +1 -1
  112. package/.next/standalone/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -0
  113. package/.next/standalone/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -0
  114. package/.next/standalone/.next/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -0
  115. package/.next/standalone/.next/server/app/api/media-providers/tts/voices/route.js +1 -0
  116. package/.next/standalone/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -0
  117. package/.next/standalone/.next/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -0
  118. package/.next/standalone/.next/server/app/api/models/alias/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/models/availability/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/models/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/models/test/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  124. package/.next/standalone/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/oauth/kiro/auto-import/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/oauth/kiro/import/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  130. package/.next/standalone/.next/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/pricing/route.js +1 -1
  132. package/.next/standalone/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  133. package/.next/standalone/.next/server/app/api/provider-nodes/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  135. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js +1 -1
  136. package/.next/standalone/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/providers/[id]/route.js +1 -1
  138. package/.next/standalone/.next/server/app/api/providers/[id]/test/route.js +1 -1
  139. package/.next/standalone/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/providers/client/route.js +1 -1
  142. package/.next/standalone/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/providers/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js +1 -1
  145. package/.next/standalone/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/providers/validate/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  148. package/.next/standalone/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/proxy-pools/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/settings/database/route.js +1 -1
  151. package/.next/standalone/.next/server/app/api/settings/proxy-test/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/settings/require-login/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/settings/route.js +1 -1
  154. package/.next/standalone/.next/server/app/api/shutdown/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/tags/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/translator/console-logs/route.js +1 -1
  157. package/.next/standalone/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  158. package/.next/standalone/.next/server/app/api/translator/load/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/translator/save/route.js +1 -1
  160. package/.next/standalone/.next/server/app/api/translator/send/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/translator/translate/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js +1 -1
  163. package/.next/standalone/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/tunnel/status/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/tunnel/tailscale-check/route.js +4 -0
  169. package/.next/standalone/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -0
  170. package/.next/standalone/.next/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -0
  171. package/.next/standalone/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -0
  172. package/.next/standalone/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -0
  173. package/.next/standalone/.next/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -0
  174. package/.next/standalone/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -0
  175. package/.next/standalone/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -0
  176. package/.next/standalone/.next/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -0
  177. package/.next/standalone/.next/server/app/api/tunnel/tailscale-install/route.js +5 -0
  178. package/.next/standalone/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -0
  179. package/.next/standalone/.next/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -0
  180. package/.next/standalone/.next/server/app/api/tunnel/tailscale-login/route.js +4 -0
  181. package/.next/standalone/.next/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -0
  182. package/.next/standalone/.next/server/app/api/tunnel/tailscale-login/route_client-reference-manifest.js +1 -0
  183. package/.next/standalone/.next/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -0
  184. package/.next/standalone/.next/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -0
  185. package/.next/standalone/.next/server/app/api/tunnel/tailscale-start-daemon/route_client-reference-manifest.js +1 -0
  186. package/.next/standalone/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/usage/chart/route.js +1 -1
  188. package/.next/standalone/.next/server/app/api/usage/history/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/usage/logs/route.js +1 -1
  190. package/.next/standalone/.next/server/app/api/usage/providers/route.js +1 -1
  191. package/.next/standalone/.next/server/app/api/usage/request-details/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/usage/request-logs/route.js +1 -1
  193. package/.next/standalone/.next/server/app/api/usage/stats/route.js +1 -1
  194. package/.next/standalone/.next/server/app/api/usage/stream/route.js +2 -2
  195. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/v1/audio/speech/route.js +1 -0
  198. package/.next/standalone/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -0
  199. package/.next/standalone/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -0
  200. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js +1 -1
  203. package/.next/standalone/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/v1/messages/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/v1/models/route.js +1 -1
  208. package/.next/standalone/.next/server/app/api/v1/responses/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/v1/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  212. package/.next/standalone/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  213. package/.next/standalone/.next/server/app/api/v1beta/models/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/version/route.js +1 -1
  215. package/.next/standalone/.next/server/app/callback/page.js +2 -2
  216. package/.next/standalone/.next/server/app/callback/page.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/callback.html +1 -1
  219. package/.next/standalone/.next/server/app/callback.rsc +4 -4
  220. package/.next/standalone/.next/server/app/callback.segments/_full.segment.rsc +4 -4
  221. package/.next/standalone/.next/server/app/callback.segments/_head.segment.rsc +1 -1
  222. package/.next/standalone/.next/server/app/callback.segments/_index.segment.rsc +4 -4
  223. package/.next/standalone/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  224. package/.next/standalone/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  225. package/.next/standalone/.next/server/app/callback.segments/callback.segment.rsc +1 -1
  226. package/.next/standalone/.next/server/app/dashboard/basic-chat.html +1 -1
  227. package/.next/standalone/.next/server/app/dashboard/basic-chat.rsc +6 -6
  228. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  229. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  231. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  232. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  233. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  234. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  235. package/.next/standalone/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  236. package/.next/standalone/.next/server/app/dashboard/cli-tools.html +1 -1
  237. package/.next/standalone/.next/server/app/dashboard/cli-tools.rsc +6 -6
  238. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  240. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  243. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  244. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  245. package/.next/standalone/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/dashboard/combos.html +1 -1
  247. package/.next/standalone/.next/server/app/dashboard/combos.rsc +6 -6
  248. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  252. package/.next/standalone/.next/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  253. package/.next/standalone/.next/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  255. package/.next/standalone/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  256. package/.next/standalone/.next/server/app/dashboard/endpoint.html +1 -1
  257. package/.next/standalone/.next/server/app/dashboard/endpoint.rsc +6 -6
  258. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  260. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  261. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  262. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +6 -6
  263. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  265. package/.next/standalone/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  266. package/.next/standalone/.next/server/app/dashboard/mitm.html +1 -1
  267. package/.next/standalone/.next/server/app/dashboard/mitm.rsc +6 -6
  268. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  271. package/.next/standalone/.next/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  272. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  273. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  275. package/.next/standalone/.next/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  276. package/.next/standalone/.next/server/app/dashboard/profile.html +1 -1
  277. package/.next/standalone/.next/server/app/dashboard/profile.rsc +6 -6
  278. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  279. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  282. package/.next/standalone/.next/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  283. package/.next/standalone/.next/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  284. package/.next/standalone/.next/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  285. package/.next/standalone/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  286. package/.next/standalone/.next/server/app/dashboard/providers/new.html +1 -1
  287. package/.next/standalone/.next/server/app/dashboard/providers/new.rsc +6 -6
  288. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  289. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  290. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  293. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  294. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  295. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  296. package/.next/standalone/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  297. package/.next/standalone/.next/server/app/dashboard/providers.html +1 -1
  298. package/.next/standalone/.next/server/app/dashboard/providers.rsc +6 -6
  299. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  300. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  301. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  303. package/.next/standalone/.next/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  304. package/.next/standalone/.next/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  305. package/.next/standalone/.next/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  306. package/.next/standalone/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  307. package/.next/standalone/.next/server/app/dashboard/proxy-pools.html +1 -1
  308. package/.next/standalone/.next/server/app/dashboard/proxy-pools.rsc +6 -6
  309. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  310. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  312. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  313. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  314. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  315. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  316. package/.next/standalone/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  317. package/.next/standalone/.next/server/app/dashboard/quota.html +2 -2
  318. package/.next/standalone/.next/server/app/dashboard/quota.rsc +7 -7
  319. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  320. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  321. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  322. package/.next/standalone/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  323. package/.next/standalone/.next/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  324. package/.next/standalone/.next/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  326. package/.next/standalone/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  327. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js +2 -2
  328. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  329. package/.next/standalone/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  330. package/.next/standalone/.next/server/app/dashboard/settings/pricing.html +1 -1
  331. package/.next/standalone/.next/server/app/dashboard/settings/pricing.rsc +4 -4
  332. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  333. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  334. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  335. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  336. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  338. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  339. package/.next/standalone/.next/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  340. package/.next/standalone/.next/server/app/dashboard/translator.html +1 -1
  341. package/.next/standalone/.next/server/app/dashboard/translator.rsc +6 -6
  342. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  343. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  344. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  345. package/.next/standalone/.next/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  346. package/.next/standalone/.next/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  347. package/.next/standalone/.next/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  348. package/.next/standalone/.next/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  349. package/.next/standalone/.next/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  350. package/.next/standalone/.next/server/app/dashboard/usage.html +1 -1
  351. package/.next/standalone/.next/server/app/dashboard/usage.rsc +6 -6
  352. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  353. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  354. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  355. package/.next/standalone/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  356. package/.next/standalone/.next/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  357. package/.next/standalone/.next/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  359. package/.next/standalone/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  360. package/.next/standalone/.next/server/app/dashboard.html +1 -1
  361. package/.next/standalone/.next/server/app/dashboard.rsc +6 -6
  362. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  363. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  364. package/.next/standalone/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  365. package/.next/standalone/.next/server/app/dashboard.segments/_full.segment.rsc +6 -6
  366. package/.next/standalone/.next/server/app/dashboard.segments/_head.segment.rsc +1 -1
  367. package/.next/standalone/.next/server/app/dashboard.segments/_index.segment.rsc +4 -4
  368. package/.next/standalone/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  369. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
  370. package/.next/standalone/.next/server/app/index.html +1 -1
  371. package/.next/standalone/.next/server/app/index.rsc +4 -4
  372. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  373. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  374. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  375. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  376. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  377. package/.next/standalone/.next/server/app/landing/page.js +2 -2
  378. package/.next/standalone/.next/server/app/landing/page.js.nft.json +1 -1
  379. package/.next/standalone/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  380. package/.next/standalone/.next/server/app/landing.html +1 -1
  381. package/.next/standalone/.next/server/app/landing.rsc +4 -4
  382. package/.next/standalone/.next/server/app/landing.segments/_full.segment.rsc +4 -4
  383. package/.next/standalone/.next/server/app/landing.segments/_head.segment.rsc +1 -1
  384. package/.next/standalone/.next/server/app/landing.segments/_index.segment.rsc +4 -4
  385. package/.next/standalone/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  386. package/.next/standalone/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  387. package/.next/standalone/.next/server/app/landing.segments/landing.segment.rsc +1 -1
  388. package/.next/standalone/.next/server/app/login/page.js +2 -2
  389. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  390. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  391. package/.next/standalone/.next/server/app/login.html +1 -1
  392. package/.next/standalone/.next/server/app/login.rsc +5 -5
  393. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +5 -5
  394. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  395. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +4 -4
  396. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  397. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  398. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  399. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js +2 -2
  400. package/.next/standalone/.next/server/app/page.js +2 -2
  401. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  402. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  403. package/.next/standalone/.next/server/app-paths-manifest.json +14 -4
  404. package/.next/standalone/.next/server/chunks/2506.js +5 -0
  405. package/.next/standalone/.next/server/chunks/289.js +1 -0
  406. package/.next/standalone/.next/server/chunks/318.js +4 -4
  407. package/.next/standalone/.next/server/chunks/3646.js +1 -1
  408. package/.next/standalone/.next/server/chunks/3832.js +1 -1
  409. package/.next/standalone/.next/server/chunks/412.js +2 -2
  410. package/.next/standalone/.next/server/chunks/4989.js +1 -1
  411. package/.next/standalone/.next/server/chunks/5127.js +1 -0
  412. package/.next/standalone/.next/server/chunks/5324.js +1 -1
  413. package/.next/standalone/.next/server/chunks/6555.js +1 -0
  414. package/.next/standalone/.next/server/chunks/7828.js +1 -0
  415. package/.next/standalone/.next/server/chunks/7994.js +2 -2
  416. package/.next/standalone/.next/server/chunks/8220.js +1 -1
  417. package/.next/standalone/.next/server/chunks/8226.js +18 -0
  418. package/.next/standalone/.next/server/chunks/869.js +1 -1
  419. package/.next/standalone/.next/server/chunks/8895.js +1 -1
  420. package/.next/standalone/.next/server/chunks/9201.js +1 -1
  421. package/.next/standalone/.next/server/chunks/9609.js +1 -1
  422. package/.next/standalone/.next/server/chunks/9718.js +1 -1
  423. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  424. package/.next/standalone/.next/server/middleware.js +2 -2
  425. package/.next/standalone/.next/server/pages/404.html +1 -1
  426. package/.next/standalone/.next/server/pages/500.html +1 -1
  427. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  428. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  429. package/.next/standalone/.next/static/chunks/1321-a07400747b42cd8b.js +1 -0
  430. package/.next/standalone/.next/static/chunks/2589-e33ccd63c1afc7ba.js +3 -0
  431. package/.next/standalone/.next/static/chunks/{5497-89d4d158e6603ee9.js → 5497-f31fec65c312a69e.js} +2 -2
  432. package/.next/standalone/.next/static/chunks/5601-0a2235641c503d61.js +18 -0
  433. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-6de79bf0d6e818c6.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-ac26c9a5556a0b0b.js → page-80256518cf21bba3.js} +1 -1
  435. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-9187cde45715aa36.js +17 -0
  436. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-4b6e1e7c8db448ec.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-d99e342ecd18b0ef.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-179c978e4cac46d1.js → page-acbbfd33f5456170.js} +2 -2
  439. package/.next/standalone/.next/static/chunks/app/_global-error/page-ad4e2601ee308c36.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/9remote/install/route-ad4e2601ee308c36.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/9remote/start/route-ad4e2601ee308c36.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/9remote/status/route-ad4e2601ee308c36.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/antigravity-ide/route-ad4e2601ee308c36.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/antigravity-tools/import/route-ad4e2601ee308c36.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-ad4e2601ee308c36.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/auth/login/route-ad4e2601ee308c36.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-ad4e2601ee308c36.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-ad4e2601ee308c36.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-ad4e2601ee308c36.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/cli-tools/claude-settings/route-ad4e2601ee308c36.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/cli-tools/codex-settings/route-ad4e2601ee308c36.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/cli-tools/copilot-settings/route-ad4e2601ee308c36.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/cli-tools/droid-settings/route-ad4e2601ee308c36.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-ad4e2601ee308c36.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/cli-tools/opencode-settings/route-ad4e2601ee308c36.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/cloud/auth/route-ad4e2601ee308c36.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/cloud/credentials/update/route-ad4e2601ee308c36.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/cloud/model/resolve/route-ad4e2601ee308c36.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/cloud/models/alias/route-ad4e2601ee308c36.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/combos/[id]/route-ad4e2601ee308c36.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/combos/route-ad4e2601ee308c36.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/health/route-ad4e2601ee308c36.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/init/route-ad4e2601ee308c36.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/internal/request-detail/route-ad4e2601ee308c36.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/internal/usage/route-ad4e2601ee308c36.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/keys/[id]/route-ad4e2601ee308c36.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/keys/route-ad4e2601ee308c36.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/locale/route-ad4e2601ee308c36.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-ad4e2601ee308c36.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/api/media-providers/tts/voices/route-ad4e2601ee308c36.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/api/models/alias/route-ad4e2601ee308c36.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/api/models/availability/route-ad4e2601ee308c36.js +1 -0
  473. package/.next/standalone/.next/static/chunks/app/api/models/route-ad4e2601ee308c36.js +1 -0
  474. package/.next/standalone/.next/static/chunks/app/api/models/test/route-ad4e2601ee308c36.js +1 -0
  475. package/.next/standalone/.next/static/chunks/app/api/oauth/[provider]/[action]/route-ad4e2601ee308c36.js +1 -0
  476. package/.next/standalone/.next/static/chunks/app/api/oauth/cursor/auto-import/route-ad4e2601ee308c36.js +1 -0
  477. package/.next/standalone/.next/static/chunks/app/api/oauth/cursor/import/route-ad4e2601ee308c36.js +1 -0
  478. package/.next/standalone/.next/static/chunks/app/api/oauth/gitlab/pat/route-ad4e2601ee308c36.js +1 -0
  479. package/.next/standalone/.next/static/chunks/app/api/oauth/iflow/cookie/route-ad4e2601ee308c36.js +1 -0
  480. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/auto-import/route-ad4e2601ee308c36.js +1 -0
  481. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/import/route-ad4e2601ee308c36.js +1 -0
  482. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-ad4e2601ee308c36.js +1 -0
  483. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-ad4e2601ee308c36.js +1 -0
  484. package/.next/standalone/.next/static/chunks/app/api/pricing/route-ad4e2601ee308c36.js +1 -0
  485. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/[id]/route-ad4e2601ee308c36.js +1 -0
  486. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/route-ad4e2601ee308c36.js +1 -0
  487. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/validate/route-ad4e2601ee308c36.js +1 -0
  488. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/models/route-ad4e2601ee308c36.js +1 -0
  489. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/route-ad4e2601ee308c36.js +1 -0
  490. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/test/route-ad4e2601ee308c36.js +1 -0
  491. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/test-models/route-ad4e2601ee308c36.js +1 -0
  492. package/.next/standalone/.next/static/chunks/app/api/providers/client/route-ad4e2601ee308c36.js +1 -0
  493. package/.next/standalone/.next/static/chunks/app/api/providers/kilo/free-models/route-ad4e2601ee308c36.js +1 -0
  494. package/.next/standalone/.next/static/chunks/app/api/providers/route-ad4e2601ee308c36.js +1 -0
  495. package/.next/standalone/.next/static/chunks/app/api/providers/test-batch/route-ad4e2601ee308c36.js +1 -0
  496. package/.next/standalone/.next/static/chunks/app/api/providers/validate/route-ad4e2601ee308c36.js +1 -0
  497. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/[id]/route-ad4e2601ee308c36.js +1 -0
  498. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/[id]/test/route-ad4e2601ee308c36.js +1 -0
  499. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/route-ad4e2601ee308c36.js +1 -0
  500. package/.next/standalone/.next/static/chunks/app/api/settings/database/route-ad4e2601ee308c36.js +1 -0
  501. package/.next/standalone/.next/static/chunks/app/api/settings/proxy-test/route-ad4e2601ee308c36.js +1 -0
  502. package/.next/standalone/.next/static/chunks/app/api/settings/require-login/route-ad4e2601ee308c36.js +1 -0
  503. package/.next/standalone/.next/static/chunks/app/api/settings/route-ad4e2601ee308c36.js +1 -0
  504. package/.next/standalone/.next/static/chunks/app/api/shutdown/route-ad4e2601ee308c36.js +1 -0
  505. package/.next/standalone/.next/static/chunks/app/api/tags/route-ad4e2601ee308c36.js +1 -0
  506. package/.next/standalone/.next/static/chunks/app/api/translator/console-logs/route-ad4e2601ee308c36.js +1 -0
  507. package/.next/standalone/.next/static/chunks/app/api/translator/console-logs/stream/route-ad4e2601ee308c36.js +1 -0
  508. package/.next/standalone/.next/static/chunks/app/api/translator/load/route-ad4e2601ee308c36.js +1 -0
  509. package/.next/standalone/.next/static/chunks/app/api/translator/save/route-ad4e2601ee308c36.js +1 -0
  510. package/.next/standalone/.next/static/chunks/app/api/translator/send/route-ad4e2601ee308c36.js +1 -0
  511. package/.next/standalone/.next/static/chunks/app/api/translator/translate/route-ad4e2601ee308c36.js +1 -0
  512. package/.next/standalone/.next/static/chunks/app/api/tunnel/disable/route-ad4e2601ee308c36.js +1 -0
  513. package/.next/standalone/.next/static/chunks/app/api/tunnel/enable/route-ad4e2601ee308c36.js +1 -0
  514. package/.next/standalone/.next/static/chunks/app/api/tunnel/status/route-ad4e2601ee308c36.js +1 -0
  515. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-check/route-ad4e2601ee308c36.js +1 -0
  516. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-disable/route-ad4e2601ee308c36.js +1 -0
  517. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-enable/route-ad4e2601ee308c36.js +1 -0
  518. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-install/route-ad4e2601ee308c36.js +1 -0
  519. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-login/route-ad4e2601ee308c36.js +1 -0
  520. package/.next/standalone/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-ad4e2601ee308c36.js +1 -0
  521. package/.next/standalone/.next/static/chunks/app/api/usage/[connectionId]/route-ad4e2601ee308c36.js +1 -0
  522. package/.next/standalone/.next/static/chunks/app/api/usage/chart/route-ad4e2601ee308c36.js +1 -0
  523. package/.next/standalone/.next/static/chunks/app/api/usage/history/route-ad4e2601ee308c36.js +1 -0
  524. package/.next/standalone/.next/static/chunks/app/api/usage/logs/route-ad4e2601ee308c36.js +1 -0
  525. package/.next/standalone/.next/static/chunks/app/api/usage/providers/route-ad4e2601ee308c36.js +1 -0
  526. package/.next/standalone/.next/static/chunks/app/api/usage/request-details/route-ad4e2601ee308c36.js +1 -0
  527. package/.next/standalone/.next/static/chunks/app/api/usage/request-logs/route-ad4e2601ee308c36.js +1 -0
  528. package/.next/standalone/.next/static/chunks/app/api/usage/stats/route-ad4e2601ee308c36.js +1 -0
  529. package/.next/standalone/.next/static/chunks/app/api/usage/stream/route-ad4e2601ee308c36.js +1 -0
  530. package/.next/standalone/.next/static/chunks/app/api/v1/api/chat/route-ad4e2601ee308c36.js +1 -0
  531. package/.next/standalone/.next/static/chunks/app/api/v1/audio/speech/route-ad4e2601ee308c36.js +1 -0
  532. package/.next/standalone/.next/static/chunks/app/api/v1/chat/completions/route-ad4e2601ee308c36.js +1 -0
  533. package/.next/standalone/.next/static/chunks/app/api/v1/embeddings/route-ad4e2601ee308c36.js +1 -0
  534. package/.next/standalone/.next/static/chunks/app/api/v1/messages/count_tokens/route-ad4e2601ee308c36.js +1 -0
  535. package/.next/standalone/.next/static/chunks/app/api/v1/messages/route-ad4e2601ee308c36.js +1 -0
  536. package/.next/standalone/.next/static/chunks/app/api/v1/models/route-ad4e2601ee308c36.js +1 -0
  537. package/.next/standalone/.next/static/chunks/app/api/v1/responses/route-ad4e2601ee308c36.js +1 -0
  538. package/.next/standalone/.next/static/chunks/app/api/v1/route-ad4e2601ee308c36.js +1 -0
  539. package/.next/standalone/.next/static/chunks/app/api/v1beta/models/[...path]/route-ad4e2601ee308c36.js +1 -0
  540. package/.next/standalone/.next/static/chunks/app/api/v1beta/models/route-ad4e2601ee308c36.js +1 -0
  541. package/.next/standalone/.next/static/chunks/app/api/version/route-ad4e2601ee308c36.js +1 -0
  542. package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-ad4e2601ee308c36.js +1 -0
  543. package/.next/standalone/.next/static/chunks/app/page-ad4e2601ee308c36.js +1 -0
  544. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-ad4e2601ee308c36.js +1 -0
  545. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-ad4e2601ee308c36.js +1 -0
  546. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-ad4e2601ee308c36.js +1 -0
  547. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ad4e2601ee308c36.js +1 -0
  548. package/.next/standalone/.next/static/css/b18dfd2c9a0a7b49.css +1 -0
  549. package/.next/standalone/.next/static/u1_tnfo29B604S55DfKtf/_buildManifest.js +1 -0
  550. package/.next/standalone/package.json +1 -1
  551. package/.next/standalone/public/providers/cartesia.png +0 -0
  552. package/.next/standalone/public/providers/cerebras.png +0 -0
  553. package/.next/standalone/public/providers/cohere.png +0 -0
  554. package/.next/standalone/public/providers/comfyui.png +0 -0
  555. package/.next/standalone/public/providers/deepseek.png +0 -0
  556. package/.next/standalone/public/providers/edge-tts.png +0 -0
  557. package/.next/standalone/public/providers/elevenlabs.png +0 -0
  558. package/.next/standalone/public/providers/fireworks.png +0 -0
  559. package/.next/standalone/public/providers/google-tts.png +0 -0
  560. package/.next/standalone/public/providers/groq.png +0 -0
  561. package/.next/standalone/public/providers/huggingface.png +0 -0
  562. package/.next/standalone/public/providers/local-device.png +0 -0
  563. package/.next/standalone/public/providers/mistral.png +0 -0
  564. package/.next/standalone/public/providers/nebius.png +0 -0
  565. package/.next/standalone/public/providers/perplexity.png +0 -0
  566. package/.next/standalone/public/providers/playht.png +0 -0
  567. package/.next/standalone/public/providers/sdwebui.png +0 -0
  568. package/.next/standalone/public/providers/together.png +0 -0
  569. package/.next/standalone/public/providers/xai.png +0 -0
  570. package/.next/static/chunks/1321-a07400747b42cd8b.js +1 -0
  571. package/.next/static/chunks/2589-e33ccd63c1afc7ba.js +3 -0
  572. package/.next/static/chunks/{5497-89d4d158e6603ee9.js → 5497-f31fec65c312a69e.js} +2 -2
  573. package/.next/static/chunks/5601-0a2235641c503d61.js +18 -0
  574. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-6de79bf0d6e818c6.js +1 -0
  575. package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-ac26c9a5556a0b0b.js → page-80256518cf21bba3.js} +1 -1
  576. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-9187cde45715aa36.js +17 -0
  577. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-4b6e1e7c8db448ec.js +1 -0
  578. package/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-d99e342ecd18b0ef.js +1 -0
  579. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-179c978e4cac46d1.js → page-acbbfd33f5456170.js} +2 -2
  580. package/.next/static/chunks/app/_global-error/page-ad4e2601ee308c36.js +1 -0
  581. package/.next/static/chunks/app/api/9remote/install/route-ad4e2601ee308c36.js +1 -0
  582. package/.next/static/chunks/app/api/9remote/start/route-ad4e2601ee308c36.js +1 -0
  583. package/.next/static/chunks/app/api/9remote/status/route-ad4e2601ee308c36.js +1 -0
  584. package/.next/static/chunks/app/api/antigravity-ide/route-ad4e2601ee308c36.js +1 -0
  585. package/.next/static/chunks/app/api/antigravity-tools/import/route-ad4e2601ee308c36.js +1 -0
  586. package/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-ad4e2601ee308c36.js +1 -0
  587. package/.next/static/chunks/app/api/auth/login/route-ad4e2601ee308c36.js +1 -0
  588. package/.next/static/chunks/app/api/auth/logout/route-ad4e2601ee308c36.js +1 -0
  589. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-ad4e2601ee308c36.js +1 -0
  590. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-ad4e2601ee308c36.js +1 -0
  591. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-ad4e2601ee308c36.js +1 -0
  592. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-ad4e2601ee308c36.js +1 -0
  593. package/.next/static/chunks/app/api/cli-tools/copilot-settings/route-ad4e2601ee308c36.js +1 -0
  594. package/.next/static/chunks/app/api/cli-tools/droid-settings/route-ad4e2601ee308c36.js +1 -0
  595. package/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-ad4e2601ee308c36.js +1 -0
  596. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-ad4e2601ee308c36.js +1 -0
  597. package/.next/static/chunks/app/api/cloud/auth/route-ad4e2601ee308c36.js +1 -0
  598. package/.next/static/chunks/app/api/cloud/credentials/update/route-ad4e2601ee308c36.js +1 -0
  599. package/.next/static/chunks/app/api/cloud/model/resolve/route-ad4e2601ee308c36.js +1 -0
  600. package/.next/static/chunks/app/api/cloud/models/alias/route-ad4e2601ee308c36.js +1 -0
  601. package/.next/static/chunks/app/api/combos/[id]/route-ad4e2601ee308c36.js +1 -0
  602. package/.next/static/chunks/app/api/combos/route-ad4e2601ee308c36.js +1 -0
  603. package/.next/static/chunks/app/api/health/route-ad4e2601ee308c36.js +1 -0
  604. package/.next/static/chunks/app/api/init/route-ad4e2601ee308c36.js +1 -0
  605. package/.next/static/chunks/app/api/internal/request-detail/route-ad4e2601ee308c36.js +1 -0
  606. package/.next/static/chunks/app/api/internal/usage/route-ad4e2601ee308c36.js +1 -0
  607. package/.next/static/chunks/app/api/keys/[id]/route-ad4e2601ee308c36.js +1 -0
  608. package/.next/static/chunks/app/api/keys/route-ad4e2601ee308c36.js +1 -0
  609. package/.next/static/chunks/app/api/locale/route-ad4e2601ee308c36.js +1 -0
  610. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-ad4e2601ee308c36.js +1 -0
  611. package/.next/static/chunks/app/api/media-providers/tts/voices/route-ad4e2601ee308c36.js +1 -0
  612. package/.next/static/chunks/app/api/models/alias/route-ad4e2601ee308c36.js +1 -0
  613. package/.next/static/chunks/app/api/models/availability/route-ad4e2601ee308c36.js +1 -0
  614. package/.next/static/chunks/app/api/models/route-ad4e2601ee308c36.js +1 -0
  615. package/.next/static/chunks/app/api/models/test/route-ad4e2601ee308c36.js +1 -0
  616. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-ad4e2601ee308c36.js +1 -0
  617. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-ad4e2601ee308c36.js +1 -0
  618. package/.next/static/chunks/app/api/oauth/cursor/import/route-ad4e2601ee308c36.js +1 -0
  619. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-ad4e2601ee308c36.js +1 -0
  620. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-ad4e2601ee308c36.js +1 -0
  621. package/.next/static/chunks/app/api/oauth/kiro/auto-import/route-ad4e2601ee308c36.js +1 -0
  622. package/.next/static/chunks/app/api/oauth/kiro/import/route-ad4e2601ee308c36.js +1 -0
  623. package/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-ad4e2601ee308c36.js +1 -0
  624. package/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-ad4e2601ee308c36.js +1 -0
  625. package/.next/static/chunks/app/api/pricing/route-ad4e2601ee308c36.js +1 -0
  626. package/.next/static/chunks/app/api/provider-nodes/[id]/route-ad4e2601ee308c36.js +1 -0
  627. package/.next/static/chunks/app/api/provider-nodes/route-ad4e2601ee308c36.js +1 -0
  628. package/.next/static/chunks/app/api/provider-nodes/validate/route-ad4e2601ee308c36.js +1 -0
  629. package/.next/static/chunks/app/api/providers/[id]/models/route-ad4e2601ee308c36.js +1 -0
  630. package/.next/static/chunks/app/api/providers/[id]/route-ad4e2601ee308c36.js +1 -0
  631. package/.next/static/chunks/app/api/providers/[id]/test/route-ad4e2601ee308c36.js +1 -0
  632. package/.next/static/chunks/app/api/providers/[id]/test-models/route-ad4e2601ee308c36.js +1 -0
  633. package/.next/static/chunks/app/api/providers/client/route-ad4e2601ee308c36.js +1 -0
  634. package/.next/static/chunks/app/api/providers/kilo/free-models/route-ad4e2601ee308c36.js +1 -0
  635. package/.next/static/chunks/app/api/providers/route-ad4e2601ee308c36.js +1 -0
  636. package/.next/static/chunks/app/api/providers/test-batch/route-ad4e2601ee308c36.js +1 -0
  637. package/.next/static/chunks/app/api/providers/validate/route-ad4e2601ee308c36.js +1 -0
  638. package/.next/static/chunks/app/api/proxy-pools/[id]/route-ad4e2601ee308c36.js +1 -0
  639. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-ad4e2601ee308c36.js +1 -0
  640. package/.next/static/chunks/app/api/proxy-pools/route-ad4e2601ee308c36.js +1 -0
  641. package/.next/static/chunks/app/api/settings/database/route-ad4e2601ee308c36.js +1 -0
  642. package/.next/static/chunks/app/api/settings/proxy-test/route-ad4e2601ee308c36.js +1 -0
  643. package/.next/static/chunks/app/api/settings/require-login/route-ad4e2601ee308c36.js +1 -0
  644. package/.next/static/chunks/app/api/settings/route-ad4e2601ee308c36.js +1 -0
  645. package/.next/static/chunks/app/api/shutdown/route-ad4e2601ee308c36.js +1 -0
  646. package/.next/static/chunks/app/api/tags/route-ad4e2601ee308c36.js +1 -0
  647. package/.next/static/chunks/app/api/translator/console-logs/route-ad4e2601ee308c36.js +1 -0
  648. package/.next/static/chunks/app/api/translator/console-logs/stream/route-ad4e2601ee308c36.js +1 -0
  649. package/.next/static/chunks/app/api/translator/load/route-ad4e2601ee308c36.js +1 -0
  650. package/.next/static/chunks/app/api/translator/save/route-ad4e2601ee308c36.js +1 -0
  651. package/.next/static/chunks/app/api/translator/send/route-ad4e2601ee308c36.js +1 -0
  652. package/.next/static/chunks/app/api/translator/translate/route-ad4e2601ee308c36.js +1 -0
  653. package/.next/static/chunks/app/api/tunnel/disable/route-ad4e2601ee308c36.js +1 -0
  654. package/.next/static/chunks/app/api/tunnel/enable/route-ad4e2601ee308c36.js +1 -0
  655. package/.next/static/chunks/app/api/tunnel/status/route-ad4e2601ee308c36.js +1 -0
  656. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-ad4e2601ee308c36.js +1 -0
  657. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-ad4e2601ee308c36.js +1 -0
  658. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-ad4e2601ee308c36.js +1 -0
  659. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-ad4e2601ee308c36.js +1 -0
  660. package/.next/static/chunks/app/api/tunnel/tailscale-login/route-ad4e2601ee308c36.js +1 -0
  661. package/.next/static/chunks/app/api/tunnel/tailscale-start-daemon/route-ad4e2601ee308c36.js +1 -0
  662. package/.next/static/chunks/app/api/usage/[connectionId]/route-ad4e2601ee308c36.js +1 -0
  663. package/.next/static/chunks/app/api/usage/chart/route-ad4e2601ee308c36.js +1 -0
  664. package/.next/static/chunks/app/api/usage/history/route-ad4e2601ee308c36.js +1 -0
  665. package/.next/static/chunks/app/api/usage/logs/route-ad4e2601ee308c36.js +1 -0
  666. package/.next/static/chunks/app/api/usage/providers/route-ad4e2601ee308c36.js +1 -0
  667. package/.next/static/chunks/app/api/usage/request-details/route-ad4e2601ee308c36.js +1 -0
  668. package/.next/static/chunks/app/api/usage/request-logs/route-ad4e2601ee308c36.js +1 -0
  669. package/.next/static/chunks/app/api/usage/stats/route-ad4e2601ee308c36.js +1 -0
  670. package/.next/static/chunks/app/api/usage/stream/route-ad4e2601ee308c36.js +1 -0
  671. package/.next/static/chunks/app/api/v1/api/chat/route-ad4e2601ee308c36.js +1 -0
  672. package/.next/static/chunks/app/api/v1/audio/speech/route-ad4e2601ee308c36.js +1 -0
  673. package/.next/static/chunks/app/api/v1/chat/completions/route-ad4e2601ee308c36.js +1 -0
  674. package/.next/static/chunks/app/api/v1/embeddings/route-ad4e2601ee308c36.js +1 -0
  675. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-ad4e2601ee308c36.js +1 -0
  676. package/.next/static/chunks/app/api/v1/messages/route-ad4e2601ee308c36.js +1 -0
  677. package/.next/static/chunks/app/api/v1/models/route-ad4e2601ee308c36.js +1 -0
  678. package/.next/static/chunks/app/api/v1/responses/route-ad4e2601ee308c36.js +1 -0
  679. package/.next/static/chunks/app/api/v1/route-ad4e2601ee308c36.js +1 -0
  680. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-ad4e2601ee308c36.js +1 -0
  681. package/.next/static/chunks/app/api/v1beta/models/route-ad4e2601ee308c36.js +1 -0
  682. package/.next/static/chunks/app/api/version/route-ad4e2601ee308c36.js +1 -0
  683. package/.next/static/chunks/app/manifest.webmanifest/route-ad4e2601ee308c36.js +1 -0
  684. package/.next/static/chunks/app/page-ad4e2601ee308c36.js +1 -0
  685. package/.next/static/chunks/next/dist/client/components/builtin/app-error-ad4e2601ee308c36.js +1 -0
  686. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-ad4e2601ee308c36.js +1 -0
  687. package/.next/static/chunks/next/dist/client/components/builtin/not-found-ad4e2601ee308c36.js +1 -0
  688. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ad4e2601ee308c36.js +1 -0
  689. package/.next/static/css/b18dfd2c9a0a7b49.css +1 -0
  690. package/.next/static/u1_tnfo29B604S55DfKtf/_buildManifest.js +1 -0
  691. package/package.json +1 -1
  692. package/public/providers/cartesia.png +0 -0
  693. package/public/providers/cerebras.png +0 -0
  694. package/public/providers/cohere.png +0 -0
  695. package/public/providers/comfyui.png +0 -0
  696. package/public/providers/deepseek.png +0 -0
  697. package/public/providers/edge-tts.png +0 -0
  698. package/public/providers/elevenlabs.png +0 -0
  699. package/public/providers/fireworks.png +0 -0
  700. package/public/providers/google-tts.png +0 -0
  701. package/public/providers/groq.png +0 -0
  702. package/public/providers/huggingface.png +0 -0
  703. package/public/providers/local-device.png +0 -0
  704. package/public/providers/mistral.png +0 -0
  705. package/public/providers/nebius.png +0 -0
  706. package/public/providers/perplexity.png +0 -0
  707. package/public/providers/playht.png +0 -0
  708. package/public/providers/sdwebui.png +0 -0
  709. package/public/providers/together.png +0 -0
  710. package/public/providers/xai.png +0 -0
  711. package/.next/standalone/.next/server/chunks/4756.js +0 -1
  712. package/.next/standalone/.next/server/chunks/7491.js +0 -15
  713. package/.next/standalone/.next/server/chunks/8137.js +0 -1
  714. package/.next/standalone/.next/static/Z3suC1MLsVxstppcjgL5J/_buildManifest.js +0 -1
  715. package/.next/standalone/.next/static/chunks/1321-835e375749d721a9.js +0 -1
  716. package/.next/standalone/.next/static/chunks/2589-339af3822207611a.js +0 -3
  717. package/.next/standalone/.next/static/chunks/5507-fb71a0c2e754e069.js +0 -15
  718. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-c0a16328f9656c4a.js +0 -1
  719. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-54e94d84c6afd6e8.js +0 -1
  720. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-a0923a6fbd936614.js +0 -1
  721. package/.next/standalone/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-1c784308396f8f41.js +0 -1
  722. package/.next/standalone/.next/static/chunks/app/_global-error/page-83e8db56a6cc8694.js +0 -1
  723. package/.next/standalone/.next/static/chunks/app/api/9remote/install/route-83e8db56a6cc8694.js +0 -1
  724. package/.next/standalone/.next/static/chunks/app/api/9remote/start/route-83e8db56a6cc8694.js +0 -1
  725. package/.next/standalone/.next/static/chunks/app/api/9remote/status/route-83e8db56a6cc8694.js +0 -1
  726. package/.next/standalone/.next/static/chunks/app/api/antigravity-ide/route-83e8db56a6cc8694.js +0 -1
  727. package/.next/standalone/.next/static/chunks/app/api/antigravity-tools/import/route-83e8db56a6cc8694.js +0 -1
  728. package/.next/standalone/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-83e8db56a6cc8694.js +0 -1
  729. package/.next/standalone/.next/static/chunks/app/api/auth/login/route-83e8db56a6cc8694.js +0 -1
  730. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-83e8db56a6cc8694.js +0 -1
  731. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-83e8db56a6cc8694.js +0 -1
  732. package/.next/standalone/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-83e8db56a6cc8694.js +0 -1
  733. package/.next/standalone/.next/static/chunks/app/api/cli-tools/claude-settings/route-83e8db56a6cc8694.js +0 -1
  734. package/.next/standalone/.next/static/chunks/app/api/cli-tools/codex-settings/route-83e8db56a6cc8694.js +0 -1
  735. package/.next/standalone/.next/static/chunks/app/api/cli-tools/copilot-settings/route-83e8db56a6cc8694.js +0 -1
  736. package/.next/standalone/.next/static/chunks/app/api/cli-tools/droid-settings/route-83e8db56a6cc8694.js +0 -1
  737. package/.next/standalone/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-83e8db56a6cc8694.js +0 -1
  738. package/.next/standalone/.next/static/chunks/app/api/cli-tools/opencode-settings/route-83e8db56a6cc8694.js +0 -1
  739. package/.next/standalone/.next/static/chunks/app/api/cloud/auth/route-83e8db56a6cc8694.js +0 -1
  740. package/.next/standalone/.next/static/chunks/app/api/cloud/credentials/update/route-83e8db56a6cc8694.js +0 -1
  741. package/.next/standalone/.next/static/chunks/app/api/cloud/model/resolve/route-83e8db56a6cc8694.js +0 -1
  742. package/.next/standalone/.next/static/chunks/app/api/cloud/models/alias/route-83e8db56a6cc8694.js +0 -1
  743. package/.next/standalone/.next/static/chunks/app/api/combos/[id]/route-83e8db56a6cc8694.js +0 -1
  744. package/.next/standalone/.next/static/chunks/app/api/combos/route-83e8db56a6cc8694.js +0 -1
  745. package/.next/standalone/.next/static/chunks/app/api/init/route-83e8db56a6cc8694.js +0 -1
  746. package/.next/standalone/.next/static/chunks/app/api/internal/request-detail/route-83e8db56a6cc8694.js +0 -1
  747. package/.next/standalone/.next/static/chunks/app/api/internal/usage/route-83e8db56a6cc8694.js +0 -1
  748. package/.next/standalone/.next/static/chunks/app/api/keys/[id]/route-83e8db56a6cc8694.js +0 -1
  749. package/.next/standalone/.next/static/chunks/app/api/keys/route-83e8db56a6cc8694.js +0 -1
  750. package/.next/standalone/.next/static/chunks/app/api/locale/route-83e8db56a6cc8694.js +0 -1
  751. package/.next/standalone/.next/static/chunks/app/api/models/alias/route-83e8db56a6cc8694.js +0 -1
  752. package/.next/standalone/.next/static/chunks/app/api/models/availability/route-83e8db56a6cc8694.js +0 -1
  753. package/.next/standalone/.next/static/chunks/app/api/models/route-83e8db56a6cc8694.js +0 -1
  754. package/.next/standalone/.next/static/chunks/app/api/models/test/route-83e8db56a6cc8694.js +0 -1
  755. package/.next/standalone/.next/static/chunks/app/api/oauth/[provider]/[action]/route-83e8db56a6cc8694.js +0 -1
  756. package/.next/standalone/.next/static/chunks/app/api/oauth/cursor/auto-import/route-83e8db56a6cc8694.js +0 -1
  757. package/.next/standalone/.next/static/chunks/app/api/oauth/cursor/import/route-83e8db56a6cc8694.js +0 -1
  758. package/.next/standalone/.next/static/chunks/app/api/oauth/gitlab/pat/route-83e8db56a6cc8694.js +0 -1
  759. package/.next/standalone/.next/static/chunks/app/api/oauth/iflow/cookie/route-83e8db56a6cc8694.js +0 -1
  760. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/auto-import/route-83e8db56a6cc8694.js +0 -1
  761. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/import/route-83e8db56a6cc8694.js +0 -1
  762. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-83e8db56a6cc8694.js +0 -1
  763. package/.next/standalone/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-83e8db56a6cc8694.js +0 -1
  764. package/.next/standalone/.next/static/chunks/app/api/pricing/route-83e8db56a6cc8694.js +0 -1
  765. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/[id]/route-83e8db56a6cc8694.js +0 -1
  766. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/route-83e8db56a6cc8694.js +0 -1
  767. package/.next/standalone/.next/static/chunks/app/api/provider-nodes/validate/route-83e8db56a6cc8694.js +0 -1
  768. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/models/route-83e8db56a6cc8694.js +0 -1
  769. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/route-83e8db56a6cc8694.js +0 -1
  770. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/test/route-83e8db56a6cc8694.js +0 -1
  771. package/.next/standalone/.next/static/chunks/app/api/providers/[id]/test-models/route-83e8db56a6cc8694.js +0 -1
  772. package/.next/standalone/.next/static/chunks/app/api/providers/client/route-83e8db56a6cc8694.js +0 -1
  773. package/.next/standalone/.next/static/chunks/app/api/providers/kilo/free-models/route-83e8db56a6cc8694.js +0 -1
  774. package/.next/standalone/.next/static/chunks/app/api/providers/route-83e8db56a6cc8694.js +0 -1
  775. package/.next/standalone/.next/static/chunks/app/api/providers/test-batch/route-83e8db56a6cc8694.js +0 -1
  776. package/.next/standalone/.next/static/chunks/app/api/providers/validate/route-83e8db56a6cc8694.js +0 -1
  777. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/[id]/route-83e8db56a6cc8694.js +0 -1
  778. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/[id]/test/route-83e8db56a6cc8694.js +0 -1
  779. package/.next/standalone/.next/static/chunks/app/api/proxy-pools/route-83e8db56a6cc8694.js +0 -1
  780. package/.next/standalone/.next/static/chunks/app/api/settings/database/route-83e8db56a6cc8694.js +0 -1
  781. package/.next/standalone/.next/static/chunks/app/api/settings/proxy-test/route-83e8db56a6cc8694.js +0 -1
  782. package/.next/standalone/.next/static/chunks/app/api/settings/require-login/route-83e8db56a6cc8694.js +0 -1
  783. package/.next/standalone/.next/static/chunks/app/api/settings/route-83e8db56a6cc8694.js +0 -1
  784. package/.next/standalone/.next/static/chunks/app/api/shutdown/route-83e8db56a6cc8694.js +0 -1
  785. package/.next/standalone/.next/static/chunks/app/api/tags/route-83e8db56a6cc8694.js +0 -1
  786. package/.next/standalone/.next/static/chunks/app/api/translator/console-logs/route-83e8db56a6cc8694.js +0 -1
  787. package/.next/standalone/.next/static/chunks/app/api/translator/console-logs/stream/route-83e8db56a6cc8694.js +0 -1
  788. package/.next/standalone/.next/static/chunks/app/api/translator/load/route-83e8db56a6cc8694.js +0 -1
  789. package/.next/standalone/.next/static/chunks/app/api/translator/save/route-83e8db56a6cc8694.js +0 -1
  790. package/.next/standalone/.next/static/chunks/app/api/translator/send/route-83e8db56a6cc8694.js +0 -1
  791. package/.next/standalone/.next/static/chunks/app/api/translator/translate/route-83e8db56a6cc8694.js +0 -1
  792. package/.next/standalone/.next/static/chunks/app/api/tunnel/disable/route-83e8db56a6cc8694.js +0 -1
  793. package/.next/standalone/.next/static/chunks/app/api/tunnel/enable/route-83e8db56a6cc8694.js +0 -1
  794. package/.next/standalone/.next/static/chunks/app/api/tunnel/status/route-83e8db56a6cc8694.js +0 -1
  795. package/.next/standalone/.next/static/chunks/app/api/usage/[connectionId]/route-83e8db56a6cc8694.js +0 -1
  796. package/.next/standalone/.next/static/chunks/app/api/usage/chart/route-83e8db56a6cc8694.js +0 -1
  797. package/.next/standalone/.next/static/chunks/app/api/usage/history/route-83e8db56a6cc8694.js +0 -1
  798. package/.next/standalone/.next/static/chunks/app/api/usage/logs/route-83e8db56a6cc8694.js +0 -1
  799. package/.next/standalone/.next/static/chunks/app/api/usage/providers/route-83e8db56a6cc8694.js +0 -1
  800. package/.next/standalone/.next/static/chunks/app/api/usage/request-details/route-83e8db56a6cc8694.js +0 -1
  801. package/.next/standalone/.next/static/chunks/app/api/usage/request-logs/route-83e8db56a6cc8694.js +0 -1
  802. package/.next/standalone/.next/static/chunks/app/api/usage/stats/route-83e8db56a6cc8694.js +0 -1
  803. package/.next/standalone/.next/static/chunks/app/api/usage/stream/route-83e8db56a6cc8694.js +0 -1
  804. package/.next/standalone/.next/static/chunks/app/api/v1/api/chat/route-83e8db56a6cc8694.js +0 -1
  805. package/.next/standalone/.next/static/chunks/app/api/v1/chat/completions/route-83e8db56a6cc8694.js +0 -1
  806. package/.next/standalone/.next/static/chunks/app/api/v1/embeddings/route-83e8db56a6cc8694.js +0 -1
  807. package/.next/standalone/.next/static/chunks/app/api/v1/messages/count_tokens/route-83e8db56a6cc8694.js +0 -1
  808. package/.next/standalone/.next/static/chunks/app/api/v1/messages/route-83e8db56a6cc8694.js +0 -1
  809. package/.next/standalone/.next/static/chunks/app/api/v1/models/route-83e8db56a6cc8694.js +0 -1
  810. package/.next/standalone/.next/static/chunks/app/api/v1/responses/route-83e8db56a6cc8694.js +0 -1
  811. package/.next/standalone/.next/static/chunks/app/api/v1/route-83e8db56a6cc8694.js +0 -1
  812. package/.next/standalone/.next/static/chunks/app/api/v1beta/models/[...path]/route-83e8db56a6cc8694.js +0 -1
  813. package/.next/standalone/.next/static/chunks/app/api/v1beta/models/route-83e8db56a6cc8694.js +0 -1
  814. package/.next/standalone/.next/static/chunks/app/api/version/route-83e8db56a6cc8694.js +0 -1
  815. package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-83e8db56a6cc8694.js +0 -1
  816. package/.next/standalone/.next/static/chunks/app/page-83e8db56a6cc8694.js +0 -1
  817. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-83e8db56a6cc8694.js +0 -1
  818. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-83e8db56a6cc8694.js +0 -1
  819. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-83e8db56a6cc8694.js +0 -1
  820. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-83e8db56a6cc8694.js +0 -1
  821. package/.next/standalone/.next/static/css/906c7e86967ac5b9.css +0 -1
  822. package/.next/static/Z3suC1MLsVxstppcjgL5J/_buildManifest.js +0 -1
  823. package/.next/static/chunks/1321-835e375749d721a9.js +0 -1
  824. package/.next/static/chunks/2589-339af3822207611a.js +0 -3
  825. package/.next/static/chunks/5507-fb71a0c2e754e069.js +0 -15
  826. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-c0a16328f9656c4a.js +0 -1
  827. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page-54e94d84c6afd6e8.js +0 -1
  828. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/page-a0923a6fbd936614.js +0 -1
  829. package/.next/static/chunks/app/(dashboard)/dashboard/mitm/page-1c784308396f8f41.js +0 -1
  830. package/.next/static/chunks/app/_global-error/page-83e8db56a6cc8694.js +0 -1
  831. package/.next/static/chunks/app/api/9remote/install/route-83e8db56a6cc8694.js +0 -1
  832. package/.next/static/chunks/app/api/9remote/start/route-83e8db56a6cc8694.js +0 -1
  833. package/.next/static/chunks/app/api/9remote/status/route-83e8db56a6cc8694.js +0 -1
  834. package/.next/static/chunks/app/api/antigravity-ide/route-83e8db56a6cc8694.js +0 -1
  835. package/.next/static/chunks/app/api/antigravity-tools/import/route-83e8db56a6cc8694.js +0 -1
  836. package/.next/static/chunks/app/api/antigravity-tools/import-refresh-tokens/route-83e8db56a6cc8694.js +0 -1
  837. package/.next/static/chunks/app/api/auth/login/route-83e8db56a6cc8694.js +0 -1
  838. package/.next/static/chunks/app/api/auth/logout/route-83e8db56a6cc8694.js +0 -1
  839. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/alias/route-83e8db56a6cc8694.js +0 -1
  840. package/.next/static/chunks/app/api/cli-tools/antigravity-mitm/route-83e8db56a6cc8694.js +0 -1
  841. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-83e8db56a6cc8694.js +0 -1
  842. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-83e8db56a6cc8694.js +0 -1
  843. package/.next/static/chunks/app/api/cli-tools/copilot-settings/route-83e8db56a6cc8694.js +0 -1
  844. package/.next/static/chunks/app/api/cli-tools/droid-settings/route-83e8db56a6cc8694.js +0 -1
  845. package/.next/static/chunks/app/api/cli-tools/openclaw-settings/route-83e8db56a6cc8694.js +0 -1
  846. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-83e8db56a6cc8694.js +0 -1
  847. package/.next/static/chunks/app/api/cloud/auth/route-83e8db56a6cc8694.js +0 -1
  848. package/.next/static/chunks/app/api/cloud/credentials/update/route-83e8db56a6cc8694.js +0 -1
  849. package/.next/static/chunks/app/api/cloud/model/resolve/route-83e8db56a6cc8694.js +0 -1
  850. package/.next/static/chunks/app/api/cloud/models/alias/route-83e8db56a6cc8694.js +0 -1
  851. package/.next/static/chunks/app/api/combos/[id]/route-83e8db56a6cc8694.js +0 -1
  852. package/.next/static/chunks/app/api/combos/route-83e8db56a6cc8694.js +0 -1
  853. package/.next/static/chunks/app/api/init/route-83e8db56a6cc8694.js +0 -1
  854. package/.next/static/chunks/app/api/internal/request-detail/route-83e8db56a6cc8694.js +0 -1
  855. package/.next/static/chunks/app/api/internal/usage/route-83e8db56a6cc8694.js +0 -1
  856. package/.next/static/chunks/app/api/keys/[id]/route-83e8db56a6cc8694.js +0 -1
  857. package/.next/static/chunks/app/api/keys/route-83e8db56a6cc8694.js +0 -1
  858. package/.next/static/chunks/app/api/locale/route-83e8db56a6cc8694.js +0 -1
  859. package/.next/static/chunks/app/api/models/alias/route-83e8db56a6cc8694.js +0 -1
  860. package/.next/static/chunks/app/api/models/availability/route-83e8db56a6cc8694.js +0 -1
  861. package/.next/static/chunks/app/api/models/route-83e8db56a6cc8694.js +0 -1
  862. package/.next/static/chunks/app/api/models/test/route-83e8db56a6cc8694.js +0 -1
  863. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-83e8db56a6cc8694.js +0 -1
  864. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-83e8db56a6cc8694.js +0 -1
  865. package/.next/static/chunks/app/api/oauth/cursor/import/route-83e8db56a6cc8694.js +0 -1
  866. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-83e8db56a6cc8694.js +0 -1
  867. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-83e8db56a6cc8694.js +0 -1
  868. package/.next/static/chunks/app/api/oauth/kiro/auto-import/route-83e8db56a6cc8694.js +0 -1
  869. package/.next/static/chunks/app/api/oauth/kiro/import/route-83e8db56a6cc8694.js +0 -1
  870. package/.next/static/chunks/app/api/oauth/kiro/social-authorize/route-83e8db56a6cc8694.js +0 -1
  871. package/.next/static/chunks/app/api/oauth/kiro/social-exchange/route-83e8db56a6cc8694.js +0 -1
  872. package/.next/static/chunks/app/api/pricing/route-83e8db56a6cc8694.js +0 -1
  873. package/.next/static/chunks/app/api/provider-nodes/[id]/route-83e8db56a6cc8694.js +0 -1
  874. package/.next/static/chunks/app/api/provider-nodes/route-83e8db56a6cc8694.js +0 -1
  875. package/.next/static/chunks/app/api/provider-nodes/validate/route-83e8db56a6cc8694.js +0 -1
  876. package/.next/static/chunks/app/api/providers/[id]/models/route-83e8db56a6cc8694.js +0 -1
  877. package/.next/static/chunks/app/api/providers/[id]/route-83e8db56a6cc8694.js +0 -1
  878. package/.next/static/chunks/app/api/providers/[id]/test/route-83e8db56a6cc8694.js +0 -1
  879. package/.next/static/chunks/app/api/providers/[id]/test-models/route-83e8db56a6cc8694.js +0 -1
  880. package/.next/static/chunks/app/api/providers/client/route-83e8db56a6cc8694.js +0 -1
  881. package/.next/static/chunks/app/api/providers/kilo/free-models/route-83e8db56a6cc8694.js +0 -1
  882. package/.next/static/chunks/app/api/providers/route-83e8db56a6cc8694.js +0 -1
  883. package/.next/static/chunks/app/api/providers/test-batch/route-83e8db56a6cc8694.js +0 -1
  884. package/.next/static/chunks/app/api/providers/validate/route-83e8db56a6cc8694.js +0 -1
  885. package/.next/static/chunks/app/api/proxy-pools/[id]/route-83e8db56a6cc8694.js +0 -1
  886. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-83e8db56a6cc8694.js +0 -1
  887. package/.next/static/chunks/app/api/proxy-pools/route-83e8db56a6cc8694.js +0 -1
  888. package/.next/static/chunks/app/api/settings/database/route-83e8db56a6cc8694.js +0 -1
  889. package/.next/static/chunks/app/api/settings/proxy-test/route-83e8db56a6cc8694.js +0 -1
  890. package/.next/static/chunks/app/api/settings/require-login/route-83e8db56a6cc8694.js +0 -1
  891. package/.next/static/chunks/app/api/settings/route-83e8db56a6cc8694.js +0 -1
  892. package/.next/static/chunks/app/api/shutdown/route-83e8db56a6cc8694.js +0 -1
  893. package/.next/static/chunks/app/api/tags/route-83e8db56a6cc8694.js +0 -1
  894. package/.next/static/chunks/app/api/translator/console-logs/route-83e8db56a6cc8694.js +0 -1
  895. package/.next/static/chunks/app/api/translator/console-logs/stream/route-83e8db56a6cc8694.js +0 -1
  896. package/.next/static/chunks/app/api/translator/load/route-83e8db56a6cc8694.js +0 -1
  897. package/.next/static/chunks/app/api/translator/save/route-83e8db56a6cc8694.js +0 -1
  898. package/.next/static/chunks/app/api/translator/send/route-83e8db56a6cc8694.js +0 -1
  899. package/.next/static/chunks/app/api/translator/translate/route-83e8db56a6cc8694.js +0 -1
  900. package/.next/static/chunks/app/api/tunnel/disable/route-83e8db56a6cc8694.js +0 -1
  901. package/.next/static/chunks/app/api/tunnel/enable/route-83e8db56a6cc8694.js +0 -1
  902. package/.next/static/chunks/app/api/tunnel/status/route-83e8db56a6cc8694.js +0 -1
  903. package/.next/static/chunks/app/api/usage/[connectionId]/route-83e8db56a6cc8694.js +0 -1
  904. package/.next/static/chunks/app/api/usage/chart/route-83e8db56a6cc8694.js +0 -1
  905. package/.next/static/chunks/app/api/usage/history/route-83e8db56a6cc8694.js +0 -1
  906. package/.next/static/chunks/app/api/usage/logs/route-83e8db56a6cc8694.js +0 -1
  907. package/.next/static/chunks/app/api/usage/providers/route-83e8db56a6cc8694.js +0 -1
  908. package/.next/static/chunks/app/api/usage/request-details/route-83e8db56a6cc8694.js +0 -1
  909. package/.next/static/chunks/app/api/usage/request-logs/route-83e8db56a6cc8694.js +0 -1
  910. package/.next/static/chunks/app/api/usage/stats/route-83e8db56a6cc8694.js +0 -1
  911. package/.next/static/chunks/app/api/usage/stream/route-83e8db56a6cc8694.js +0 -1
  912. package/.next/static/chunks/app/api/v1/api/chat/route-83e8db56a6cc8694.js +0 -1
  913. package/.next/static/chunks/app/api/v1/chat/completions/route-83e8db56a6cc8694.js +0 -1
  914. package/.next/static/chunks/app/api/v1/embeddings/route-83e8db56a6cc8694.js +0 -1
  915. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-83e8db56a6cc8694.js +0 -1
  916. package/.next/static/chunks/app/api/v1/messages/route-83e8db56a6cc8694.js +0 -1
  917. package/.next/static/chunks/app/api/v1/models/route-83e8db56a6cc8694.js +0 -1
  918. package/.next/static/chunks/app/api/v1/responses/route-83e8db56a6cc8694.js +0 -1
  919. package/.next/static/chunks/app/api/v1/route-83e8db56a6cc8694.js +0 -1
  920. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-83e8db56a6cc8694.js +0 -1
  921. package/.next/static/chunks/app/api/v1beta/models/route-83e8db56a6cc8694.js +0 -1
  922. package/.next/static/chunks/app/api/version/route-83e8db56a6cc8694.js +0 -1
  923. package/.next/static/chunks/app/manifest.webmanifest/route-83e8db56a6cc8694.js +0 -1
  924. package/.next/static/chunks/app/page-83e8db56a6cc8694.js +0 -1
  925. package/.next/static/chunks/next/dist/client/components/builtin/app-error-83e8db56a6cc8694.js +0 -1
  926. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-83e8db56a6cc8694.js +0 -1
  927. package/.next/static/chunks/next/dist/client/components/builtin/not-found-83e8db56a6cc8694.js +0 -1
  928. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-83e8db56a6cc8694.js +0 -1
  929. package/.next/static/css/906c7e86967ac5b9.css +0 -1
  930. /package/.next/standalone/.next/static/{Z3suC1MLsVxstppcjgL5J → u1_tnfo29B604S55DfKtf}/_ssgManifest.js +0 -0
  931. /package/.next/static/{Z3suC1MLsVxstppcjgL5J → u1_tnfo29B604S55DfKtf}/_ssgManifest.js +0 -0
@@ -0,0 +1,18 @@
1
+ "use strict";exports.id=8226,exports.ids=[8226],exports.modules={4088:(a,b,c)=>{c.d(b,{$4:()=>g,W_:()=>h,mO:()=>e,sQ:()=>f});var d=c(42889);function e(a){if(!a)return"-";try{let b="string"==typeof a?new Date(a):a,c=new Date,d=b-c;if(d<=0)return"-";let e=Math.ceil(d/6e4);if(e<60)return`${e}m`;let f=Math.floor(e/60),g=e%60;if(f<24)return`${f}h ${g}m`;let h=Math.floor(f/24);return`${h}d ${f%24}h ${g}m`}catch(a){return"-"}}function f(a){if(!a)return null;try{let b="string"==typeof a?new Date(a):a,c=new Date,d=new Date(c.getFullYear(),c.getMonth(),c.getDate()),e=new Date(d);e.setDate(e.getDate()+1);let f=new Date(e);f.setDate(f.getDate()+1);let g="";g=b>=d&&b<e?"Today":b>=e&&b<f?"Tomorrow":b.toLocaleDateString("en-US",{month:"short",day:"numeric"});let h=b.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0});return`${g}, ${h}`}catch{return null}}function g(a,b){return b&&0!==b?!a||a<0?100:a>=b?0:Math.round((b-a)/b*100):0}function h(a,b){if(!b||"object"!=typeof b)return[];let c=[];try{switch(a.toLowerCase()){case"github":default:b.quotas&&Object.entries(b.quotas).forEach(([a,b])=>{c.push({name:a,used:b.used||0,total:b.total||0,resetAt:b.resetAt||null})});break;case"antigravity":b.quotas&&Object.entries(b.quotas).forEach(([a,b])=>{c.push({name:b.displayName||a,modelKey:a,used:b.used||0,total:b.total||0,resetAt:b.resetAt||null,remainingPercentage:b.remainingPercentage})});break;case"codex":b.quotas&&Object.entries(b.quotas).forEach(([a,b])=>{c.push({name:a,used:b.used||0,total:b.total||0,resetAt:b.resetAt||null})});break;case"kiro":b.quotas&&Object.entries(b.quotas).forEach(([a,b])=>{c.push({name:a,used:b.used||0,total:b.total||0,resetAt:b.resetAt||null})});break;case"claude":b.message?c.push({name:"error",used:0,total:0,resetAt:null,message:b.message}):b.quotas&&Object.entries(b.quotas).forEach(([a,b])=>{c.push({name:a,used:b.used||0,total:b.total||0,resetAt:b.resetAt||null})})}}catch(b){return console.error(`Error parsing quota data for ${a}:`,b),[]}let e=(0,d.KC)(a);if(e.length>0){let a=new Map(e.map((a,b)=>[a.id,b]));c.sort((b,c)=>{let d=b.modelKey||b.name,e=c.modelKey||c.name;return(a.get(d)??999)-(a.get(e)??999)})}return c}},22699:(a,b,c)=>{c.d(b,{Tk:()=>i,Ah:()=>j,a7:()=>n,ZM:()=>l,gY:()=>z,tA:()=>q,kn:()=>r,yZ:()=>m,qO:()=>o,xm:()=>y});var d=c(48249),e=c(67484),f=c(50412),g=c(81220);let h="https://9router.com";function i({tool:a,isExpanded:b,onToggle:c,activeProviders:j,modelMappings:k,onModelMappingChange:l,baseUrl:m,hasActiveProviders:n,apiKeys:o,cloudEnabled:p,initialStatus:q}){let r,s,t,[u,v]=(0,e.useState)(q||null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(null),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)(null),[K,L]=(0,e.useState)(""),[M,N]=(0,e.useState)({}),[O,P]=(0,e.useState)(!1),[Q,R]=(0,e.useState)(""),[S,T]=(0,e.useState)(!1);(0,e.useRef)(!1);let U=(()=>{if(!u?.installed)return null;let a=u.settings?.env?.ANTHROPIC_BASE_URL;if(!a)return"not_configured";let b=a.includes("localhost")||a.includes("127.0.0.1"),c=p&&h&&a.startsWith(h),d=m&&a.startsWith(m);return b||c||d?"configured":"other"})(),V=async a=>{let b=a.target.checked;T(b),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:b})}).catch(()=>{})},W=()=>{let a=Q||m;return a.endsWith("/v1")?a:`${a}/v1`},X=async()=>{z(!0),D(null);try{let b={ANTHROPIC_BASE_URL:W()},c=K?.trim()||(o?.length>0?o[0].key:null)||(p?null:"sk_9router");c&&(b.ANTHROPIC_AUTH_TOKEN=c),a.defaultModels.forEach(a=>{let c=k[a.alias];c&&a.envKey&&(b[a.envKey]=c)});let d=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:b})}),e=await d.json();d.ok?(D({type:"success",text:"Settings applied successfully!"}),v(a=>({...a,hasBackup:!0,settings:{...a?.settings,env:b}}))):D({type:"error",text:e.error||"Failed to apply settings"})}catch(a){D({type:"error",text:a.message})}finally{z(!1)}},Y=async()=>{B(!0),D(null);try{let b=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),c=await b.json();b.ok?(D({type:"success",text:"Settings reset successfully!"}),a.defaultModels.forEach(a=>l(a.alias,a.defaultValue||"")),L("")):D({type:"error",text:c.error||"Failed to reset settings"})}catch(a){D({type:"error",text:a.message})}finally{B(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/claude.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===U&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===U&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===U&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[w&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Claude CLI..."})]}),!w&&u&&!u.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Claude CLI not installed"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Claude CLI to use this feature."})]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:()=>F(!E),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:E?"expand_less":"help"}),E?"Hide":"How to Install"]})]}),E&&(0,d.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @anthropic-ai/claude-code"})]}),(0,d.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!w&&u?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[u?.settings?.env?.ANTHROPIC_BASE_URL&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:u.settings.env.ANTHROPIC_BASE_URL})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:(r=Q||m).endsWith("/v1")?r:`${r}/v1`,onChange:a=>R(a.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),Q&&Q!==m&&(0,d.jsx)("button",{onClick:()=>R(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),o.length>0?(0,d.jsx)("select",{value:K,onChange:a=>L(a.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:o.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:p?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:a.name}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:k[a.alias]||"",onChange:b=>l(a.alias,b.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>{J(a.alias),H(!0)},disabled:!n,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${n?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),k[a.alias]&&(0,d.jsx)("button",{onClick:()=>l(a.alias,""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},a.alias)),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Filter naming"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)("input",{type:"checkbox",checked:S,onChange:V,className:"w-3.5 h-3.5 accent-primary cursor-pointer"}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"Filter naming requests"})]}),(0,d.jsx)(f.m_,{text:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens.",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] cursor-help",children:"info"})})]})]}),C&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===C.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===C.type?"check_circle":"error"}),(0,d.jsx)("span",{children:C.text})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:X,disabled:!n,loading:y,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:Y,disabled:!u?.has9Router,loading:A,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>P(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:G,onClose:()=>H(!1),onSelect:a=>{I&&l(I,a.value)},selectedModel:I?k[I]:null,activeProviders:j,modelAliases:M,title:`Select model for ${I}`}),(0,d.jsx)(f.uR,{isOpen:O,onClose:()=>P(!1),title:"Claude CLI - Manual Configuration",configs:(s=K&&K.trim()?K:p?"<API_KEY_FROM_DASHBOARD>":"sk_9router",t={ANTHROPIC_BASE_URL:W(),ANTHROPIC_AUTH_TOKEN:s},a.defaultModels.forEach(a=>{let b=k[a.alias];b&&a.envKey&&(t[a.envKey]=b)}),[{filename:"~/.claude/settings.json",content:JSON.stringify({env:t},null,2)}])})]})}function j({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:k,cloudEnabled:l,initialStatus:m}){let n,o,p,q,[r,s]=(0,e.useState)(m||null),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(""),[F,G]=(0,e.useState)(""),[H,I]=(0,e.useState)(""),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)({}),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(""),T=r?.installed?r.config?r.config.includes(h)||r.config.includes("localhost")||r.config.includes("127.0.0.1")?"configured":"other":"not_configured":null,U=()=>{let a=R||`${h}/v1`;return a.endsWith("/v1")?a:`${a}/v1`},V=async()=>{u(!0);try{let a=await fetch("/api/cli-tools/codex-settings"),b=await a.json();s(b)}catch(a){s({installed:!1,error:a.message})}finally{u(!1)}},W=async()=>{w(!0),A(null);try{let a=D&&D.trim()||l?D:"sk_9router",b=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:U(),apiKey:a,model:F,subagentModel:H||F})}),c=await b.json();b.ok?(A({type:"success",text:"Settings applied successfully!"}),V()):A({type:"error",text:c.error||"Failed to apply settings"})}catch(a){A({type:"error",text:a.message})}finally{w(!1)}},X=async()=>{y(!0),A(null);try{let a=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),b=await a.json();a.ok?(A({type:"success",text:"Settings reset successfully!"}),G(""),I(""),V()):A({type:"error",text:b.error||"Failed to reset settings"})}catch(a){A({type:"error",text:a.message})}finally{y(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/codex.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===T&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===T&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===T&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[t&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Codex CLI..."})]}),!t&&r&&!r.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Codex CLI not installed"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Codex CLI to use auto-apply feature."})]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:()=>C(!B),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:B?"expand_less":"help"}),B?"Hide":"How to Install"]})]}),B&&(0,d.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @openai/codex"})]}),(0,d.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,d.jsx)("div",{className:"pt-2 border-t border-border",children:(0,d.jsxs)("p",{className:"text-text-muted text-xs",children:["Codex uses ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/auth.json"})," with ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"OPENAI_API_KEY"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!t&&r?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[r?.config&&((o=(n=r.config.match(/base_url\s*=\s*"([^"]+)"/))?n[1]:null)?(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:o})]}):null),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:R||`${h}/v1`,onChange:a=>S(a.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),R&&R!==`${h}/v1`&&(0,d.jsx)("button",{onClick:()=>S(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),i.length>0?(0,d.jsx)("select",{value:D,onChange:a=>E(a.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:l?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:F,onChange:a=>G(a.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>K(!0),disabled:!k?.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${k?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),F&&(0,d.jsx)("button",{onClick:()=>G(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Subagent Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:H,onChange:a=>I(a.target.value),placeholder:F||"provider/model-id (defaults to main model)",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>M(!0),disabled:!k?.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${k?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),H&&(0,d.jsx)("button",{onClick:()=>I(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear (will use main model)",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),z&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===z.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===z.type?"check_circle":"error"}),(0,d.jsx)("span",{children:z.text})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:W,disabled:!D||!F,loading:v,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:X,disabled:!r.has9Router,loading:x,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>Q(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:J,onClose:()=>K(!1),onSelect:a=>{G(a.value),H||I(a.value),K(!1)},selectedModel:F,activeProviders:k,modelAliases:N,title:"Select Model for Codex"}),(0,d.jsx)(f.rq,{isOpen:L,onClose:()=>M(!1),onSelect:a=>{I(a.value),M(!1)},selectedModel:H,activeProviders:k,modelAliases:N,title:"Select Subagent Model for Codex"}),(0,d.jsx)(f.uR,{isOpen:P,onClose:()=>Q(!1),title:"Codex CLI - Manual Configuration",configs:(p=D&&D.trim()?D:l?"<API_KEY_FROM_DASHBOARD>":"sk_9router",q=H||F,[{filename:"~/.codex/config.toml",content:`# 9Router Configuration for Codex CLI
2
+ model = "${F}"
3
+ model_provider = "9router"
4
+
5
+ [model_providers.9router]
6
+ name = "9Router"
7
+ base_url = "${U()}"
8
+ wire_api = "responses"
9
+
10
+ [agents.subagent]
11
+ model = "${q}"
12
+ `},{filename:"~/.codex/auth.json",content:JSON.stringify({OPENAI_API_KEY:p},null,2)}])})]})}let k="https://9router.com";function l({tool:a,isExpanded:b,onToggle:c,baseUrl:h,hasActiveProviders:i,apiKeys:j,activeProviders:m,cloudEnabled:n,initialStatus:o}){let p,q,r,s,[t,u]=(0,e.useState)(o||null),[v,w]=(0,e.useState)(!1),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(null),[D,E]=(0,e.useState)(""),[F,G]=(0,e.useState)(""),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)({}),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)("");(0,e.useRef)(!1);let P=(()=>{if(!t?.installed)return null;let a=t.settings?.customModels?.find(a=>"custom:9Router-0"===a.id);if(!a)return"not_configured";let b=a.baseUrl?.includes("localhost")||a.baseUrl?.includes("127.0.0.1"),c=n&&k&&a.baseUrl?.startsWith(k),d=h&&a.baseUrl?.startsWith(h);return b||c||d?"configured":"other"})(),Q=async()=>{w(!0);try{let a=await fetch("/api/cli-tools/droid-settings"),b=await a.json();u(b)}catch(a){u({installed:!1,error:a.message})}finally{w(!1)}},R=()=>{let a=N||h;return a.endsWith("/v1")?a:`${a}/v1`},S=async()=>{y(!0),C(null);try{let a=D?.trim()||(j?.length>0?j[0].key:null)||(n?null:"sk_9router"),b=await fetch("/api/cli-tools/droid-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:R(),apiKey:a,model:F})}),c=await b.json();b.ok?(C({type:"success",text:"Settings applied successfully!"}),Q()):C({type:"error",text:c.error||"Failed to apply settings"})}catch(a){C({type:"error",text:a.message})}finally{y(!1)}},T=async()=>{A(!0),C(null);try{let a=await fetch("/api/cli-tools/droid-settings",{method:"DELETE"}),b=await a.json();a.ok?(C({type:"success",text:"Settings reset successfully!"}),G(""),E(""),Q()):C({type:"error",text:b.error||"Failed to reset settings"})}catch(a){C({type:"error",text:a.message})}finally{A(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/droid.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===P&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===P&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===P&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[v&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Factory Droid CLI..."})]}),!v&&t&&!t.installed&&(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Factory Droid CLI not installed"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Factory Droid CLI to use this feature."})]})]}),!v&&t?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[t?.settings?.customModels?.find(a=>"custom:9Router-0"===a.id)?.baseUrl&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:t.settings.customModels.find(a=>"custom:9Router-0"===a.id).baseUrl})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:(p=N||h).endsWith("/v1")?p:`${p}/v1`,onChange:a=>O(a.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),N&&N!==h&&(0,d.jsx)("button",{onClick:()=>O(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),j.length>0?(0,d.jsx)("select",{value:D,onChange:a=>E(a.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:j.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:n?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:F,onChange:a=>G(a.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>I(!0),disabled:!i,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${i?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),F&&(0,d.jsx)("button",{onClick:()=>G(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),B&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===B.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===B.type?"check_circle":"error"}),(0,d.jsx)("span",{children:B.text})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:S,disabled:!F,loading:x,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:T,disabled:!t?.has9Router,loading:z,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>M(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:H,onClose:()=>I(!1),onSelect:a=>{G(a.value),I(!1)},selectedModel:F,activeProviders:m,modelAliases:J,title:"Select Model for Factory Droid"}),(0,d.jsx)(f.uR,{isOpen:L,onClose:()=>M(!1),title:"Factory Droid - Manual Configuration",configs:(q=D&&D.trim()?D:n?"<API_KEY_FROM_DASHBOARD>":"sk_9router",r={customModels:[{model:F||"provider/model-id",id:"custom:9Router-0",index:0,baseUrl:R(),apiKey:q,displayName:F||"provider/model-id",maxOutputTokens:131072,noImageSupport:!1,provider:"openai"}]},s="u">typeof navigator&&navigator.platform,[{filename:s?.toLowerCase().includes("win")?"%USERPROFILE%\\.factory\\settings.json":"~/.factory/settings.json",content:JSON.stringify(r,null,2)}])})]})}function m({tool:a,isExpanded:b,onToggle:c,baseUrl:h,hasActiveProviders:i,apiKeys:j,activeProviders:k,cloudEnabled:l,initialStatus:n}){let o,p,[q,r]=(0,e.useState)(n||null),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(null),[A,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(""),[E,F]=(0,e.useState)({}),[G,H]=(0,e.useState)(null),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)({}),[M,N]=(0,e.useState)(!1),[O,P]=(0,e.useState)("");(0,e.useRef)(!1);let Q=(()=>{if(!q?.installed)return null;let a=q.settings?.models?.providers?.["9router"];if(!a)return"not_configured";let b=a.baseUrl?.includes("localhost")||a.baseUrl?.includes("127.0.0.1")||a.baseUrl?.includes("0.0.0.0"),c=h&&a.baseUrl?.startsWith(h);return b||c?"configured":"other"})(),R=async()=>{t(!0);try{let a=await fetch("/api/cli-tools/openclaw-settings"),b=await a.json();r(b)}catch(a){r({installed:!1,error:a.message})}finally{t(!1)}},S=()=>{let a=O||"http://127.0.0.1:20128";return a.endsWith("/v1")?a:`${a}/v1`},T=async()=>{v(!0),z(null);try{let a=A?.trim()||(j?.length>0?j[0].key:null)||(l?null:"sk_9router"),b=await fetch("/api/cli-tools/openclaw-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:S(),apiKey:a,model:C,agentModels:E})}),c=await b.json();b.ok?(z({type:"success",text:"Settings applied successfully!"}),R()):z({type:"error",text:c.error||"Failed to apply settings"})}catch(a){z({type:"error",text:a.message})}finally{v(!1)}},U=async()=>{x(!0),z(null);try{let a=await fetch("/api/cli-tools/openclaw-settings",{method:"DELETE"}),b=await a.json();a.ok?(z({type:"success",text:"Settings reset successfully!"}),D(""),B(""),R()):z({type:"error",text:b.error||"Failed to reset settings"})}catch(a){z({type:"error",text:a.message})}finally{x(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/openclaw.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===Q&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===Q&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===Q&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[s&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking Open Claw CLI..."})]}),!s&&q&&!q.installed&&(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"Open Claw CLI not installed"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Please install Open Claw CLI to use this feature."})]})]}),!s&&q?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[q?.settings?.models?.providers?.["9router"]?.baseUrl&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:q.settings.models.providers["9router"].baseUrl})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:(o=O||"http://127.0.0.1:20128").endsWith("/v1")?o:`${o}/v1`,onChange:a=>P(a.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),O&&O!==h&&(0,d.jsx)("button",{onClick:()=>P(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),j.length>0?(0,d.jsx)("select",{value:A,onChange:a=>B(a.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:j.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:l?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Default Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:C,onChange:a=>D(a.target.value),placeholder:"provider/model-id",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>{H(null),J(!0)},disabled:!i,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${i?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"}),C&&(0,d.jsx)("button",{onClick:()=>D(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]}),(q.agents||[]).filter(a=>a.agentDir).map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2 pl-4",children:[(0,d.jsxs)("span",{className:"w-32 shrink-0 text-xs text-primary text-right truncate",title:a.name||a.id,children:["Agent ",a.name||a.id]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:E[a.id]||"",onChange:b=>F(c=>({...c,[a.id]:b.target.value})),placeholder:`default (${C||"provider/model-id"})`,className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>{H(a.id),J(!0)},disabled:!i,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${i?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"}),E[a.id]&&(0,d.jsx)("button",{onClick:()=>F(b=>({...b,[a.id]:""})),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},a.id))]}),y&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===y.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===y.type?"check_circle":"error"}),(0,d.jsx)("span",{children:y.text})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:T,disabled:!C,loading:u,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:U,disabled:!q?.has9Router,loading:w,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>N(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:I,onClose:()=>J(!1),onSelect:a=>{G?(F(b=>({...b,[G]:a.value})),H(null)):D(a.value),J(!1)},selectedModel:C,activeProviders:k,modelAliases:K,title:"Select Model for Open Claw"}),(0,d.jsx)(f.uR,{isOpen:M,onClose:()=>N(!1),title:"Open Claw - Manual Configuration",configs:(p=A&&A.trim()?A:l?"<API_KEY_FROM_DASHBOARD>":"sk_9router",[{filename:"~/.openclaw/openclaw.json",content:JSON.stringify({agents:{defaults:{model:{primary:`9router/${C||"provider/model-id"}`}}},models:{providers:{"9router":{baseUrl:S(),apiKey:p,api:"openai-completions",models:[{id:C||"provider/model-id",name:(C||"provider/model-id").split("/").pop()}]}}}},null,2)}])})]})}function n({toolId:a,tool:b,isExpanded:c,onToggle:h,baseUrl:i,apiKeys:j,activeProviders:k=[],cloudEnabled:l=!1,tunnelEnabled:m=!1}){let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(()=>j?.length>0?j[0].key:""),w=a=>{let b=u&&u.trim()?u:l?"your-api-key":"sk_9router",c=i||"http://localhost:20128",d=c.endsWith("/v1")?c:`${c}/v1`;return a.replace(/\{\{baseUrl\}\}/g,d).replace(/\{\{apiKey\}\}/g,b).replace(/\{\{model\}\}/g,s||"provider/model-id")},x=async(a,b)=>{await navigator.clipboard.writeText(w(a)),p(b),setTimeout(()=>p(null),2e3)},y=k.length>0,z=()=>(!b.requiresExternalUrl||!!l||!!m)&&(!b.requiresCloud||!!l);return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:h,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 rounded-lg flex items-center justify-center shrink-0",children:b.image?(0,d.jsx)(g.default,{src:b.image,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}}):b.icon?(0,d.jsx)("span",{className:"material-symbols-outlined text-xl",style:{color:b.color},children:b.icon}):(0,d.jsx)(g.default,{src:`/providers/${a}.png`,alt:b.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:b.name}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:b.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${c?"rotate-180":""}`,children:"expand_more"})]}),c&&(0,d.jsx)("div",{className:"mt-6 pt-6 border-t border-border",children:b.guideSteps?(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[b.notes&&0!==b.notes.length?(0,d.jsx)("div",{className:"flex flex-col gap-2 mb-4",children:b.notes.map((a,b)=>{if("cloudCheck"===a.type&&(l||m))return null;let c="warning"===a.type,e="cloudCheck"===a.type&&!l&&!m,f="bg-blue-500/10 border-blue-500/30",g="text-blue-600 dark:text-blue-400",h="text-blue-500",i="info";return c?(f="bg-yellow-500/10 border-yellow-500/30",g="text-yellow-600 dark:text-yellow-400",h="text-yellow-500",i="warning"):e&&(f="bg-red-500/10 border-red-500/30",g="text-red-600 dark:text-red-400",h="text-red-500",i="error"),(0,d.jsxs)("div",{className:`flex items-start gap-3 p-3 rounded-lg border ${f}`,children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-lg ${h}`,children:i}),(0,d.jsx)("p",{className:`text-sm ${g}`,children:a.text})]},b)})}):null,z()&&b.guideSteps.map(a=>(0,d.jsxs)("div",{className:"flex items-start gap-4",children:[(0,d.jsx)("div",{className:"size-8 rounded-full flex items-center justify-center shrink-0 text-sm font-semibold text-white",style:{backgroundColor:b.color},children:a.step}),(0,d.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,d.jsx)("p",{className:"font-medium text-text",children:a.title}),a.desc&&(0,d.jsx)("p",{className:"text-sm text-text-muted mt-0.5",children:a.desc}),"apiKeySelector"===a.type&&(0,d.jsx)("div",{className:"mt-2 flex items-center gap-2",children:j&&j.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("select",{value:u,onChange:a=>v(a.target.value),className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:j.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}),(0,d.jsx)("button",{onClick:()=>x(u,"apiKey"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"apiKey"===o?"check":"content_copy"})})]}):(0,d.jsx)("span",{className:"text-sm text-text-muted",children:l?"No API keys - Create one in Keys page":"sk_9router"})}),"modelSelector"===a.type&&(0,d.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,d.jsx)("input",{type:"text",value:s,onChange:a=>t(a.target.value),placeholder:"provider/model-id",className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>r(!0),disabled:!y,className:`shrink-0 px-3 py-2 rounded-lg border text-sm transition-colors ${y?"bg-bg-secondary border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),s&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("button",{onClick:()=>x(s,"model"),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"model"===o?"check":"content_copy"})}),(0,d.jsx)("button",{onClick:()=>t(""),className:"p-2 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})})]})]}),a.value&&(0,d.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,d.jsx)("code",{className:"flex-1 px-3 py-2 bg-bg-secondary rounded-lg text-sm font-mono border border-border truncate",children:w(a.value)}),a.copyable&&(0,d.jsx)("button",{onClick:()=>x(a.value,`${a.step}-${a.title}`),className:"shrink-0 px-3 py-2 bg-bg-secondary hover:bg-bg-tertiary rounded-lg border border-border transition-colors",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-lg",children:o===`${a.step}-${a.title}`?"check":"content_copy"})})]})]})]},a.step)),z()&&b.codeBlock&&(0,d.jsxs)("div",{className:"mt-2",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,d.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wide",children:b.codeBlock.language}),(0,d.jsxs)("button",{onClick:()=>x(b.codeBlock.code,"codeblock"),className:"flex items-center gap-1 px-2 py-1 text-xs bg-bg-secondary hover:bg-bg-tertiary rounded border border-border transition-colors",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-sm",children:"codeblock"===o?"check":"content_copy"}),"codeblock"===o?"Copied!":"Copy"]})]}),(0,d.jsx)("pre",{className:"p-4 bg-bg-secondary rounded-lg border border-border overflow-x-auto",children:(0,d.jsx)("code",{className:"text-sm font-mono whitespace-pre",children:w(b.codeBlock.code)})})]})]}):(0,d.jsx)("p",{className:"text-text-muted text-sm",children:"Coming soon..."})}),(0,d.jsx)(f.rq,{isOpen:q,onClose:()=>r(!1),onSelect:a=>{t(a.value)},selectedModel:s,activeProviders:k,title:"Select Model"})]})}function o({tool:a,isExpanded:b,onToggle:c,baseUrl:h,apiKeys:i,activeProviders:j,cloudEnabled:k,initialStatus:l}){let m,n,p,q,r,[s,t]=(0,e.useState)(l||null),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(""),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(""),[K,L]=(0,e.useState)(!1),[M,N]=(0,e.useState)(!1),[O,P]=(0,e.useState)({}),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(""),[U,V]=(0,e.useState)([]),[W,X]=(0,e.useState)(""),Y=(()=>{if(!s?.installed)return null;if(!s.config)return"not_configured";let a=s.config?.provider?.["9router"]?.options?.baseURL||"",b=a.includes("localhost")||a.includes("127.0.0.1");return s.has9Router&&(b||a.includes(h))?"configured":s.has9Router?"other":"not_configured"})(),Z=()=>{let a=S||h;return a.endsWith("/v1")?a:`${a}/v1`},$=async()=>{v(!0);try{let a=await fetch("/api/cli-tools/opencode-settings"),b=await a.json();t(b)}catch(a){t({installed:!1,error:a.message})}finally{v(!1)}},_=async()=>{x(!0),B(null);try{let a=E&&E.trim()||k?E:"sk_9router",b=await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:Z(),apiKey:a,models:U,activeModel:""===W?"":W||U[0],subagentModel:I})}),c=await b.json();b.ok?(B({type:"success",text:"Settings applied successfully!"}),$()):B({type:"error",text:c.error||"Failed to apply settings"})}catch(a){B({type:"error",text:a.message})}finally{x(!1)}},aa=async()=>{z(!0),B(null);try{let a=await fetch("/api/cli-tools/opencode-settings",{method:"DELETE"}),b=await a.json();a.ok?(B({type:"success",text:"Settings reset successfully!"}),H(""),J(""),V([]),X(""),$()):B({type:"error",text:b.error||"Failed to reset settings"})}catch(a){B({type:"error",text:a.message})}finally{z(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:"/providers/opencode.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===Y&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===Y&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===Y&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[u&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-text-muted",children:[(0,d.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),(0,d.jsx)("span",{children:"Checking OpenCode CLI..."})]}),!u&&s&&!s.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500",children:"warning"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:"OpenCode CLI not installed"}),(0,d.jsx)("p",{className:"text-sm text-text-muted",children:"Please install OpenCode CLI to use auto-apply feature."})]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:()=>D(!C),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[18px] mr-1",children:C?"expand_less":"help"}),C?"Hide":"How to Install"]})]}),C&&(0,d.jsxs)("div",{className:"p-4 bg-surface border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-text-muted mb-1",children:"macOS / Linux:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g opencode-ai"})]}),(0,d.jsxs)("p",{className:"text-text-muted",children:["After installation, run ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"opencode"})," to verify."]})]})]})]}),!u&&s?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[s?.config?.provider?.["9router"]?.options?.baseURL&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Current"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted truncate",children:s.config.provider["9router"].options.baseURL})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:S||`${h}/v1`,onChange:a=>T(a.target.value),placeholder:"https://.../v1",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),S&&S!==`${h}/v1`&&(0,d.jsx)("button",{onClick:()=>T(""),className:"p-1 text-text-muted hover:text-primary rounded transition-colors",title:"Reset to default",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"restart_alt"})})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),i.length>0?(0,d.jsx)("select",{value:E,onChange:a=>F(a.target.value),className:"flex-1 px-2 py-1.5 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:i.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 text-xs text-text-muted px-2 py-1.5",children:k?"No API keys - Create one in Keys page":"sk_9router (default)"})]}),(0,d.jsxs)("div",{className:"flex items-start gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right pt-1",children:"Models"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px] mt-1.5",children:"arrow_forward"}),(0,d.jsxs)("div",{className:"flex-1 flex flex-col gap-2",children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1.5 min-h-[28px] px-2 py-1.5 bg-surface rounded border border-border",children:0===U.length?(0,d.jsx)("span",{className:"text-xs text-text-muted",children:"No models selected"}):U.map(a=>(0,d.jsxs)("span",{onClick:async()=>{if(a===W)try{(await fetch("/api/cli-tools/opencode-settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({clearActiveModel:!0})})).ok&&(X(""),$())}catch(a){console.log("Error clearing active model:",a)}else X(a)},className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs cursor-pointer transition-colors ${a===W?"bg-primary/10 text-primary border border-primary":"bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border"}`,title:a===W?"Click to clear active model":"Click to set as active",children:[a===W&&(0,d.jsx)("span",{className:"material-symbols-outlined text-[10px]",children:"star"}),a,(0,d.jsx)("button",{onClick:async b=>{b.stopPropagation();try{if((await fetch(`/api/cli-tools/opencode-settings?model=${encodeURIComponent(a)}`,{method:"DELETE"})).ok){let b=U.filter(b=>b!==a);V(b),W===a&&X(""),$()}}catch(a){console.log("Error removing model:",a)}},className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"close"})})]},a))}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("button",{onClick:()=>L(!0),disabled:!j?.length,className:`px-2 py-1 rounded border text-xs transition-colors ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Add Model"}),(0,d.jsx)("span",{className:"text-xs text-text-muted",children:U.length>0&&W?(0,d.jsxs)(d.Fragment,{children:["Active: ",(0,d.jsx)("span",{className:"text-primary",children:W})]}):U.length>0?(0,d.jsx)("span",{className:"text-yellow-500",children:"Click a model to set/clear active"}):"Select models to add"})]})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"Subagent Model"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:I,onChange:a=>J(a.target.value),placeholder:G||"provider/model-id (defaults to main model)",className:"flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,d.jsx)("button",{onClick:()=>N(!0),disabled:!j?.length,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 whitespace-nowrap ${j?.length?"bg-surface border-border text-text-main hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select Model"}),I&&(0,d.jsx)("button",{onClick:()=>J(""),className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear (will use main model)",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]})]}),A&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===A.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"success"===A.type?"check_circle":"error"}),(0,d.jsx)("span",{children:A.text})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(f.$n,{variant:"primary",size:"sm",onClick:_,disabled:0===U.length,loading:w,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"save"}),"Apply"]}),(0,d.jsxs)(f.$n,{variant:"outline",size:"sm",onClick:aa,disabled:!s.has9Router,loading:y,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"restore"}),"Reset"]}),(0,d.jsxs)(f.$n,{variant:"ghost",size:"sm",onClick:()=>R(!0),children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1",children:"content_copy"}),"Manual Config"]})]})]})]}),(0,d.jsx)(f.rq,{isOpen:K,onClose:()=>L(!1),onSelect:a=>{!U.includes(a.value)&&(V([...U,a.value]),W||X(a.value)),L(!1)},selectedModel:null,activeProviders:j,modelAliases:O,title:"Add Model for OpenCode"}),(0,d.jsx)(f.rq,{isOpen:M,onClose:()=>N(!1),onSelect:a=>{J(a.value),N(!1)},selectedModel:I,activeProviders:j,modelAliases:O,title:"Select Subagent Model for OpenCode"}),(0,d.jsx)(f.uR,{isOpen:Q,onClose:()=>R(!1),title:"OpenCode - Manual Configuration",configs:(m=E&&E.trim()?E:k?"<API_KEY_FROM_DASHBOARD>":"sk_9router",n=U.length>0?U:["provider/model-id"],p=W||U[0]||n[0],q=I||p,r={},n.forEach(a=>{r[a]={name:a}}),[{filename:"~/.config/opencode/opencode.json",content:JSON.stringify({provider:{"9router":{npm:"@ai-sdk/openai-compatible",options:{baseURL:Z(),apiKey:m},models:r}},model:`9router/${p}`,agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:`9router/${q}`}}},null,2)}])})]})}let p="http://localhost:20128";function q({apiKeys:a,cloudEnabled:b,onStatusChange:c}){let[g,h]=(0,e.useState)(null),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)(""),[o,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(null),[u,v]=(0,e.useState)(null),[w,x]=(0,e.useState)(null),[y,z]=(0,e.useState)(p),A="u">typeof navigator&&navigator.userAgent?.includes("Windows"),B=g?.isAdmin!==!1,C=async()=>{try{let a=await fetch("/api/cli-tools/antigravity-mitm");if(a.ok){let b=await a.json();h(b),b.mitmRouterBaseUrl&&z(b.mitmRouterBaseUrl),c?.(b)}}catch{h({running:!1,certExists:!1,dnsStatus:{}})}},D=a=>{A||g?.hasCachedPassword?E(a,""):(t(a),l(!0),v(null))},E=async(c,d)=>{j(!0),x(null);try{let e;if("trust-cert"===c)e=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");e=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:y.trim()||p})})}else e=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});let f=await e.json().catch(()=>({}));if(!e.ok)throw Error(f.error||"MITM action failed");l(!1),n(""),v(null),await C()}catch(b){let a=b?.message||"MITM action failed";x(a),k&&v(a)}finally{j(!1),t(null)}},F=()=>{m?E(s,m):v("Sudo password is required")},G=g?.running;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.Zp,{padding:"sm",className:"border-primary/20 bg-primary/5",children:(0,d.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-primary text-[20px]",children:"security"}),(0,d.jsx)("span",{className:"font-semibold text-sm text-text-main",children:"MITM Server"}),G?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Running"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Stopped"})]}),(0,d.jsx)("div",{className:"flex items-center gap-1 text-xs text-text-muted","data-i18n-skip":"true",children:[{label:"Cert",ok:g?.certExists},{label:"Trusted",ok:g?.certTrusted},{label:"Server",ok:G}].map(({label:a,ok:b})=>(0,d.jsxs)("span",{className:`flex items-center gap-0.5 px-1.5 py-0.5 rounded ${b?"text-green-600":"text-text-muted"}`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:b?"check_circle":"cancel"}),a]},a))})]}),(0,d.jsxs)("div",{className:"px-2 py-2 rounded-lg bg-surface/50 border border-border/50 flex flex-col gap-2",children:[(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"Purpose:"})," Use Antigravity IDE & GitHub Copilot → with ANY provider/model from 9Router"]}),(0,d.jsxs)("p",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("span",{className:"font-medium text-text-main",children:"How it works:"})," Antigravity/Copilot IDE request → DNS redirect to localhost:443 → MITM proxy intercepts → 9Router → response to Antigravity/Copilot"]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"9Router Base URL"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:y,onChange:a=>z(a.target.value),placeholder:p,disabled:G,className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded border border-border text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]}),!G&&(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-32 shrink-0 text-sm font-semibold text-text-main text-right",children:"API Key"}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),a?.length>0?(0,d.jsx)("select",{value:o,onChange:a=>r(a.target.value),className:"flex-1 min-w-0 px-2 py-1.5 bg-surface rounded text-xs border border-border text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50",children:a.map(a=>(0,d.jsx)("option",{value:a.key,children:a.key},a.id))}):(0,d.jsx)("span",{className:"flex-1 px-2 py-1.5 text-xs text-text-muted",children:b?"No API keys — create one in Keys page":"sk_9router (default)"})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2 flex-wrap","data-i18n-skip":"true",children:[g?.certExists&&!g?.certTrusted&&(0,d.jsxs)("button",{onClick:()=>D("trust-cert"),disabled:i,className:"px-4 py-1.5 rounded-lg bg-yellow-500/10 border border-yellow-500/30 text-yellow-600 font-medium text-xs flex items-center gap-1.5 hover:bg-yellow-500/20 transition-colors disabled:opacity-50",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"verified_user"}),"Trust Cert"]}),G?(0,d.jsxs)("button",{onClick:()=>D("stop"),disabled:i,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop Server"]}):(0,d.jsxs)("button",{onClick:()=>D("start"),disabled:i||A&&!B,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start Server"]}),G&&(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Enable DNS per tool below to activate interception"})]}),w&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:w})]}),A&&!B&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600 border border-red-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"shield_lock"}),(0,d.jsx)("span",{children:"Administrator required — restart 9Router as Administrator to use MITM"})]})]})}),k&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required for SSL certificate and server startup"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:m,onChange:a=>n(a.target.value),onKeyDown:a=>{"Enter"!==a.key||i||F()}}),u&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:u})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{l(!1),n(""),v(null)},disabled:i,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:F,loading:i,children:"Confirm"})]})]})})]})}function r({tool:a,isExpanded:b,onToggle:c,serverRunning:h,dnsActive:i,hasCachedPassword:j,apiKeys:k,activeProviders:l,hasActiveProviders:m,modelAliases:n={},cloudEnabled:o,onDnsChange:p,tokenSwapActive:q=!1}){let[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(""),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(null),[H,I]=(0,e.useState)({}),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(null),N="u">typeof navigator&&navigator.userAgent?.includes("Windows");(0,e.useCallback)(async()=>{try{let b=await fetch(`/api/cli-tools/antigravity-mitm/alias?tool=${a.id}`);if(b.ok){let a=await b.json();Object.keys(a.aliases||{}).length>0&&I(a.aliases)}}catch{}},[a.id]);let O=(0,e.useCallback)(async b=>{try{await fetch("/api/cli-tools/antigravity-mitm/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,mappings:b})})}catch{}},[a.id]),P=(a,b)=>{I(c=>({...c,[a]:b}))},Q=()=>{if(!h)return;let a=i?"disable":"enable";N||j?R(a,""):(E(a),A(!0),G(null))},R=async(b,c)=>{u(!0),w(null),y(null);try{let d=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:a.id,action:b,sudoPassword:c})}),e=await d.json().catch(()=>({}));if(!d.ok)throw Error(e.error||`Failed to ${b} DNS`);"enable"===b&&w(`Restart ${a.name} to apply changes`),A(!1),C(""),p?.(e)}catch(a){y(a.message||`Failed to ${b} DNS`)}finally{u(!1),E(null)}},S=()=>{B?R(D,B):G("Sudo password is required")};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between hover:cursor-pointer",onClick:c,children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),a.supportsTokenSwap&&(0,d.jsx)("span",{className:"text-[9px] uppercase tracking-wider text-text-muted bg-surface border border-border px-1.5 py-0.5 rounded font-semibold",children:"Mode A"}),h?q?(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Bypassed"}):i?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Active"}):(0,d.jsx)(f.Ex,{variant:"warning",size:"sm",children:"DNS off"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Server off"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Model routing — remap model IDs in intercepted requests"})]})]}),(0,d.jsx)("span",{className:`material-symbols-outlined text-text-muted text-[20px] transition-transform ${b?"rotate-180":""}`,children:"expand_more"})]}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[q&&(0,d.jsxs)("div",{className:"flex items-start gap-2 px-2 py-2 rounded-lg bg-violet-500/5 border border-violet-500/15",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] text-violet-400 mt-0.5 shrink-0",children:"info"}),(0,d.jsx)("p",{className:"text-[11px] text-violet-400",children:"Token Rotation (Mode B) is active — model routing is currently bypassed. Disable Token Rotation to use model routing."})]}),"antigravity"===a.id&&(0,d.jsx)(s,{}),(0,d.jsxs)("div",{className:"flex flex-col gap-0.5 text-[11px] text-text-muted px-1",children:[(0,d.jsxs)("p",{children:["Toggle DNS to redirect ",a.name," traffic through 9Router via MITM."]}),!i&&(0,d.jsx)("p",{className:"text-amber-600 text-[10px] mt-1",children:"⚠️ Enable DNS to edit model mappings"})]}),a.defaultModels?.length>0&&(0,d.jsx)("div",{className:"flex flex-col gap-2",children:a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"w-36 shrink-0 text-xs font-semibold text-text-main text-right",children:a.name}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[14px]",children:"arrow_forward"}),(0,d.jsx)("input",{type:"text",value:H[a.alias]||"",onChange:b=>P(a.alias,b.target.value),onBlur:b=>{var c,d;return c=a.alias,d=b.target.value,void O({...H,[c]:d})},placeholder:"provider/model-id",disabled:!i,className:`flex-1 px-2 py-1.5 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 ${!i?"opacity-50 cursor-not-allowed":""}`}),(0,d.jsx)("button",{onClick:()=>{M(a.alias),K(!0)},disabled:!m||!i,className:`px-2 py-1.5 rounded border text-xs transition-colors shrink-0 ${m&&i?"bg-surface border-border hover:border-primary cursor-pointer":"opacity-50 cursor-not-allowed border-border"}`,children:"Select"}),H[a.alias]&&(0,d.jsx)("button",{onClick:()=>{P(a.alias,""),O({...H,[a.alias]:""})},className:"p-1 text-text-muted hover:text-red-500 rounded transition-colors",title:"Clear",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"close"})})]},a.alias))}),a.defaultModels?.length===0&&(0,d.jsx)("p",{className:"text-xs text-text-muted px-1",children:"Model mappings will be available soon."}),(0,d.jsxs)("div",{className:"flex flex-col gap-2 items-start",children:[i?(0,d.jsxs)("button",{onClick:Q,disabled:!h||t,className:"px-4 py-1.5 rounded-lg bg-red-500/10 border border-red-500/30 text-red-500 font-medium text-xs flex items-center gap-1.5 hover:bg-red-500/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"stop_circle"}),"Stop DNS"]}):(0,d.jsxs)("button",{onClick:Q,disabled:!h||t,className:"px-4 py-1.5 rounded-lg bg-primary/10 border border-primary/30 text-primary font-medium text-xs flex items-center gap-1.5 hover:bg-primary/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"play_circle"}),"Start DNS"]}),v&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs text-amber-500",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,d.jsx)("span",{children:v})]}),x&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:x})]})]})]})]}),z&&(0,d.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",children:(0,d.jsxs)("div",{className:"bg-surface border border-border rounded-xl p-6 w-full max-w-sm flex flex-col gap-4 shadow-xl",children:[(0,d.jsx)("h3",{className:"font-semibold text-text-main",children:"Sudo Password Required"}),(0,d.jsxs)("div",{className:"flex items-start gap-3 p-3 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-yellow-500 text-[20px]",children:"warning"}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Required to modify /etc/hosts and flush DNS cache"})]}),(0,d.jsx)(f.pd,{type:"password",placeholder:"Enter sudo password",value:B,onChange:a=>C(a.target.value),onKeyDown:a=>{"Enter"!==a.key||t||S()}}),F&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"error"}),(0,d.jsx)("span",{children:F})]}),(0,d.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,d.jsx)(f.$n,{variant:"ghost",size:"sm",onClick:()=>{A(!1),C(""),G(null)},disabled:t,children:"Cancel"}),(0,d.jsx)(f.$n,{variant:"primary",size:"sm",onClick:S,loading:t,children:"Confirm"})]})]})}),(0,d.jsx)(f.rq,{isOpen:J,onClose:()=>K(!1),onSelect:a=>{if(!L||a.isPlaceholder)return;let b={...H,[L]:a.value};I(b),O(b)},selectedModel:L?H[L]:null,activeProviders:l,modelAliases:n,title:`Select model for ${L}`})]})}function s(){let[a,b]=(0,e.useState)(null),[c,f]=(0,e.useState)(!1),[g,h]=(0,e.useState)(null),i=(0,e.useCallback)(async()=>{try{let a=await fetch("/api/antigravity-ide");a.ok&&b(await a.json())}catch{}},[]),j=async()=>{f(!0),h(null);try{let a=await fetch("/api/antigravity-ide",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"close"})}),b=await a.json();h(b),setTimeout(i,1e3)}catch(a){h({success:!1,error:a.message})}f(!1)};return(0,d.jsxs)("div",{className:"flex items-center gap-2 px-1",children:[(0,d.jsxs)("button",{onClick:j,disabled:c||!a?.running,className:"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-xs font-medium border border-red-500/30 text-red-500 bg-red-500/5 hover:bg-red-500/15 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",title:a?.running?"Close all Antigravity IDE processes":"Antigravity IDE is not running",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[14px] ${c?"animate-spin":""}`,children:c?"progress_activity":"close"}),c?"Closing…":"Close IDE"]}),a&&(0,d.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-text-muted",children:[(0,d.jsx)("span",{className:`inline-block w-1.5 h-1.5 rounded-full ${!a.installed?"bg-gray-400":a.running?"bg-green-500":"bg-red-400"}`}),a.installed?a.running?"Running":"Stopped":"Not installed"]}),g&&!c&&(0,d.jsxs)("span",{className:`text-[10px] ${g.success?"text-green-500":"text-red-400"}`,children:[g.success?"✓":"✗"," ",g.message||g.error]})]})}var t=c(2116),u=c.n(t);function v(a){if(null==a)return null;let b=String(a).trim();if(!b)return null;let c=b.toLowerCase();return c.includes("ultra")?"Ultra":c.includes("pro")?"Pro":c.includes("free")?"Free":null}["Free","Pro","Ultra"].map(a=>({value:a,label:a}));var w=c(4088);function x(a){if(!a||"string"!=typeof a)return a;let b=a.indexOf("@");if(b<=0||b===a.length-1)return a;let c=a.slice(0,b),d=a.slice(b+1);return 1===c.length?`${c[0]}**@${d}`:2===c.length?`${c[0]}**${c[1]}@${d}`:`${c[0]}**${c[c.length-1]}@${d}`}function y({tool:a,connections:b=[],serverRunning:c,dnsActive:g,onToggle:h,onRefreshConnections:i}){let[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(!1),[n,o]=(0,e.useState)("round-robin"),[p,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(!1),[t,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(null),[C,D]=(0,e.useState)(null),[E,F]=(0,e.useState)(!1),[G,H]=(0,e.useState)({}),I=(0,e.useRef)({});(0,e.useCallback)(async()=>{try{let a=await fetch("/api/settings");if(a.ok){let b=await a.json();k(!!b.tokenSwapEnabled),o(b.tokenSwapStrategy||"round-robin"),s(!!b.tokenSwapMaskEmails)}}catch{}},[]);let J=(0,e.useCallback)(async(b,c=!1)=>{if(!b||0===b.length)return;let d=Date.now(),e=[],f={};if(b.forEach(a=>{let b=I.current[a.id];!c&&b&&d-b.ts<12e4?f[a.id]={quotas:b.data,error:b.error,loading:!1,accountType:b.accountType||null}:e.push(a)}),Object.keys(f).length>0&&H(a=>({...a,...f})),0===e.length)return;let g={};e.forEach(a=>{g[a.id]={quotas:[],error:null,loading:!0}}),H(a=>({...a,...g})),await Promise.all(e.map(async b=>{try{let c=await fetch(`/api/usage/${b.id}`);if(!c.ok){let a=(await c.json().catch(()=>({}))).error||`HTTP ${c.status}`;I.current[b.id]={data:[],error:a,ts:Date.now(),accountType:null},H(c=>({...c,[b.id]:{quotas:[],error:a,loading:!1,accountType:null}}));return}let d=await c.json(),e=(0,w.W_)(a.tokenSwapProvider||"antigravity",d),f=function(a){if(!a)return null;if("string"==typeof a)return v(a);for(let b of[a.accountType,a.plan,a.paidTier?.name,a.subscriptionTier,a.subscription_tier,a.currentTier?.name,a.subscriptionInfo?.paidTier?.name,a.quota?.subscription_tier,a.subscriptionInfo?.currentTier?.name]){let a=v(b);if(a)return a}return null}(d);I.current[b.id]={data:e,error:null,ts:Date.now(),accountType:f},H(a=>({...a,[b.id]:{quotas:e,error:null,loading:!1,accountType:f}}))}catch(c){let a=c.message||"Failed";I.current[b.id]={data:[],error:a,ts:Date.now(),accountType:null},H(c=>({...c,[b.id]:{quotas:[],error:a,loading:!1,accountType:null}}))}}))},[a.tokenSwapProvider]);if(!a?.supportsTokenSwap)return null;let K=async()=>{m(!0);let a=!j;try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenSwapEnabled:a})})).ok&&(k(a),h?.(a))}catch{}m(!1)},L=async a=>{if(a!==n&&!p){q(!0);try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenSwapStrategy:a})})).ok&&o(a)}catch{}q(!1)}},M=async()=>{if(t)return;z(!0);let a=!r;try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenSwapMaskEmails:a})})).ok&&s(a)}catch{}z(!1)},N=b.filter(b=>b.provider===a.tokenSwapProvider),O=N.filter(a=>!1!==a.isActive),P=O.length;O.map(a=>a.id).join("|");let Q=function(a,b){if(!a||0===a.length)return null;if(1===a.length)return a[0].id;let c=[...a].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(b.lastUsedAt)-new Date(a.lastUsedAt):-1:1:(a.priority||999)-(b.priority||999));if("sticky"===b)return c[0]?.id||null;let d=[...a].sort((a,b)=>a.lastUsedAt||b.lastUsedAt?a.lastUsedAt?b.lastUsedAt?new Date(a.lastUsedAt)-new Date(b.lastUsedAt):1:-1:(a.priority||999)-(b.priority||999));return d[0]?.id||null}(O,n),R=c&&g,S=j&&R&&P>0,T=async(a,b)=>{if(a&&!A&&!E&&!C){B(a);try{(await fetch(`/api/providers/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:b})})).ok&&await i?.()}catch{}B(null)}},U=async a=>{if(a&&!C&&!E&&!A){D(a);try{(await fetch(`/api/providers/${a}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({lastUsedAt:null})})).ok&&await i?.()}catch{}D(null)}},V=async()=>{if(!E&&!C&&!A&&0!==N.length){F(!0);try{await Promise.all(N.map(a=>fetch(`/api/providers/${a.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({lastUsedAt:null})}))),await i?.()}catch{}F(!1)}};return(0,d.jsxs)(f.Zp,{padding:"xs",className:"overflow-hidden",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0 rounded-lg bg-violet-500/10",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-violet-400 text-[18px]",children:"swap_horiz"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:"Token Rotation"}),(0,d.jsx)("span",{className:"text-[9px] uppercase tracking-wider text-text-muted bg-surface border border-border px-1.5 py-0.5 rounded font-semibold",children:"Mode B"}),S?(0,d.jsx)(f.Ex,{variant:"success",size:"sm",children:"Active"}):j?(0,d.jsx)(f.Ex,{variant:"warning",size:"sm",children:"Enabled"}):(0,d.jsx)(f.Ex,{variant:"default",size:"sm",children:"Off"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted",children:"Rotate auth tokens across pool accounts to bypass per-account quota"})]})]}),(0,d.jsx)("button",{onClick:K,disabled:l,className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors shrink-0 ${j?"bg-violet-500":"bg-surface-alt border border-border"} ${l?"opacity-50":"cursor-pointer"}`,title:j?"Disable Token Rotation":"Enable Token Rotation",children:(0,d.jsx)("span",{className:`inline-block h-3.5 w-3.5 transform rounded-full bg-white transition-transform shadow-sm ${j?"translate-x-4":"translate-x-0.5"}`})})]}),j&&(0,d.jsxs)("div",{className:"mt-3 pt-3 border-t border-border/50 flex flex-col gap-3",children:[(0,d.jsxs)("div",{className:"flex items-start gap-2 px-2 py-2 rounded-lg bg-violet-500/5 border border-violet-500/15",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px] text-violet-400 mt-0.5 shrink-0",children:"info"}),(0,d.jsxs)("div",{className:"text-[11px] text-text-muted leading-relaxed",children:[(0,d.jsx)("p",{children:"Intercepts Antigravity requests → swaps IDE's auth token with a pool account → auto-retries on 429 quota error with next account in pool."}),(0,d.jsx)("p",{className:"mt-1 text-violet-400/80 font-medium",children:"⚠ When active, Model Routing (Mode A) is bypassed."})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1.5 px-1",children:[(0,d.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold",children:"Rotation Strategy"}),(0,d.jsxs)("div",{className:"flex gap-1.5",children:[(0,d.jsxs)("button",{onClick:()=>L("round-robin"),disabled:p,className:`flex-1 flex flex-col items-center gap-0.5 px-2 py-2 rounded-lg border text-[11px] font-medium transition-colors ${"round-robin"===n?"border-violet-500/50 bg-violet-500/10 text-violet-400":"border-border bg-surface text-text-muted hover:border-border-alt"} disabled:opacity-50`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"autorenew"}),"Round Robin"]}),(0,d.jsxs)("button",{onClick:()=>L("sticky"),disabled:p,className:`flex-1 flex flex-col items-center gap-0.5 px-2 py-2 rounded-lg border text-[11px] font-medium transition-colors ${"sticky"===n?"border-violet-500/50 bg-violet-500/10 text-violet-400":"border-border bg-surface text-text-muted hover:border-border-alt"} disabled:opacity-50`,children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"push_pin"}),"Sticky"]})]}),(0,d.jsx)("p",{className:"text-[10px] text-text-muted px-0.5",children:"sticky"===n?"Stays on the same account until its quota is exhausted for the requested model, then switches. Optimizes session-level token cache.":"Chooses the least recently used eligible account first. Each successful request updates that account's last-used time."})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1 px-1",children:[(0,d.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold mb-0.5",children:"Prerequisites"}),(0,d.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[14px] ${c?"text-green-500":"text-red-400"}`,children:c?"check_circle":"cancel"}),(0,d.jsx)("span",{className:c?"text-text-main":"text-text-muted",children:"MITM Server"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[14px] ${g?"text-green-500":"text-red-400"}`,children:g?"check_circle":"cancel"}),(0,d.jsxs)("span",{className:g?"text-text-main":"text-text-muted",children:["DNS redirect",!g&&(0,d.jsx)("span",{className:"text-[10px] text-text-muted ml-1",children:"— enable via Antigravity card above"})]})]})]}),(0,d.jsxs)("div",{className:"flex flex-col gap-1 px-1",children:[(0,d.jsxs)("div",{className:"flex items-center justify-between mb-0.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("p",{className:"text-[10px] uppercase tracking-wider text-text-muted font-semibold",children:"Pool Accounts"}),(0,d.jsx)("span",{className:"text-[10px] text-text-muted",children:N.length>0?`${P}/${N.length} active`:"none"}),P>1&&(0,d.jsx)("span",{className:"text-[9px] text-text-muted bg-surface border border-border px-1 py-0.5 rounded",children:"round-robin"})]}),(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[P>0&&(0,d.jsx)("button",{onClick:()=>J(O,!0),className:"text-[10px] text-text-muted hover:text-primary flex items-center gap-0.5 transition-colors",title:"Refresh quotas",children:(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"refresh"})}),"round-robin"===n&&N.length>0&&(0,d.jsxs)("button",{onClick:V,disabled:E||!!C,className:"inline-flex items-center gap-1 rounded-md border border-border bg-surface px-2 py-1 text-[10px] font-medium text-text-main hover:border-border-alt hover:bg-surface-alt disabled:opacity-50 disabled:cursor-not-allowed transition-colors",title:"Clear last-used timestamps for all pool accounts",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"restart_alt"}),"Reset order"]})]})]}),(0,d.jsx)("p",{className:"text-[10px] text-text-muted px-0.5",children:"Round robin uses least-recently-used ordering. Accounts with no usage timestamp are tried first, then older timestamps rotate ahead of newer ones."}),(0,d.jsxs)("div",{className:"flex items-center justify-between gap-3 px-2 py-2 rounded-lg border border-border bg-surface-alt/40",children:[(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("p",{className:"text-[11px] font-medium text-text-main",children:"Mask account emails"}),(0,d.jsxs)("p",{className:"text-[10px] text-text-muted",children:["Hide pool account emails in token swap logs and this panel. Example: ",x("email@gmail.com")]})]}),(0,d.jsx)("button",{onClick:M,disabled:t,className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors shrink-0 ${r?"bg-violet-500":"bg-surface border border-border"} ${t?"opacity-50":"cursor-pointer"}`,title:r?"Disable email masking":"Enable email masking",children:(0,d.jsx)("span",{className:`inline-block h-3.5 w-3.5 transform rounded-full bg-white transition-transform shadow-sm ${r?"translate-x-4":"translate-x-0.5"}`})})]}),N.length>0?(0,d.jsxs)(d.Fragment,{children:[N.map(a=>{let b=v(G[a.id]?.accountType)||v(a.accountType)||null;return(0,d.jsxs)("div",{className:`rounded-xl border border-border bg-surface-alt/30 px-3 py-2.5 transition-colors ${!1===a.isActive?"opacity-65":"hover:bg-surface-alt/50"}`,children:[(0,d.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,d.jsx)("span",{className:`material-symbols-outlined text-[14px] shrink-0 ${!1===a.isActive?"text-text-muted":"text-green-500"}`,children:!1===a.isActive?"pause_circle":"check_circle"}),(0,d.jsx)("span",{className:"text-xs font-medium text-text-main truncate",children:a.email?r?x(a.email):a.email:a.name||a.id.slice(0,16)}),b&&(0,d.jsx)(f.Ex,{variant:"Ultra"===b?"warning":"Pro"===b?"primary":"Free"===b?"info":"default",size:"sm",children:b}),Q===a.id&&!1!==a.isActive&&(0,d.jsx)("span",{className:"text-[9px] text-violet-300 bg-violet-500/10 border border-violet-500/20 px-1 py-0.5 rounded shrink-0",children:"next"}),(0,d.jsx)(f.Ex,{variant:!1===a.isActive?"default":"success",size:"sm",children:!1===a.isActive?"disabled":"active"})]}),(0,d.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap text-[10px] text-text-muted",children:[(0,d.jsxs)("span",{children:["Priority #",a.priority??"-"]}),a.lastUsedAt&&(0,d.jsxs)("span",{children:["Last used ",new Date(a.lastUsedAt).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})]})]})]}),(0,d.jsxs)("div",{className:"flex items-center gap-3 shrink-0",children:["round-robin"===n&&(0,d.jsxs)("button",{onClick:()=>U(a.id),disabled:E||A===a.id||C===a.id,className:"inline-flex items-center gap-1 rounded-md border border-border bg-surface px-2 py-1 text-[10px] font-medium text-text-main hover:border-border-alt hover:bg-surface-alt disabled:opacity-50 disabled:cursor-not-allowed transition-colors",title:"Clear this account's last-used timestamp",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"restart_alt"}),C===a.id?"...":"Reset Order"]}),(0,d.jsx)(f.lM,{size:"sm",checked:!1!==a.isActive,disabled:E||C===a.id||A===a.id,onChange:b=>T(a.id,b)})]})]}),(0,d.jsx)("div",{className:"mt-2 pl-6",children:!1===a.isActive?(0,d.jsx)("div",{className:"text-[10px] text-text-muted",children:"Enable this account to include it in token rotation and load quota reset info."}):(a=>{let b=(a=>{let b=G[a];if(!b)return{state:"empty"};if(b.loading)return{state:"loading"};if(b.error)return{state:"error",error:b.error};if(!b.quotas||0===b.quotas.length)return{state:"no-data"};let c=b.quotas.find(a=>a.modelKey?.includes("claude-sonnet-4-6")||a.name?.toLowerCase().includes("opus"))||b.quotas[0];if(!c)return{state:"no-data"};let d=void 0!==c.remainingPercentage?Math.round(c.remainingPercentage):c.total>0?Math.round((c.total-c.used)/c.total*100):null,e=(c.resetAt&&new Date(c.resetAt).getTime()>Date.now()?c.resetAt:null)||[...b.quotas].map(a=>a.resetAt).filter(Boolean).filter(a=>new Date(a).getTime()>Date.now()).sort((a,b)=>new Date(a).getTime()-new Date(b).getTime())[0]||null;return{state:null===d?"no-data":"ready",highlight:c,accountType:b.accountType||null,pct:d,nextResetAt:e,resetCountdown:(0,w.mO)(e),resetDisplay:(0,w.sQ)(e)}})(a);if(!b||"empty"===b.state)return(0,d.jsx)("span",{className:"text-[10px] text-text-muted",children:"Enable to load quota data"});if("loading"===b.state)return(0,d.jsx)("span",{className:"text-[10px] text-text-muted animate-pulse",children:"Loading quota…"});if("error"===b.state)return(0,d.jsx)("span",{className:"text-[10px] text-red-400",title:b.error,children:"Quota unavailable"});if("no-data"===b.state)return(0,d.jsx)("span",{className:"text-[10px] text-text-muted",children:"No quota data"});let{highlight:c,pct:e,resetCountdown:f,resetDisplay:g}=b;return(0,d.jsxs)("div",{className:"flex flex-col gap-1.5 min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,d.jsx)("span",{className:"text-[10px] text-text-muted truncate",children:c.name}),(0,d.jsx)("div",{className:"flex-1 h-1.5 rounded-full bg-surface-alt overflow-hidden min-w-[56px]",children:(0,d.jsx)("div",{className:`h-full rounded-full ${e>70?"bg-green-500":e>=30?"bg-yellow-500":"bg-red-500"}`,style:{width:`${Math.min(e,100)}%`}})}),(0,d.jsxs)("span",{className:`text-[10px] font-medium shrink-0 ${e>70?"text-green-500":e>=30?"text-yellow-500":"text-red-500"}`,children:[e,"%"]})]}),"-"!==f&&g?(0,d.jsxs)("div",{className:"text-[10px] text-text-muted",children:["Reset in ",(0,d.jsx)("span",{className:"text-text-main",children:f}),(0,d.jsxs)("span",{className:"text-text-muted/70",children:[" • ",g]})]}):(0,d.jsx)("div",{className:"text-[10px] text-text-muted",children:"Reset time unavailable"})]})})(a.id)})]},a.id)}),(0,d.jsxs)(u(),{href:"/dashboard/providers",className:"text-[11px] text-primary hover:underline flex items-center gap-1 px-1 mt-1",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:"open_in_new"}),"Manage accounts"]})]}):(0,d.jsx)("div",{className:"px-1",children:(0,d.jsxs)("p",{className:"text-xs text-text-muted",children:["No active ",a.name," accounts in pool."," ",(0,d.jsx)(u(),{href:"/dashboard/providers",className:"text-primary hover:underline",children:"Add account →"})]})})]}),!R&&(0,d.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded text-xs bg-amber-500/10 text-amber-600 border border-amber-500/20",children:[(0,d.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"warning"}),(0,d.jsx)("span",{children:"Start MITM server and enable DNS to activate token rotation"})]})]})]})}function z({tool:a}){return(0,d.jsx)(u(),{href:"/dashboard/mitm",className:"block",children:(0,d.jsx)(f.Zp,{padding:"sm",className:"overflow-hidden hover:border-primary/50 transition-colors cursor-pointer",children:(0,d.jsxs)("div",{className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(g.default,{src:a.image,alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"}})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-purple-500/10 text-purple-600 dark:text-purple-400 rounded-full",children:"MITM"})]}),(0,d.jsx)("p",{className:"text-xs text-text-muted truncate",children:a.description})]})]}),(0,d.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[20px]",children:"chevron_right"})]})})})}},62911:(a,b,c)=>{c.d(b,{dM:()=>e,wn:()=>d});let d={antigravity:{id:"antigravity",name:"Antigravity",image:"/providers/antigravity.png",color:"#4285F4",description:"Google Antigravity IDE with MITM",configType:"mitm",mitmDomain:"daily-cloudcode-pa.googleapis.com",supportsTokenSwap:!0,tokenSwapProvider:"antigravity",modelAliases:["claude-opus-4-6-thinking","claude-sonnet-4-6","gemini-3-flash","gpt-oss-120b-medium","gemini-3-pro-high","gemini-3-pro-low"],defaultModels:[{id:"gemini-3.1-pro-high",name:"Gemini 3.1 Pro High",alias:"gemini-3.1-pro-high"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro Low",alias:"gemini-3.1-pro-low"},{id:"gemini-3-flash",name:"Gemini 3 Flash",alias:"gemini-3-flash"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",alias:"claude-sonnet-4-6"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",alias:"claude-opus-4-6-thinking"},{id:"gpt-oss-120b-medium",name:"GPT OSS 120B Medium",alias:"gpt-oss-120b-medium"}]},copilot:{id:"copilot",name:"GitHub Copilot",image:"/providers/copilot.png",color:"#1F6FEB",description:"GitHub Copilot IDE with MITM",configType:"mitm",mitmDomain:"api.individual.githubcopilot.com",modelAliases:["gpt-4o-mini","claude-haiku-4.5","gpt-4o","gpt-5-mini"],defaultModels:[{id:"gpt-4o",name:"GPT-4o",alias:"gpt-4o"},{id:"gpt-4.1",name:"GPT-4.1",alias:"gpt-4.1"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"}]},kiro:{id:"kiro",name:"Kiro",image:"/providers/kiro.png",color:"#FF6B00",description:"Kiro IDE with MITM",configType:"mitm",mitmDomain:"q.us-east-1.amazonaws.com",defaultModels:[{id:"claude-sonnet-4.5",name:"Claude Sonnet 4.5",alias:"claude-sonnet-4.5"},{id:"claude-sonnet-4",name:"Claude Sonnet 4",alias:"claude-sonnet-4"},{id:"claude-haiku-4.5",name:"Claude Haiku 4.5",alias:"claude-haiku-4.5"},{id:"deepseek-3.2",name:"DeepSeek 3.2",alias:"deepseek-3.2"},{id:"minimax-m2.1",name:"MiniMax M2.1",alias:"minimax-m2.1"},{id:"simple-task",name:"Qwen3 Coder Next",alias:"simple-task"}]}},e={claude:{id:"claude",name:"Claude Code",icon:"terminal",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-4-6"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-4-6"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},openclaw:{id:"openclaw",name:"Open Claw",image:"/providers/openclaw.png",color:"#FF6B35",description:"Open Claw AI Assistant",configType:"custom"},codex:{id:"codex",name:"OpenAI Codex CLI",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},droid:{id:"droid",name:"Factory Droid",image:"/providers/droid.png",color:"#00D4FF",description:"Factory Droid AI Assistant",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]},cline:{id:"cline",name:"Cline",image:"/providers/cline.png",color:"#00D1B2",description:"Cline AI Coding Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Cline Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},kilo:{id:"kilo",name:"Kilo Code",image:"/providers/kilocode.png",color:"#FF6B6B",description:"Kilo Code AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Kilo Code Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → OpenAI Compatible"},{step:3,title:"Base URL",value:"{{baseUrl}}/v1",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},roo:{id:"roo",name:"Roo",image:"/providers/roo.png",color:"#FF6B6B",description:"Roo AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Settings",desc:"Go to Roo Settings panel"},{step:2,title:"Select Provider",desc:"Choose API Provider → Ollama"},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Select Model",type:"modelSelector"}]},continue:{id:"continue",name:"Continue",image:"/providers/continue.png",color:"#7C3AED",description:"Continue AI Assistant",configType:"guide",guideSteps:[{step:1,title:"Open Config",desc:"Open Continue configuration file"},{step:2,title:"API Key",type:"apiKeySelector"},{step:3,title:"Select Model",type:"modelSelector"},{step:4,title:"Add Model Config",desc:"Add the following configuration to your models array:"}],codeBlock:{language:"json",code:`{
13
+ "apiBase": "{{baseUrl}}",
14
+ "title": "{{model}}",
15
+ "model": "{{model}}",
16
+ "provider": "openai",
17
+ "apiKey": "{{apiKey}}"
18
+ }`}}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=869,exports.ids=[869],exports.modules={30869:(a,b,c)=>{c.d(b,{UY:()=>g,eh:()=>f.eh,fg:()=>e.fg});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={maxLines:200,pollIntervalMs:1e3}},39006:a=>{a.exports={rE:"0.4.2"}},75681:(a,b,c)=>{c.d(b,{DI:()=>i,IS:()=>d,JH:()=>h,Q2:()=>l,fg:()=>g,gb:()=>k,mq:()=>j,nJ:()=>e,rs:()=>n,wG:()=>o,zN:()=>f,zt:()=>m});let d={kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"},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",deprecated:!0,deprecationNotice:"Google has tightened Gemini CLI abuse detection and restricted Pro models to paid accounts (Mar 25, 2026). Using this provider may violate ToS and risk account bans."},iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},opencode:{id:"opencode",alias:"oc",name:"OpenCode",icon:"terminal",color:"#E87040",textIcon:"OC",noAuth:!0}},e={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After $10 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"}},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim",notice:{text:"Free access for NVIDIA Developer Program members (prototyping & testing).",apiKeyUrl:"https://build.nvidia.com/settings/api-keys"}},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com",notice:{text:"Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo \xb7 Max $100/mo.",apiKeyUrl:"https://ollama.com/settings/keys"}},vertex:{id:"vertex",alias:"vx",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VX",website:"https://cloud.google.com/vertex-ai",notice:{text:"New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.",apiKeyUrl:"https://console.cloud.google.com/iam-admin/serviceaccounts"}},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev"}},f={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",deprecated:!0,deprecationNotice:"Antigravity has tightened abuse detection and restricted model access. Using this provider may violate ToS and risk account bans."},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},g={glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com",serviceKinds:["llm","embedding","tts"]},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com",serviceKinds:["llm"]},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"},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",serviceKinds:["stt"]},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com",serviceKinds:["stt"]},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai",serviceKinds:["image"]},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io",serviceKinds:["tts"]},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai",serviceKinds:["tts"]},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht",serviceKinds:["tts"]},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui",serviceKinds:["image"]},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI",serviceKinds:["image"]},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",serviceKinds:["embedding","image","tts"]},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"vertex-partner":{id:"vertex-partner",alias:"vxp",name:"Vertex Partner",icon:"cloud",color:"#34A853",textIcon:"VP",website:"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models"}},h="openai-compatible-",i="anthropic-compatible-";function j(a){return"string"==typeof a&&a.startsWith(h)}function k(a){return"string"==typeof a&&a.startsWith(i)}let l={...d,...e,...f,...g};function m(a){for(let b of Object.values(l))if(b.alias===a||b.id===a)return b;return null}function n(a){let b=m(a);return b?.id||a}function o(a){let b=l[a];return b?.alias||a}Object.values(l).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(l).reduce((a,b)=>(a[b.id]=b.alias,a),{})},81329:(a,b,c)=>{c.d(b,{Xg:()=>d.Xg,eh:()=>e,vq:()=>d.vq});var d=c(57247);Object.entries(c(75681).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a);let e=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))}};
1
+ "use strict";exports.id=869,exports.ids=[869],exports.modules={30869:(a,b,c)=>{c.d(b,{UY:()=>g,eh:()=>f.eh,fg:()=>e.fg});var d=c(39006),e=c(75681),f=c(81329);d.rE;let g={maxLines:200,pollIntervalMs:1e3}},39006:a=>{a.exports={rE:"0.4.5"}},75681:(a,b,c)=>{c.d(b,{DI:()=>i,IS:()=>d,JH:()=>h,Q2:()=>l,fg:()=>g,gb:()=>k,mq:()=>j,nJ:()=>e,rs:()=>n,wG:()=>o,zN:()=>f,zt:()=>m});let d={kiro:{id:"kiro",alias:"kr",name:"Kiro AI",icon:"psychology_alt",color:"#FF6B35"},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",deprecated:!0,deprecationNotice:"Google has tightened Gemini CLI abuse detection and restricted Pro models to paid accounts (Mar 25, 2026). Using this provider may violate ToS and risk account bans."},iflow:{id:"iflow",alias:"if",name:"iFlow AI",icon:"water_drop",color:"#6366F1"},opencode:{id:"opencode",alias:"oc",name:"OpenCode",icon:"terminal",color:"#E87040",textIcon:"OC",noAuth:!0}},e={openrouter:{id:"openrouter",alias:"openrouter",name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After $10 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"},passthroughModels:!0},nvidia:{id:"nvidia",alias:"nvidia",name:"NVIDIA NIM",icon:"developer_board",color:"#76B900",textIcon:"NV",website:"https://developer.nvidia.com/nim",notice:{text:"Free access for NVIDIA Developer Program members (prototyping & testing).",apiKeyUrl:"https://build.nvidia.com/settings/api-keys"}},ollama:{id:"ollama",alias:"ollama",name:"Ollama Cloud",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com",notice:{text:"Free tier: light usage, 1 cloud model at a time (limits reset every 5h & 7d). Pro $20/mo \xb7 Max $100/mo.",apiKeyUrl:"https://ollama.com/settings/keys"}},vertex:{id:"vertex",alias:"vx",name:"Vertex AI",icon:"cloud",color:"#4285F4",textIcon:"VX",website:"https://cloud.google.com/vertex-ai",notice:{text:"New Google Cloud accounts get $300 free credits. Requires GCP project + Service Account with Vertex AI API enabled.",apiKeyUrl:"https://console.cloud.google.com/iam-admin/serviceaccounts"}},gemini:{id:"gemini",alias:"gemini",name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",serviceKinds:["llm","embedding"]}},f={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",deprecated:!0,deprecationNotice:"Antigravity has tightened abuse detection and restricted model access. Using this provider may violate ToS and risk account bans."},codex:{id:"codex",alias:"cx",name:"OpenAI Codex",icon:"code",color:"#3B82F6"},github:{id:"github",alias:"gh",name:"GitHub Copilot",icon:"code",color:"#333333"},cursor:{id:"cursor",alias:"cu",name:"Cursor IDE",icon:"edit_note",color:"#00D4AA"},kilocode:{id:"kilocode",alias:"kc",name:"Kilo Code",icon:"code",color:"#FF6B35",textIcon:"KC"},cline:{id:"cline",alias:"cl",name:"Cline",icon:"smart_toy",color:"#5B9BD5",textIcon:"CL"}},g={glm:{id:"glm",alias:"glm",name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn"},"glm-cn":{id:"glm-cn",alias:"glm-cn",name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn"},kimi:{id:"kimi",alias:"kimi",name:"Kimi",icon:"psychology",color:"#1E3A8A",textIcon:"KM",website:"https://kimi.moonshot.cn"},minimax:{id:"minimax",alias:"minimax",name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com"},"minimax-cn":{id:"minimax-cn",alias:"minimax-cn",name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com"},alicode:{id:"alicode",alias:"alicode",name:"Alibaba",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},"alicode-intl":{id:"alicode-intl",alias:"alicode-intl",name:"Alibaba Intl",icon:"cloud",color:"#FF6A00",textIcon:"ALi"},openai:{id:"openai",alias:"openai",name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com",serviceKinds:["llm","embedding","tts"]},anthropic:{id:"anthropic",alias:"anthropic",name:"Anthropic",icon:"smart_toy",color:"#D97757",textIcon:"AN",website:"https://console.anthropic.com",serviceKinds:["llm"]},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"},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",serviceKinds:["stt"]},assemblyai:{id:"assemblyai",alias:"aai",name:"AssemblyAI",icon:"record_voice_over",color:"#0062FF",textIcon:"AA",website:"https://assemblyai.com",serviceKinds:["stt"]},nanobanana:{id:"nanobanana",alias:"nb",name:"NanoBanana",icon:"image",color:"#FFD700",textIcon:"NB",website:"https://nanobananaapi.ai",serviceKinds:["image"]},elevenlabs:{id:"elevenlabs",alias:"el",name:"ElevenLabs",icon:"record_voice_over",color:"#6C47FF",textIcon:"EL",website:"https://elevenlabs.io",serviceKinds:["tts"]},cartesia:{id:"cartesia",alias:"cartesia",name:"Cartesia",icon:"spatial_audio",color:"#FF4F8B",textIcon:"CA",website:"https://cartesia.ai",serviceKinds:["tts"],hidden:!0},playht:{id:"playht",alias:"playht",name:"PlayHT",icon:"play_circle",color:"#00B4D8",textIcon:"PH",website:"https://play.ht",serviceKinds:["tts"],hidden:!0},"local-device":{id:"local-device",alias:"local-device",name:"Local Device",icon:"speaker",color:"#64748B",textIcon:"LD",serviceKinds:["tts"],noAuth:!0},"google-tts":{id:"google-tts",alias:"google-tts",name:"Google TTS",icon:"record_voice_over",color:"#4285F4",textIcon:"GT",serviceKinds:["tts"],noAuth:!0},"edge-tts":{id:"edge-tts",alias:"edge-tts",name:"Edge TTS",icon:"record_voice_over",color:"#0078D4",textIcon:"ET",serviceKinds:["tts"],noAuth:!0},sdwebui:{id:"sdwebui",alias:"sdwebui",name:"SD WebUI",icon:"brush",color:"#FF7043",textIcon:"SD",website:"https://github.com/AUTOMATIC1111/stable-diffusion-webui",serviceKinds:["image"]},comfyui:{id:"comfyui",alias:"comfyui",name:"ComfyUI",icon:"account_tree",color:"#4CAF50",textIcon:"CF",website:"https://github.com/comfyanonymous/ComfyUI",serviceKinds:["image"]},huggingface:{id:"huggingface",alias:"hf",name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",serviceKinds:["image","tts"],hiddenKinds:["tts"]},chutes:{id:"chutes",alias:"ch",name:"Chutes AI",icon:"water_drop",color:"#ffffffff",textIcon:"CH",website:"https://chutes.ai"},"ollama-local":{id:"ollama-local",alias:"ollama-local",name:"Ollama Local",icon:"cloud",color:"#ffffffff",textIcon:"OL",website:"https://ollama.com"},"vertex-partner":{id:"vertex-partner",alias:"vxp",name:"Vertex Partner",icon:"cloud",color:"#34A853",textIcon:"VP",website:"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models"}},h="openai-compatible-",i="anthropic-compatible-";function j(a){return"string"==typeof a&&a.startsWith(h)}function k(a){return"string"==typeof a&&a.startsWith(i)}let l={...d,...e,...f,...g};function m(a){for(let b of Object.values(l))if(b.alias===a||b.id===a)return b;return null}function n(a){let b=m(a);return b?.id||a}function o(a){let b=l[a];return b?.alias||a}Object.values(l).reduce((a,b)=>(a[b.alias]=b.id,a),{}),Object.values(l).reduce((a,b)=>(a[b.id]=b.alias,a),{})},81329:(a,b,c)=>{c.d(b,{Xg:()=>d.Xg,eh:()=>e,vq:()=>d.vq});var d=c(57247);Object.entries(c(75681).Q2).filter(([,a])=>a.passthroughModels).map(([a])=>a);let e=Object.entries(d.vq).flatMap(([a,b])=>b.map(b=>({provider:a,model:b.id,name:b.name})))}};
@@ -1,4 +1,4 @@
1
1
  "use strict";exports.id=8895,exports.ids=[8895],exports.modules={324:(a,b,c)=>{c.d(b,{J:()=>e,Q:()=>f});let d={claude:["claude","anthropic"],"gemini-cli":["gemini-cli"],antigravity:["antigravity"],codex:["codex"]};function e(a={},b={}){let c=(a["user-agent"]||"").toLowerCase(),d=(a["x-app"]||"").toLowerCase();return"antigravity"===b.userAgent?"antigravity":c.includes("claude-cli")||c.includes("claude-code")||"cli"===d?"claude":c.includes("gemini-cli")?"gemini-cli":c.includes("codex-cli")?"codex":null}function f(a,b){if(!a)return!1;let c=d[a];if(!c)return!1;let e=b.startsWith("anthropic-compatible")?"anthropic":b;return c.includes(e)}},5016:(a,b,c)=>{c.d(b,{N:()=>m});var d=c(14170),e=c(4841),f=c(39551),g=c(73483),h=c(43659),i=c(41004),j=c(81626),k=c(86171),l=c(47370);async function m({providerResponse:a,provider:b,model:c,sourceFormat:n,targetFormat:o,body:p,stream:q,translatedBody:r,finalBody:s,requestStartTime:t,connectionId:u,apiKey:v,clientRawRequest:w,onRequestSuccess:x,reqLogger:y,trackDone:z,appendLog:A}){let B;if(z(),(a.headers.get("content-type")||"").includes("text/event-stream")){let b=await a.text(),d=(0,j.F)(b,c);if(!d)return A({status:`FAILED ${i.gx.BAD_GATEWAY}`}),(0,h.A1)(i.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");B=d}else try{B=await a.json()}catch(a){return A({status:`FAILED ${i.gx.BAD_GATEWAY}`}),console.error(`[ChatCore] Failed to parse JSON from ${b}:`,a.message),(0,h.A1)(i.gx.BAD_GATEWAY,`Invalid JSON response from ${b}`)}y.logProviderResponse(a.status,a.statusText,a.headers,B),x&&await x();let C=(0,k.MK)(B);A({tokens:C,status:"200 OK"}),(0,k.qr)({provider:b,model:c,tokens:C,connectionId:u,apiKey:v,endpoint:w?.endpoint});let D=(0,e.nZ)(o,n)?function(a,b,c){if(b===c||b===d.h.OPENAI)return a;if(b===d.h.GEMINI||b===d.h.ANTIGRAVITY||b===d.h.GEMINI_CLI||b===d.h.VERTEX){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?g+=a.text:void 0!==a.text&&(f+=a.text),a.functionCall&&h.push({id:`call_${a.functionCall.name}_${Date.now()}_${h.length}`,type:"function",function:{name:a.functionCall.name,arguments:JSON.stringify(a.functionCall.args||{})}});let i={role:"assistant"};f&&(i.content=f),g&&(i.reasoning_content=g),h.length>0&&(i.tool_calls=h),i.content||i.tool_calls||(i.content="");let j=(c.finishReason||"stop").toLowerCase();"stop"===j&&h.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===d.h.CLAUDE){if(!a.content)return a;let b="",c="",d=[];for(let e of a.content)"text"===e.type?b+=(e.text??"").replace(/^\s*```\s*json\s*\n?/i,"").replace(/\n?\s*```\s*$/i,""):"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 b===d.h.OLLAMA?(0,f.ollamaBodyToOpenAI)(a):a}(B,o,n):B;if(D?.choices?.[0]){let a=D.choices[0],b=a.message;Array.isArray(b?.tool_calls)&&b.tool_calls.length>0&&"tool_calls"!==a.finish_reason&&(a.finish_reason="tool_calls")}if(D.object||(D.object="chat.completion"),D.created||(D.created=Math.floor(Date.now()/1e3)),delete D.prompt_filter_results,D?.choices)for(let a of D.choices)delete a.content_filter_results;if(D?.usage&&(D.usage=(0,g.WL)((0,g.O9)(D.usage),n)),D?.choices)for(let a of D.choices)a?.message&&delete a.message.reasoning_content;y.logConvertedResponse(D);let E=Date.now()-t;return(0,l.ox)((0,k.$R)({provider:b,model:c,connectionId:u,latency:{ttft:E,total:E},tokens:C||{prompt_tokens:0,completion_tokens:0},request:(0,k.Fo)(p,q),providerRequest:s||r||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:w?.endpoint||null})).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":"*"}})}}},12557:(a,b,c)=>{c.d(b,{Bl:()=>k,Qo:()=>g,S5:()=>m,hk:()=>f,kJ:()=>l});var d=c(41004);function e(a=0){return Math.min(d.EQ.base*Math.pow(2,a),d.EQ.max)}function f(a,b,c=0){if(b){let a=("string"==typeof b?b:JSON.stringify(b)).toLowerCase();if(a.includes("no credentials"))return{shouldFallback:!0,cooldownMs:d.Bm.notFound};if(a.includes("request not allowed"))return{shouldFallback:!0,cooldownMs:d.Bm.requestNotAllowed};if(a.includes("improperly formed request"))return{shouldFallback:!0,cooldownMs:d.Bm.paymentRequired};if(a.includes("rate limit")||a.includes("too many requests")||a.includes("quota exceeded")||a.includes("capacity")||a.includes("overloaded")){let a=Math.min(c+1,d.EQ.maxLevel);return{shouldFallback:!0,cooldownMs:e(c),newBackoffLevel:a}}}if(a===d.gx.UNAUTHORIZED)return{shouldFallback:!0,cooldownMs:d.Bm.unauthorized};if(a===d.gx.PAYMENT_REQUIRED||a===d.gx.FORBIDDEN)return{shouldFallback:!0,cooldownMs:d.Bm.paymentRequired};if(a===d.gx.NOT_FOUND)return{shouldFallback:!0,cooldownMs:d.Bm.notFound};if(a===d.gx.RATE_LIMITED){let a=Math.min(c+1,d.EQ.maxLevel);return{shouldFallback:!0,cooldownMs:e(c),newBackoffLevel:a}}return[d.gx.NOT_ACCEPTABLE,d.gx.REQUEST_TIMEOUT,d.gx.SERVER_ERROR,d.gx.BAD_GATEWAY,d.gx.SERVICE_UNAVAILABLE,d.gx.GATEWAY_TIMEOUT].includes(a),{shouldFallback:!0,cooldownMs:d.Bm.transient}}function g(a){if(!a)return"";let b=new Date(a).getTime()-Date.now();if(b<=0)return"reset after 0s";let c=Math.ceil(b/1e3),d=Math.floor(c/3600),e=Math.floor(c%3600/60),f=c%60,g=[];return d>0&&g.push(`${d}h`),e>0&&g.push(`${e}m`),(f>0||0===g.length)&&g.push(`${f}s`),`reset after ${g.join(" ")}`}let h="modelLock_",i=`${h}__all`;function j(a){return a?`${h}${a}`:i}function k(a,b){let c=a[j(b)]||a[i];return!!c&&new Date(c).getTime()>Date.now()}function l(a){if(!a)return null;let b=null,c=Date.now();for(let[d,e]of Object.entries(a)){if(!d.startsWith(h)||!e)continue;let a=new Date(e).getTime();a<=c||(!b||a<b)&&(b=a)}return b?new Date(b).toISOString():null}function m(a,b){return{[j(a)]:new Date(Date.now()+b).toISOString()}}},20623:(a,b,c)=>{c.d(b,{$:()=>l,M:()=>k});var d=c(14170),e=c(4841),f=c(71857),g=c(59657),h=c(86171),i=c(47370);let j={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"};function k({providerResponse:a,provider:b,model:c,sourceFormat:l,targetFormat:m,userAgent:n,body:o,stream:p,translatedBody:q,finalBody:r,requestStartTime:s,connectionId:t,apiKey:u,clientRawRequest:v,onRequestSuccess:w,reqLogger:x,toolNameMap:y,streamController:z,onStreamComplete:A}){w&&w();let B=function({provider:a,sourceFormat:b,targetFormat:c,userAgent:g,reqLogger:h,toolNameMap:i,model:j,connectionId:k,body:l,onStreamComplete:m,apiKey:n}){let o=g?.toLowerCase().includes("droid")||g?.toLowerCase().includes("codex-cli");if("codex"===a&&c===d.h.OPENAI_RESPONSES&&!o){let c;return c=b===d.h.OPENAI_RESPONSES?d.h.OPENAI_RESPONSES:b===d.h.CLAUDE?d.h.CLAUDE:b===d.h.ANTIGRAVITY||b===d.h.GEMINI||b===d.h.GEMINI_CLI?d.h.ANTIGRAVITY:d.h.OPENAI,(0,f.i5)(d.h.OPENAI_RESPONSES,c,a,h,i,j,k,l,m,n)}return(0,e.nZ)(c,b)?(0,f.i5)(c,b,a,h,i,j,k,l,m,n):(0,f.l2)(a,h,j,k,l,m,n)}({provider:b,sourceFormat:l,targetFormat:m,userAgent:n,reqLogger:x,toolNameMap:y,model:c,connectionId:t,body:o,onStreamComplete:A,apiKey:u}),C=(0,g.Jb)(a,B,z),D=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return(0,i.ox)((0,h.$R)({provider:b,model:c,connectionId:t,latency:{ttft:0,total:Date.now()-s},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,h.Fo)(o,p),providerRequest:r||q||null,providerResponse:"[Streaming - raw response not captured]",response:{content:"[Streaming in progress...]",thinking:null,type:"streaming"},status:"success"},{id:D})).catch(a=>{console.error("[RequestDetail] Failed to save streaming request:",a.message)}),{success:!0,response:new Response(C,{headers:j})}}function l({provider:a,model:b,connectionId:c,apiKey:d,requestStartTime:e,body:f,stream:g,finalBody:j,translatedBody:k,clientRawRequest:m}){let n=`${Date.now()}-${Math.random().toString(36).slice(2,11)}`;return{onStreamComplete:(l,o,p)=>{let q={ttft:p?p-e:Date.now()-e,total:Date.now()-e},r=l?.content||"[Empty streaming response]",s=l?.thinking||null;(0,i.ox)((0,h.$R)({provider:a,model:b,connectionId:c,latency:q,tokens:o||{prompt_tokens:0,completion_tokens:0},request:(0,h.Fo)(f,g),providerRequest:j||k||null,providerResponse:r,response:{content:r,thinking:s,type:"streaming"},status:"success"},{id:n})).catch(a=>{console.error("[RequestDetail] Failed to update streaming content:",a.message)}),(0,h.qr)({provider:a,model:b,tokens:o,connectionId:c,apiKey:d,endpoint:m?.endpoint,label:"STREAM USAGE"})},streamDetailId:n}}},27349:(a,b,c)=>{c.d(b,{c:()=>i});var d=c(57647),e=c(4841),f=c(14170),g=c(41004),h=c(71857);function i(a,b,c="",e=!1){if(!c.includes("claude-cli")||!a.messages?.length)return null;let f=a.messages,h=a=>"string"==typeof a?a:Array.isArray(a)?a.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"",j=!1,m=!1,n=f[f.length-1];if(n?.role==="assistant"&&n.content?.[0]?.text==="{"&&(j=!0),j||"Warmup"===h(f[0]?.content)&&(j=!0),j||1!==f.length||f[0]?.role!=="user"||"count"===h(f[0]?.content)&&(j=!0),!j&&g.C8?.length){let a=f.filter(a=>"user"===a.role).map(a=>h(a.content)).join(" ");g.C8.some(b=>a.includes(b))&&(j=!0)}if(!j&&e){let b=f.find(a=>"system"===a.role),c=h(b?.content),d=Array.isArray(a.system)?a.system.filter(a=>"text"===a.type).map(a=>a.text).join(" "):"string"==typeof a.system?a.system:"";(c||d).includes("isNewTopic")&&(j=!0,m=!0)}if(!j)return null;let o=(0,d.Tz)(a),p=!1!==a.stream;if(m){let a=f.find(a=>"user"===a.role),c=JSON.stringify({isNewTopic:!0,title:h(a?.content).trim().split(/\s+/).slice(0,3).join(" ")});return p?l(o,b,c):k(o,b,c)}return p?l(o,b):k(o,b)}function j(a,b="CLI Command Execution: Clear Terminal"){return{id:`chatcmpl-${Date.now()}`,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:a,choices:[{index:0,message:{role:"assistant",content:b},finish_reason:"stop"}],usage:{prompt_tokens:1,completion_tokens:1,total_tokens:2}}}function k(a,b,c){let d=j(b,c);if(a===f.h.OPENAI)return{success:!0,response:new Response(JSON.stringify(d),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})};let g=(0,e.Ws)(a);g.model=b;let h=m(d),i=[];for(let b of h){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);c?.length>0&&i.push(...c)}let k=(0,e.Y8)(f.h.OPENAI,a,null,g);return k?.length>0&&i.push(...k),{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}(i,a)),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}function l(a,b,c){let d=j(b,c),g=(0,e.Ws)(a);g.model=b;let i=m(d),k=[];for(let b of i){let c=(0,e.Y8)(f.h.OPENAI,a,b,g);if(c?.length>0)for(let b of c)k.push((0,h.v8)(b,a))}let l=(0,e.Y8)(f.h.OPENAI,a,null,g);if(l?.length>0)for(let b of l)k.push((0,h.v8)(b,a));return k.push("data: [DONE]\n\n"),{success:!0,response:new Response(k.join(""),{headers:{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","Access-Control-Allow-Origin":"*"}})}}function m(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}]}},43659:(a,b,c)=>{c.d(b,{A1:()=>g,lR:()=>i,wO:()=>h,yj:()=>e,zL:()=>f});var d=c(41004);function e(a,b){let c;return new Response(JSON.stringify((c=d.LY[a]||(a>=500?{type:"server_error",code:"internal_server_error"}:{type:"invalid_request_error",code:""}),{error:{message:b||d.O[a]||"An error occurred",type:c.type,code:c.code}})),{status:a,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}async function f(a,b=null){let c="",e=null;try{let b=await a.text();try{let a=JSON.parse(b);c=a.error?.message||a.message||a.error||b}catch{c=b}}catch{c=`Upstream error: ${a.status}`}let g=("string"==typeof c?c:JSON.stringify(c))||d.O[a.status]||`Upstream error: ${a.status}`;return"antigravity"===b&&429===a.status&&(e=function(a){if("string"!=typeof a)return null;let b=a.match(/reset after (\d+h)?(\d+m)?(\d+s)?/i);if(!b)return null;let c=0;return b[1]&&(c+=60*parseInt(b[1])*6e4),b[2]&&(c+=60*parseInt(b[2])*1e3),b[3]&&(c+=1e3*parseInt(b[3])),c>0?c:null}(g)),{statusCode:a.status,message:g,retryAfterMs:e}}function g(a,b,c=null){let d={success:!1,status:a,error:b,response:e(a,b)};return c&&(d.retryAfterMs=c),d}function h(a,b,c,d){let e=Math.max(Math.ceil((new Date(c).getTime()-Date.now())/1e3),1);return new Response(JSON.stringify({error:{message:`${b} (${d})`}}),{status:a,headers:{"Content-Type":"application/json","Retry-After":String(e)}})}function i(a,b,c,d){let e=d||a.code||"FETCH_FAILED",f=a.message||"Unknown error";return`[${e}]: ${f}`}},48895:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$B:()=>e.$B,SB:()=>g.SB}),c(39609),c(35024),c(75924),c(41004),c(57247),c(14170),c(4841),c(57647),c(40669),c(12557);var e=c(8590),f=c(92500),g=c(55330);c(43659),c(71857);var h=a([f,g]);[f,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},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:()=>Promise.resolve()})}},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),e.cancel().catch(()=>{}),f.abort().catch(()=>{}),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()),i=String(a.getMilliseconds()).padStart(3,"0");return`${c}${d}${e}_${f}${g}${h}_${i}`}(),e=(c||"unknown").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:()=>m,l2:()=>n,lm:()=>g.lm,v8:()=>h.v8});var d=c(4841),e=c(14170),f=c(47370),g=c(73483),h=c(9024);let i=new TextEncoder,j="translate",k="passthrough";function l(a={}){let{mode:b=j,targetFormat:c,sourceFormat:m,provider:n=null,reqLogger:o=null,toolNameMap:p=null,model:q=null,connectionId:r=null,body:s=null,onStreamComplete:t=null,apiKey:u=null}=a,v="",w=null,x=new TextDecoder("utf-8",{fatal:!1}),y=b===j?{...(0,d.Ws)(m),provider:n,toolNameMap:p,model:q}:null,z=0,A="",B="",C=null;return new TransformStream({transform(a,f){C||(C=Date.now());let j=x.decode(a,{stream:!0});v+=j,o?.appendProviderChunk?.(j);let l=v.split("\n");for(let a of(v=l.pop()||"",l)){let j=a.trim();if(b===k){let b,c=!1;if(j.startsWith("data:")&&"[DONE]"!==j.slice(5).trim())try{let a=JSON.parse(j.slice(5).trim()),d=(0,h.A4)(a),f=!1;if(void 0!==a.choices&&(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 i=a.choices?.[0]?.delta,k=i?.content,l=i?.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&&(w=m);let n=a.choices?.[0]?.finish_reason;if(n&&!(0,g.Gh)(a.usage)){let d=(0,g.OF)(s,z,e.h.OPENAI);a.usage=(0,g.WL)(d,e.h.OPENAI),b=`data: ${JSON.stringify(a)}
2
2
  `,w=d,c=!0}else if(n&&w){let d=(0,g.O9)(w);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"),o?.appendConvertedChunk?.(b),f.enqueue(i.encode(b));continue}if(!j)continue;let l=(0,h.tV)(j,c);if(!l)continue;if(l&&l.done&&c!==e.h.OLLAMA){let a="data: [DONE]\n\n";o?.appendConvertedChunk?.(a),f.enqueue(i.encode(a));continue}if(l.delta?.text&&(z+=l.delta.text.length,A+=l.delta.text),l.delta?.thinking&&(z+=l.delta.thinking.length,B+=l.delta.thinking),l.choices?.[0]?.delta?.content&&(z+=l.choices[0].delta.content.length,A+=l.choices[0].delta.content),l.choices?.[0]?.delta?.reasoning_content&&(z+=l.choices[0].delta.reasoning_content.length,B+=l.choices[0].delta.reasoning_content),l.candidates?.[0]?.content?.parts)for(let a of l.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(z+=a.text.length,!0===a.thought?B+=a.text:A+=a.text);let n=(0,g.f5)(l);n&&(y.usage=n);let p=(0,d.Y8)(c,m,l,y);if(p?._openaiIntermediate)for(let a of p._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(p?.length>0)for(let a of p){if(!(0,h.c2)(a,m))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)(s,z,m);a.usage=(0,g.WL)(b,m),y.usage=b}else if(y.finishReason&&b&&y.usage){let b=(0,g.O9)(y.usage);a.usage=(0,g.WL)(b,m)}let c=(0,h.v8)(a,m);o?.appendConvertedChunk?.(c),f.enqueue(i.encode(c))}}},flush(a){(0,f.uw)(q,n,r,!1);try{let j=x.decode();if(j&&(v+=j),b===k){if(v){let b=v;v.startsWith("data:")&&!v.startsWith("data: ")&&(b="data: "+v.slice(5)),o?.appendConvertedChunk?.(b),a.enqueue(i.encode(b))}!(0,g.Gh)(w)&&z>0&&(w=(0,g.OF)(s,z,e.h.OPENAI)),(0,g.Gh)(w)?(0,g.IF)(n,w,q,r,u):(0,f.E5)({model:q,provider:n,connectionId:r,tokens:null,status:"200 OK"}).catch(()=>{});let b="data: [DONE]\n\n";o?.appendConvertedChunk?.(b),a.enqueue(i.encode(b)),t&&t({content:A,thinking:B},w,C);return}if(v.trim()){let b=(0,h.tV)(v.trim());if(b&&!b.done){let f=(0,d.Y8)(c,m,b,y);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){let c=(0,h.v8)(b,m);o?.appendConvertedChunk?.(c),a.enqueue(i.encode(c))}}}let l=(0,d.Y8)(c,m,null,y);if(l?._openaiIntermediate)for(let a of l._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(l?.length>0)for(let b of l){let c=(0,h.v8)(b,m);o?.appendConvertedChunk?.(c),a.enqueue(i.encode(c))}let p="data: [DONE]\n\n";o?.appendConvertedChunk?.(p),a.enqueue(i.encode(p)),!(0,g.Gh)(y?.usage)&&z>0&&(y.usage=(0,g.OF)(s,z,m)),(0,g.Gh)(y?.usage)?(0,g.IF)(y.provider||c,y.usage,q,r,u):(0,f.E5)({model:q,provider:n,connectionId:r,tokens:null,status:"200 OK"}).catch(()=>{}),t&&t({content:A,thinking:B},y?.usage,C)}catch(a){console.log("Error in flush:",a)}}})}function m(a,b,c=null,d=null,e=null,f=null,g=null,h=null,i=null,k=null){return l({mode:j,targetFormat:a,sourceFormat:b,provider:c,reqLogger:d,toolNameMap:e,model:f,connectionId:g,body:h,onStreamComplete:i,apiKey:k})}function n(a=null,b=null,c=null,d=null,e=null,f=null,g=null){return l({mode:k,provider:a,reqLogger:b,model:c,connectionId:d,body:e,onStreamComplete:f,apiKey:g})}},81626:(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,{I:()=>n,F:()=>m});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}}var g=c(43659),h=c(41004),i=c(14170),j=c(86171),k=c(47370);function l(a){if(!a?.content||!Array.isArray(a.content))return"";let b=a.content.find(a=>"output_text"===a.type);if("string"==typeof b?.text)return b.text;let c=a.content.find(a=>"string"==typeof a.text);return"string"==typeof c?.text?c.text:""}function m(a,b){let c=[];for(let b of String(a||"").split("\n")){let a=b.trim();if(!a.startsWith("data:"))continue;let d=a.slice(5).trim();if(d&&"[DONE]"!==d)try{c.push(JSON.parse(d))}catch{}}if(0===c.length)return null;let d=c[0],e=[],f=[],g=new Map,h="stop",i=null;for(let a of c){let b=a?.choices?.[0],c=b?.delta||{};if("string"==typeof c.content&&c.content.length>0&&e.push(c.content),"string"==typeof c.reasoning_content&&c.reasoning_content.length>0&&f.push(c.reasoning_content),b?.finish_reason&&(h=b.finish_reason),a?.usage&&"object"==typeof a.usage&&(i=a.usage),Array.isArray(c.tool_calls))for(let a of c.tool_calls){let b=a.index??0;g.has(b)||g.set(b,{id:a.id||"",type:"function",function:{name:"",arguments:""}});let c=g.get(b);a.id&&(c.id=a.id),a.function?.name&&(c.function.name+=a.function.name),a.function?.arguments&&(c.function.arguments+=a.function.arguments)}}let j={role:"assistant",content:e.join("")||(g.size>0?null:"")};f.length>0&&(j.reasoning_content=f.join("")),g.size>0&&(j.tool_calls=[...g.entries()].sort((a,b)=>a[0]-b[0]).map(([,a])=>a));let k={id:d.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:d.created||Math.floor(Date.now()/1e3),model:d.model||b||"unknown",choices:[{index:0,message:j,finish_reason:h}]};return i&&(k.usage=i),k}async function n({providerResponse:a,sourceFormat:b,provider:c,model:d,body:e,stream:o,translatedBody:p,finalBody:q,requestStartTime:r,connectionId:s,apiKey:t,clientRawRequest:u,onRequestSuccess:v,trackDone:w,appendLog:x}){let y=a.headers.get("content-type")||"";if(!(y.includes("text/event-stream")||""===y&&"codex"===c))return null;w();let z={provider:c,model:d,connectionId:s,request:(0,j.Fo)(e,o),providerRequest:q||p||null};if("codex"===c||b===i.h.OPENAI_RESPONSES)try{let e,g=await f(a.body);v&&await v();let h=g.usage||{};x({tokens:h,status:"200 OK"}),(0,j.qr)({provider:c,model:d,tokens:h,connectionId:s,apiKey:t,endpoint:u?.endpoint});let{msgItem:m,textContent:n}=function(a){if(!Array.isArray(a))return{msgItem:null,textContent:null};let b=a.filter(a=>a?.type==="message");if(0===b.length)return{msgItem:null,textContent:null};for(let a=b.length-1;a>=0;a--){let c=l(b[a]);if(c.length>0)return{msgItem:b[a],textContent:c}}let c=b[b.length-1];return{msgItem:c,textContent:l(c)}}(g.output),o=Date.now()-r;if((0,k.ox)((0,j.$R)({...z,latency:{ttft:o,total:o},tokens:{prompt_tokens:h.input_tokens||0,completion_tokens:h.output_tokens||0},response:{content:n,thinking:null,finish_reason:g.status||"unknown"},status:"success"},{endpoint:u?.endpoint||null})).catch(()=>{}),b===i.h.OPENAI_RESPONSES)return{success:!0,response:new Response(JSON.stringify(g),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})};let p=h.input_tokens||0,q=h.output_tokens||0,w=(g.output||[]).filter(a=>"function_call"===a.type).map((a,b)=>({id:a.call_id||`call_${a.name}_${Date.now()}_${b}`,type:"function",function:{name:a.name,arguments:"string"==typeof a.arguments?a.arguments:JSON.stringify(a.arguments||{})}})),y=w.length>0;if(b===i.h.ANTIGRAVITY||b===i.h.GEMINI||b===i.h.GEMINI_CLI)e={response:{candidates:[{content:{role:"model",parts:[{text:n||""}]},finishReason:"STOP",index:0}],usageMetadata:{promptTokenCount:p,candidatesTokenCount:q,totalTokenCount:p+q},modelVersion:d,responseId:g.id||`resp_${Date.now()}`}};else{let a={role:"assistant",content:n||(y?null:"")};y&&(a.tool_calls=w);let b=y?"tool_calls":"completed"===g.status?"stop":g.status||"stop";e={id:g.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:g.created_at||Math.floor(Date.now()/1e3),model:g.model||d,choices:[{index:0,message:a,finish_reason:b}],usage:{prompt_tokens:p,completion_tokens:q,total_tokens:p+q}}}return{success:!0,response:new Response(JSON.stringify(e),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Responses API SSE→JSON failed:",a),(0,g.A1)(h.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}try{let b=await a.text(),e=m(b,d);if(!e)return(0,g.A1)(h.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");v&&await v();let f=e.usage||{};x({tokens:f,status:"200 OK"}),(0,j.qr)({provider:c,model:d,tokens:f,connectionId:s,apiKey:t,endpoint:u?.endpoint});let i=Date.now()-r;if((0,k.ox)((0,j.$R)({...z,latency:{ttft:i,total:i},tokens:f,response:{content:e.choices?.[0]?.message?.content||null,thinking:e.choices?.[0]?.message?.reasoning_content||null,finish_reason:e.choices?.[0]?.finish_reason||"unknown"},status:"success"},{endpoint:u?.endpoint||null})).catch(()=>{}),e?.choices)for(let a of e.choices)a?.message&&delete a.message.reasoning_content;return{success:!0,response:new Response(JSON.stringify(e),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Chat Completions SSE→JSON failed:",a),(0,g.A1)(h.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}}},86171:(a,b,c)=>{c.d(b,{$R:()=>i,Fo:()=>g,MK:()=>h,qr:()=>j});var d=c(47370),e=c(71857);let f=["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"];function g(a,b){let c={messages:a.messages||[],model:a.model,stream:b};for(let b of f)void 0!==a[b]&&(c[b]=a[b]);return c}function h(a){return a&&"object"==typeof a?a.usage?.input_tokens!==void 0?{prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,cache_read_input_tokens:a.usage.cache_read_input_tokens,cache_creation_input_tokens:a.usage.cache_creation_input_tokens}:a.usage?.prompt_tokens!==void 0?{prompt_tokens:a.usage.prompt_tokens||0,completion_tokens:a.usage.completion_tokens||0,cached_tokens:a.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:a.usage.completion_tokens_details?.reasoning_tokens}:a.usageMetadata?{prompt_tokens:a.usageMetadata.promptTokenCount||0,completion_tokens:a.usageMetadata.candidatesTokenCount||0,reasoning_tokens:a.usageMetadata.thoughtsTokenCount}:null:null}function i(a,b={}){return{provider:a.provider||"unknown",model:a.model||"unknown",connectionId:a.connectionId||void 0,timestamp:new Date().toISOString(),latency:a.latency||{ttft:0,total:0},tokens:a.tokens||{prompt_tokens:0,completion_tokens:0},request:a.request,providerRequest:a.providerRequest||null,providerResponse:a.providerResponse||null,response:a.response||{},status:a.status||"success",...b}}function j({provider:a,model:b,tokens:c,connectionId:f,apiKey:g,endpoint:h,label:i="USAGE"}){if(!c||"object"!=typeof c)return;let k=c.input_tokens??c.prompt_tokens??0,l=c.output_tokens??c.completion_tokens??0;if(0===k&&0===l)return;let m=new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),n=f?` | account=${f.slice(0,8)}...`:"";console.log(`${e.lm.green}[${m}] 📊 [${i}] ${a.toUpperCase()} | in=${k} | out=${l}${n}${e.lm.reset}`);let o={prompt_tokens:c.prompt_tokens??c.input_tokens??0,completion_tokens:c.completion_tokens??c.output_tokens??0};(0,d.sZ)({provider:a||"unknown",model:b||"unknown",tokens:o,timestamp:new Date().toISOString(),connectionId:f||void 0,apiKey:g||void 0,endpoint:h||null}).catch(()=>{})}},92500:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{w:()=>x});var e=c(57647),f=c(4841),g=c(14170),h=c(71857),i=c(59657),j=c(8590),k=c(71336),l=c(57247),m=c(43659),n=c(41004),o=c(27349),p=c(47370),q=c(55330),r=c(86171),s=c(81626),t=c(5016),u=c(20623),v=c(324),w=a([q]);async function x({body:a,modelInfo:b,credentials:c,log:d,onCredentialsRefreshed:w,onRequestSuccess:y,onDisconnect:z,clientRawRequest:A,connectionId:B,userAgent:C,apiKey:D,ccFilterNaming:E,sourceFormatOverride:F}){let G,H,I,J,K,L,{provider:M,model:N}=b,O=Date.now(),P=F||(0,e.Tz)(a),Q=(0,o.c)(a,N,C,E);if(Q)return Q;let R=l.Xg[M]||M,S=(0,l.ux)(R,N)||(0,e.jJ)(M),T=(0,l.cY)(R,N),U=!0===a.stream||P===g.h.ANTIGRAVITY||P===g.h.GEMINI||P===g.h.GEMINI_CLI,V="openai"===M||"codex"===M,W=!!V||!1!==a.stream,X=A?.headers?.accept||"",Y=X.includes("application/json"),Z=X.includes("text/event-stream");Y&&!Z&&!0!==a.stream&&(W=!1);let $=await (0,k.q7)(P,S,N);A&&$.logClientRawRequest(A.endpoint,A.body,A.headers),$.logRawRequest(a),d?.debug?.("FORMAT",`${P} → ${S} | stream=${W}`);let _=(0,v.J)(A?.headers||{},a);if((0,v.Q)(_,M))d?.debug?.("PASSTHROUGH",`${_} → ${M} | native lossless`),G={...a,model:N};else{if(!(G=(0,f.GH)(P,S,N,a,W,c,M,$,T,B)))return(0,p.uw)(N,M,B,!1,!0),(0,m.A1)(n.gx.BAD_REQUEST,`Failed to translate request for ${P} → ${S}`);H=G._toolNameMap,delete G._toolNameMap,G.model=N}let aa=(0,q.SB)(M);(0,p.uw)(N,M,B,!0),(0,p.E5)({model:N,provider:M,connectionId:B,status:"PENDING"}).catch(()=>{});let ab=G.messages?.length||G.input?.length||G.contents?.length||G.request?.contents?.length||0;d?.debug?.("REQUEST",`${M.toUpperCase()} | ${N} | ${ab} msgs`);let ac=(0,i.jd)({onDisconnect:a=>{(0,p.uw)(N,M,B,!1),z&&z(a)},onError:()=>(0,p.uw)(N,M,B,!1),log:d,provider:M,model:N}),ad={connectionProxyEnabled:c?.providerSpecificData?.connectionProxyEnabled===!0,connectionProxyUrl:c?.providerSpecificData?.connectionProxyUrl||"",connectionNoProxy:c?.providerSpecificData?.connectionNoProxy||""};if(ad.connectionProxyEnabled&&ad.connectionProxyUrl){let a=ad.connectionProxyUrl;try{let b=new URL(ad.connectionProxyUrl),c=b.hostname||"",d=b.port?`:${b.port}`:"",e=b.protocol||"http:";a=`${e}//${c}${d}`}catch{}let b=c?.providerSpecificData?.connectionProxyPoolId||"none",e=c?.connectionName||c?.connectionId||"unknown";d?.info?.("PROXY",`${M.toUpperCase()} | ${N} | conn=${e} | pool=${b} | url=${a}`)}if(ad.connectionProxyEnabled&&ad.connectionNoProxy){let a=c?.connectionName||c?.connectionId||"unknown";d?.debug?.("PROXY",`${M.toUpperCase()} | ${N} | conn=${a} | no_proxy=${ad.connectionNoProxy}`)}try{let a=await aa.execute({model:N,body:G,stream:W,credentials:c,signal:ac.signal,log:d,proxyOptions:ad});I=a.response,J=a.url,K=a.headers,L=a.transformedBody,$.logTargetRequest(J,K,L)}catch(c){if((0,p.uw)(N,M,B,!1,!0),(0,p.E5)({model:N,provider:M,connectionId:B,status:`FAILED ${"AbortError"===c.name?499:n.gx.BAD_GATEWAY}`}).catch(()=>{}),(0,p.ox)((0,r.$R)({provider:M,model:N,connectionId:B,latency:{ttft:0,total:Date.now()-O},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,r.Fo)(a,W),providerRequest:G||null,response:{error:c.message||String(c),status:"AbortError"===c.name?499:502,thinking:null},status:"error"})).catch(()=>{}),"AbortError"===c.name)return ac.handleError(c),(0,m.A1)(499,"Request aborted");let b=(0,m.lR)(c,M,N,n.gx.BAD_GATEWAY);return console.log(`${h.lm.red}[ERROR] ${b}${h.lm.reset}`),(0,m.A1)(n.gx.BAD_GATEWAY,b)}if(I.status===n.gx.UNAUTHORIZED||I.status===n.gx.FORBIDDEN)try{let a=await (0,j.qZ)(()=>aa.refreshCredentials(c,d),3,d);if(a?.accessToken||a?.copilotToken){if(d?.info?.("TOKEN",`${M.toUpperCase()} | refreshed`),Object.assign(c,a),w)try{await w(a)}catch(a){d?.warn?.("TOKEN",`onCredentialsRefreshed failed: ${a.message}`)}try{let a=await aa.execute({model:N,body:G,stream:W,credentials:c,signal:ac.signal,log:d,proxyOptions:ad});a.response.ok&&(I=a.response,J=a.url)}catch{d?.warn?.("TOKEN",`${M.toUpperCase()} | retry after refresh failed`)}}else d?.warn?.("TOKEN",`${M.toUpperCase()} | refresh failed`)}catch(a){d?.warn?.("TOKEN",`${M.toUpperCase()} | refresh threw: ${a.message}`)}if(!I.ok){(0,p.uw)(N,M,B,!1,!0);let{statusCode:b,message:c,retryAfterMs:e}=await (0,m.zL)(I,M);(0,p.E5)({model:N,provider:M,connectionId:B,status:`FAILED ${b}`}).catch(()=>{}),(0,p.ox)((0,r.$R)({provider:M,model:N,connectionId:B,latency:{ttft:0,total:Date.now()-O},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,r.Fo)(a,W),providerRequest:L||G||null,response:{error:c,status:b,thinking:null},status:"error"})).catch(()=>{});let f=(0,m.lR)(Error(c),M,N,b);return console.log(`${h.lm.red}[ERROR] ${f}${h.lm.reset}`),e&&"antigravity"===M&&d?.debug?.("RETRY",`Antigravity quota reset in ${Math.ceil(e/1e3)}s`),$.logError(Error(c),L||G),(0,m.A1)(b,f,e)}let ae={provider:M,model:N,body:a,stream:W,translatedBody:G,finalBody:L,requestStartTime:O,connectionId:B,apiKey:D,clientRawRequest:A,onRequestSuccess:y},af=a=>(0,p.E5)({model:N,provider:M,connectionId:B,...a}).catch(()=>{}),ag=()=>(0,p.uw)(N,M,B,!1);if(!U&&V){let a=await (0,s.I)({...ae,providerResponse:I,sourceFormat:P,trackDone:ag,appendLog:af});if(a)return ac.handleComplete(),a}if(!W){let a=await (0,t.N)({...ae,providerResponse:I,sourceFormat:P,targetFormat:S,reqLogger:$,trackDone:ag,appendLog:af});return ac.handleComplete(),a}let{onStreamComplete:ah}=(0,u.$)({...ae});return(0,u.M)({...ae,providerResponse:I,sourceFormat:P,targetFormat:S,userAgent:C,reqLogger:$,toolNameMap:H,streamController:ac,onStreamComplete:ah})}q=(w.then?(await w)():w)[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"),o?.appendConvertedChunk?.(b),f.enqueue(i.encode(b));continue}if(!j)continue;let l=(0,h.tV)(j,c);if(!l)continue;if(l&&l.done&&c!==e.h.OLLAMA){let a="data: [DONE]\n\n";o?.appendConvertedChunk?.(a),f.enqueue(i.encode(a));continue}if(l.delta?.text&&(z+=l.delta.text.length,A+=l.delta.text),l.delta?.thinking&&(z+=l.delta.thinking.length,B+=l.delta.thinking),l.choices?.[0]?.delta?.content&&(z+=l.choices[0].delta.content.length,A+=l.choices[0].delta.content),l.choices?.[0]?.delta?.reasoning_content&&(z+=l.choices[0].delta.reasoning_content.length,B+=l.choices[0].delta.reasoning_content),l.candidates?.[0]?.content?.parts)for(let a of l.candidates[0].content.parts)a.text&&"string"==typeof a.text&&(z+=a.text.length,!0===a.thought?B+=a.text:A+=a.text);let n=(0,g.f5)(l);n&&(y.usage=n);let p=(0,d.Y8)(c,m,l,y);if(p?._openaiIntermediate)for(let a of p._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(p?.length>0)for(let a of p){if(!(0,h.c2)(a,m))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)(s,z,m);a.usage=(0,g.WL)(b,m),y.usage=b}else if(y.finishReason&&b&&y.usage){let b=(0,g.O9)(y.usage);a.usage=(0,g.WL)(b,m)}let c=(0,h.v8)(a,m);o?.appendConvertedChunk?.(c),f.enqueue(i.encode(c))}}},flush(a){(0,f.uw)(q,n,r,!1);try{let j=x.decode();if(j&&(v+=j),b===k){if(v){let b=v;v.startsWith("data:")&&!v.startsWith("data: ")&&(b="data: "+v.slice(5)),o?.appendConvertedChunk?.(b),a.enqueue(i.encode(b))}!(0,g.Gh)(w)&&z>0&&(w=(0,g.OF)(s,z,e.h.OPENAI)),(0,g.Gh)(w)?(0,g.IF)(n,w,q,r,u):(0,f.E5)({model:q,provider:n,connectionId:r,tokens:null,status:"200 OK"}).catch(()=>{});let b="data: [DONE]\n\n";o?.appendConvertedChunk?.(b),a.enqueue(i.encode(b)),t&&t({content:A,thinking:B},w,C);return}if(v.trim()){let b=(0,h.tV)(v.trim());if(b&&!b.done){let f=(0,d.Y8)(c,m,b,y);if(f?._openaiIntermediate)for(let a of f._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(f?.length>0)for(let b of f){let c=(0,h.v8)(b,m);o?.appendConvertedChunk?.(c),a.enqueue(i.encode(c))}}}let l=(0,d.Y8)(c,m,null,y);if(l?._openaiIntermediate)for(let a of l._openaiIntermediate){let b=(0,h.v8)(a,e.h.OPENAI);o?.appendOpenAIChunk?.(b)}if(l?.length>0)for(let b of l){let c=(0,h.v8)(b,m);o?.appendConvertedChunk?.(c),a.enqueue(i.encode(c))}let p="data: [DONE]\n\n";o?.appendConvertedChunk?.(p),a.enqueue(i.encode(p)),!(0,g.Gh)(y?.usage)&&z>0&&(y.usage=(0,g.OF)(s,z,m)),(0,g.Gh)(y?.usage)?(0,g.IF)(y.provider||c,y.usage,q,r,u):(0,f.E5)({model:q,provider:n,connectionId:r,tokens:null,status:"200 OK"}).catch(()=>{}),t&&t({content:A,thinking:B},y?.usage,C)}catch(a){console.log("Error in flush:",a)}}})}function m(a,b,c=null,d=null,e=null,f=null,g=null,h=null,i=null,k=null){return l({mode:j,targetFormat:a,sourceFormat:b,provider:c,reqLogger:d,toolNameMap:e,model:f,connectionId:g,body:h,onStreamComplete:i,apiKey:k})}function n(a=null,b=null,c=null,d=null,e=null,f=null,g=null){return l({mode:k,provider:a,reqLogger:b,model:c,connectionId:d,body:e,onStreamComplete:f,apiKey:g})}},81626:(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,{I:()=>n,F:()=>m});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}}var g=c(43659),h=c(41004),i=c(14170),j=c(86171),k=c(47370);function l(a){if(!a?.content||!Array.isArray(a.content))return"";let b=a.content.find(a=>"output_text"===a.type);if("string"==typeof b?.text)return b.text;let c=a.content.find(a=>"string"==typeof a.text);return"string"==typeof c?.text?c.text:""}function m(a,b){let c=[];for(let b of String(a||"").split("\n")){let a=b.trim();if(!a.startsWith("data:"))continue;let d=a.slice(5).trim();if(d&&"[DONE]"!==d)try{c.push(JSON.parse(d))}catch{}}if(0===c.length)return null;let d=c[0],e=[],f=[],g=new Map,h="stop",i=null;for(let a of c){let b=a?.choices?.[0],c=b?.delta||{};if("string"==typeof c.content&&c.content.length>0&&e.push(c.content),"string"==typeof c.reasoning_content&&c.reasoning_content.length>0&&f.push(c.reasoning_content),b?.finish_reason&&(h=b.finish_reason),a?.usage&&"object"==typeof a.usage&&(i=a.usage),Array.isArray(c.tool_calls))for(let a of c.tool_calls){let b=a.index??0;g.has(b)||g.set(b,{id:a.id||"",type:"function",function:{name:"",arguments:""}});let c=g.get(b);a.id&&(c.id=a.id),a.function?.name&&(c.function.name+=a.function.name),a.function?.arguments&&(c.function.arguments+=a.function.arguments)}}let j={role:"assistant",content:e.join("")||(g.size>0?null:"")};f.length>0&&(j.reasoning_content=f.join("")),g.size>0&&(j.tool_calls=[...g.entries()].sort((a,b)=>a[0]-b[0]).map(([,a])=>a));let k={id:d.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:d.created||Math.floor(Date.now()/1e3),model:d.model||b||"unknown",choices:[{index:0,message:j,finish_reason:h}]};return i&&(k.usage=i),k}async function n({providerResponse:a,sourceFormat:b,provider:c,model:d,body:e,stream:o,translatedBody:p,finalBody:q,requestStartTime:r,connectionId:s,apiKey:t,clientRawRequest:u,onRequestSuccess:v,trackDone:w,appendLog:x}){let y=a.headers.get("content-type")||"";if(!(y.includes("text/event-stream")||""===y&&"codex"===c))return null;w();let z={provider:c,model:d,connectionId:s,request:(0,j.Fo)(e,o),providerRequest:q||p||null};if("codex"===c||b===i.h.OPENAI_RESPONSES)try{let e,g=await f(a.body);v&&await v();let h=g.usage||{};x({tokens:h,status:"200 OK"}),(0,j.qr)({provider:c,model:d,tokens:h,connectionId:s,apiKey:t,endpoint:u?.endpoint});let{msgItem:m,textContent:n}=function(a){if(!Array.isArray(a))return{msgItem:null,textContent:null};let b=a.filter(a=>a?.type==="message");if(0===b.length)return{msgItem:null,textContent:null};for(let a=b.length-1;a>=0;a--){let c=l(b[a]);if(c.length>0)return{msgItem:b[a],textContent:c}}let c=b[b.length-1];return{msgItem:c,textContent:l(c)}}(g.output),o=Date.now()-r;if((0,k.ox)((0,j.$R)({...z,latency:{ttft:o,total:o},tokens:{prompt_tokens:h.input_tokens||0,completion_tokens:h.output_tokens||0},response:{content:n,thinking:null,finish_reason:g.status||"unknown"},status:"success"},{endpoint:u?.endpoint||null})).catch(()=>{}),b===i.h.OPENAI_RESPONSES)return{success:!0,response:new Response(JSON.stringify(g),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})};let p=h.input_tokens||0,q=h.output_tokens||0,w=(g.output||[]).filter(a=>"function_call"===a.type).map((a,b)=>({id:a.call_id||`call_${a.name}_${Date.now()}_${b}`,type:"function",function:{name:a.name,arguments:"string"==typeof a.arguments?a.arguments:JSON.stringify(a.arguments||{})}})),y=w.length>0;if(b===i.h.ANTIGRAVITY||b===i.h.GEMINI||b===i.h.GEMINI_CLI)e={response:{candidates:[{content:{role:"model",parts:[{text:n||""}]},finishReason:"STOP",index:0}],usageMetadata:{promptTokenCount:p,candidatesTokenCount:q,totalTokenCount:p+q},modelVersion:d,responseId:g.id||`resp_${Date.now()}`}};else{let a={role:"assistant",content:n||(y?null:"")};y&&(a.tool_calls=w);let b=y?"tool_calls":"completed"===g.status?"stop":g.status||"stop";e={id:g.id||`chatcmpl-${Date.now()}`,object:"chat.completion",created:g.created_at||Math.floor(Date.now()/1e3),model:g.model||d,choices:[{index:0,message:a,finish_reason:b}],usage:{prompt_tokens:p,completion_tokens:q,total_tokens:p+q}}}return{success:!0,response:new Response(JSON.stringify(e),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Responses API SSE→JSON failed:",a),(0,g.A1)(h.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}try{let b=await a.text(),e=m(b,d);if(!e)return(0,g.A1)(h.gx.BAD_GATEWAY,"Invalid SSE response for non-streaming request");v&&await v();let f=e.usage||{};x({tokens:f,status:"200 OK"}),(0,j.qr)({provider:c,model:d,tokens:f,connectionId:s,apiKey:t,endpoint:u?.endpoint});let i=Date.now()-r;if((0,k.ox)((0,j.$R)({...z,latency:{ttft:i,total:i},tokens:f,response:{content:e.choices?.[0]?.message?.content||null,thinking:e.choices?.[0]?.message?.reasoning_content||null,finish_reason:e.choices?.[0]?.finish_reason||"unknown"},status:"success"},{endpoint:u?.endpoint||null})).catch(()=>{}),e?.choices)for(let a of e.choices)a?.message?.reasoning_content&&a.message.content&&delete a.message.reasoning_content;return{success:!0,response:new Response(JSON.stringify(e),{headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}}catch(a){return console.error("[ChatCore] Chat Completions SSE→JSON failed:",a),(0,g.A1)(h.gx.BAD_GATEWAY,"Failed to convert streaming response to JSON")}}},86171:(a,b,c)=>{c.d(b,{$R:()=>i,Fo:()=>g,MK:()=>h,qr:()=>j});var d=c(47370),e=c(71857);let f=["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"];function g(a,b){let c={messages:a.messages||[],model:a.model,stream:b};for(let b of f)void 0!==a[b]&&(c[b]=a[b]);return c}function h(a){return a&&"object"==typeof a?a.usage?.input_tokens!==void 0?{prompt_tokens:a.usage.input_tokens||0,completion_tokens:a.usage.output_tokens||0,cache_read_input_tokens:a.usage.cache_read_input_tokens,cache_creation_input_tokens:a.usage.cache_creation_input_tokens}:a.usage?.prompt_tokens!==void 0?{prompt_tokens:a.usage.prompt_tokens||0,completion_tokens:a.usage.completion_tokens||0,cached_tokens:a.usage.prompt_tokens_details?.cached_tokens,reasoning_tokens:a.usage.completion_tokens_details?.reasoning_tokens}:a.usageMetadata?{prompt_tokens:a.usageMetadata.promptTokenCount||0,completion_tokens:a.usageMetadata.candidatesTokenCount||0,reasoning_tokens:a.usageMetadata.thoughtsTokenCount}:null:null}function i(a,b={}){return{provider:a.provider||"unknown",model:a.model||"unknown",connectionId:a.connectionId||void 0,timestamp:new Date().toISOString(),latency:a.latency||{ttft:0,total:0},tokens:a.tokens||{prompt_tokens:0,completion_tokens:0},request:a.request,providerRequest:a.providerRequest||null,providerResponse:a.providerResponse||null,response:a.response||{},status:a.status||"success",...b}}function j({provider:a,model:b,tokens:c,connectionId:f,apiKey:g,endpoint:h,label:i="USAGE"}){if(!c||"object"!=typeof c)return;let k=c.input_tokens??c.prompt_tokens??0,l=c.output_tokens??c.completion_tokens??0;if(0===k&&0===l)return;let m=new Date().toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),n=f?` | account=${f.slice(0,8)}...`:"";console.log(`${e.lm.green}[${m}] 📊 [${i}] ${a.toUpperCase()} | in=${k} | out=${l}${n}${e.lm.reset}`);let o={prompt_tokens:c.prompt_tokens??c.input_tokens??0,completion_tokens:c.completion_tokens??c.output_tokens??0};(0,d.sZ)({provider:a||"unknown",model:b||"unknown",tokens:o,timestamp:new Date().toISOString(),connectionId:f||void 0,apiKey:g||void 0,endpoint:h||null}).catch(()=>{})}},92500:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{w:()=>x});var e=c(57647),f=c(4841),g=c(14170),h=c(71857),i=c(59657),j=c(8590),k=c(71336),l=c(57247),m=c(43659),n=c(41004),o=c(27349),p=c(47370),q=c(55330),r=c(86171),s=c(81626),t=c(5016),u=c(20623),v=c(324),w=a([q]);async function x({body:a,modelInfo:b,credentials:c,log:d,onCredentialsRefreshed:w,onRequestSuccess:y,onDisconnect:z,clientRawRequest:A,connectionId:B,userAgent:C,apiKey:D,ccFilterNaming:E,sourceFormatOverride:F}){let G,H,I,J,K,L,{provider:M,model:N}=b,O=Date.now(),P=F||(0,e.Tz)(a),Q=(0,o.c)(a,N,C,E);if(Q)return Q;let R=l.Xg[M]||M,S=(0,l.ux)(R,N)||(0,e.jJ)(M),T=(0,l.cY)(R,N),U=!0===a.stream||P===g.h.ANTIGRAVITY||P===g.h.GEMINI||P===g.h.GEMINI_CLI,V="openai"===M||"codex"===M,W=!!V||!1!==a.stream,X=A?.headers?.accept||"",Y=X.includes("application/json"),Z=X.includes("text/event-stream");Y&&!Z&&!0!==a.stream&&(W=!1);let $=await (0,k.q7)(P,S,N);A&&$.logClientRawRequest(A.endpoint,A.body,A.headers),$.logRawRequest(a),d?.debug?.("FORMAT",`${P} → ${S} | stream=${W}`);let _=(0,v.J)(A?.headers||{},a);if((0,v.Q)(_,M))d?.debug?.("PASSTHROUGH",`${_} → ${M} | native lossless`),G={...a,model:N};else{if(!(G=(0,f.GH)(P,S,N,a,W,c,M,$,T,B)))return(0,p.uw)(N,M,B,!1,!0),(0,m.A1)(n.gx.BAD_REQUEST,`Failed to translate request for ${P} → ${S}`);H=G._toolNameMap,delete G._toolNameMap,G.model=N}let aa=(0,q.SB)(M);(0,p.uw)(N,M,B,!0),(0,p.E5)({model:N,provider:M,connectionId:B,status:"PENDING"}).catch(()=>{});let ab=G.messages?.length||G.input?.length||G.contents?.length||G.request?.contents?.length||0;d?.debug?.("REQUEST",`${M.toUpperCase()} | ${N} | ${ab} msgs`);let ac=(0,i.jd)({onDisconnect:a=>{(0,p.uw)(N,M,B,!1),z&&z(a)},onError:()=>(0,p.uw)(N,M,B,!1),log:d,provider:M,model:N}),ad={connectionProxyEnabled:c?.providerSpecificData?.connectionProxyEnabled===!0,connectionProxyUrl:c?.providerSpecificData?.connectionProxyUrl||"",connectionNoProxy:c?.providerSpecificData?.connectionNoProxy||""};if(ad.connectionProxyEnabled&&ad.connectionProxyUrl){let a=ad.connectionProxyUrl;try{let b=new URL(ad.connectionProxyUrl),c=b.hostname||"",d=b.port?`:${b.port}`:"",e=b.protocol||"http:";a=`${e}//${c}${d}`}catch{}let b=c?.providerSpecificData?.connectionProxyPoolId||"none",e=c?.connectionName||c?.connectionId||"unknown";d?.info?.("PROXY",`${M.toUpperCase()} | ${N} | conn=${e} | pool=${b} | url=${a}`)}if(ad.connectionProxyEnabled&&ad.connectionNoProxy){let a=c?.connectionName||c?.connectionId||"unknown";d?.debug?.("PROXY",`${M.toUpperCase()} | ${N} | conn=${a} | no_proxy=${ad.connectionNoProxy}`)}try{let a=await aa.execute({model:N,body:G,stream:W,credentials:c,signal:ac.signal,log:d,proxyOptions:ad});I=a.response,J=a.url,K=a.headers,L=a.transformedBody,$.logTargetRequest(J,K,L)}catch(c){if((0,p.uw)(N,M,B,!1,!0),(0,p.E5)({model:N,provider:M,connectionId:B,status:`FAILED ${"AbortError"===c.name?499:n.gx.BAD_GATEWAY}`}).catch(()=>{}),(0,p.ox)((0,r.$R)({provider:M,model:N,connectionId:B,latency:{ttft:0,total:Date.now()-O},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,r.Fo)(a,W),providerRequest:G||null,response:{error:c.message||String(c),status:"AbortError"===c.name?499:502,thinking:null},status:"error"})).catch(()=>{}),"AbortError"===c.name)return ac.handleError(c),(0,m.A1)(499,"Request aborted");let b=(0,m.lR)(c,M,N,n.gx.BAD_GATEWAY);return console.log(`${h.lm.red}[ERROR] ${b}${h.lm.reset}`),(0,m.A1)(n.gx.BAD_GATEWAY,b)}if(I.status===n.gx.UNAUTHORIZED||I.status===n.gx.FORBIDDEN)try{let a=await (0,j.qZ)(()=>aa.refreshCredentials(c,d),3,d);if(a?.accessToken||a?.copilotToken){if(d?.info?.("TOKEN",`${M.toUpperCase()} | refreshed`),Object.assign(c,a),w)try{await w(a)}catch(a){d?.warn?.("TOKEN",`onCredentialsRefreshed failed: ${a.message}`)}try{let a=await aa.execute({model:N,body:G,stream:W,credentials:c,signal:ac.signal,log:d,proxyOptions:ad});a.response.ok&&(I=a.response,J=a.url)}catch{d?.warn?.("TOKEN",`${M.toUpperCase()} | retry after refresh failed`)}}else d?.warn?.("TOKEN",`${M.toUpperCase()} | refresh failed`)}catch(a){d?.warn?.("TOKEN",`${M.toUpperCase()} | refresh threw: ${a.message}`)}if(!I.ok){(0,p.uw)(N,M,B,!1,!0);let{statusCode:b,message:c,retryAfterMs:e}=await (0,m.zL)(I,M);(0,p.E5)({model:N,provider:M,connectionId:B,status:`FAILED ${b}`}).catch(()=>{}),(0,p.ox)((0,r.$R)({provider:M,model:N,connectionId:B,latency:{ttft:0,total:Date.now()-O},tokens:{prompt_tokens:0,completion_tokens:0},request:(0,r.Fo)(a,W),providerRequest:L||G||null,response:{error:c,status:b,thinking:null},status:"error"})).catch(()=>{});let f=(0,m.lR)(Error(c),M,N,b);return console.log(`${h.lm.red}[ERROR] ${f}${h.lm.reset}`),e&&"antigravity"===M&&d?.debug?.("RETRY",`Antigravity quota reset in ${Math.ceil(e/1e3)}s`),$.logError(Error(c),L||G),(0,m.A1)(b,f,e)}let ae={provider:M,model:N,body:a,stream:W,translatedBody:G,finalBody:L,requestStartTime:O,connectionId:B,apiKey:D,clientRawRequest:A,onRequestSuccess:y},af=a=>(0,p.E5)({model:N,provider:M,connectionId:B,...a}).catch(()=>{}),ag=()=>(0,p.uw)(N,M,B,!1);if(!U&&V){let a=await (0,s.I)({...ae,providerResponse:I,sourceFormat:P,trackDone:ag,appendLog:af});if(a)return ac.handleComplete(),a}if(!W){let a=await (0,t.N)({...ae,providerResponse:I,sourceFormat:P,targetFormat:S,reqLogger:$,trackDone:ag,appendLog:af});return ac.handleComplete(),a}let{onStreamComplete:ah}=(0,u.$)({...ae});return(0,u.M)({...ae,providerResponse:I,sourceFormat:P,targetFormat:S,userAgent:C,reqLogger:$,toolNameMap:H,streamController:ac,onStreamComplete:ah})}q=(w.then?(await w)():w)[0],d()}catch(a){d(a)}})}};