@amir83nasr/10router 0.1.10 → 0.1.12

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 (681) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -5
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +23 -23
  5. package/.next/routes-manifest.json +6 -0
  6. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  7. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  19. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  25. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  27. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  33. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  37. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  41. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/_global-error/page.js +2 -2
  43. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/_global-error.html +1 -1
  45. package/.next/server/app/_global-error.rsc +1 -1
  46. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  47. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  48. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  49. package/.next/server/app/_not-found/page.js +1 -1
  50. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/_not-found.html +1 -1
  52. package/.next/server/app/_not-found.rsc +6 -6
  53. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  54. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  55. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  56. package/.next/server/app/api/auth/login/route.js +1 -1
  57. package/.next/server/app/api/auth/logout/route.js +1 -1
  58. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  59. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  60. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  61. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  62. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  63. package/.next/server/app/api/auth/saml/metadata/route.js +1 -1
  64. package/.next/server/app/api/auth/saml/start/route.js +2 -2
  65. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  66. package/.next/server/app/api/auth/status/route.js +1 -1
  67. package/.next/server/app/api/changelog/route.js +1 -1
  68. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  69. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  70. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  71. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  72. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  73. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  74. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  75. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  76. package/.next/server/app/api/combos/[id]/route.js +1 -1
  77. package/.next/server/app/api/combos/route.js +1 -1
  78. package/.next/server/app/api/dashboard/chat/completions/route.js +1 -0
  79. package/.next/server/app/api/dashboard/chat/completions/route.js.nft.json +1 -0
  80. package/.next/server/app/api/dashboard/chat/completions/route_client-reference-manifest.js +1 -0
  81. package/.next/server/app/api/headroom/extras/route.js +1 -1
  82. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  83. package/.next/server/app/api/headroom/restart/route.js +1 -1
  84. package/.next/server/app/api/headroom/start/route.js +1 -1
  85. package/.next/server/app/api/headroom/status/route.js +1 -1
  86. package/.next/server/app/api/headroom/stop/route.js +1 -1
  87. package/.next/server/app/api/health/route.js +1 -1
  88. package/.next/server/app/api/init/route.js +1 -1
  89. package/.next/server/app/api/keys/[id]/route.js +1 -1
  90. package/.next/server/app/api/keys/route.js +1 -1
  91. package/.next/server/app/api/locale/route.js +1 -1
  92. package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  93. package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  94. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  95. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  96. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  97. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  98. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  99. package/.next/server/app/api/models/alias/route.js +1 -1
  100. package/.next/server/app/api/models/availability/route.js +1 -1
  101. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  102. package/.next/server/app/api/models/custom/route.js +1 -1
  103. package/.next/server/app/api/models/disabled/route.js +1 -1
  104. package/.next/server/app/api/models/route.js +1 -1
  105. package/.next/server/app/api/models/test/route.js +1 -1
  106. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  107. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  108. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  109. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  110. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  111. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  112. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  113. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  114. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  115. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  116. package/.next/server/app/api/pricing/route.js +1 -1
  117. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  118. package/.next/server/app/api/provider-nodes/route.js +1 -1
  119. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  120. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  121. package/.next/server/app/api/providers/[id]/route.js +1 -1
  122. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  123. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  124. package/.next/server/app/api/providers/client/route.js +1 -1
  125. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  126. package/.next/server/app/api/providers/route.js +1 -1
  127. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  128. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  129. package/.next/server/app/api/providers/validate/route.js +1 -1
  130. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  131. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  132. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  133. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  134. package/.next/server/app/api/proxy-pools/route.js +1 -1
  135. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  136. package/.next/server/app/api/pxpipe/health/route.js +1 -1
  137. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  138. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  139. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  140. package/.next/server/app/api/pxpipe/start/route.js +1 -1
  141. package/.next/server/app/api/pxpipe/stats/route.js +1 -1
  142. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  143. package/.next/server/app/api/pxpipe/stop/route.js +1 -1
  144. package/.next/server/app/api/settings/database/route.js +1 -1
  145. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  146. package/.next/server/app/api/settings/require-login/route.js +1 -1
  147. package/.next/server/app/api/settings/route.js +1 -1
  148. package/.next/server/app/api/shutdown/route.js +1 -1
  149. package/.next/server/app/api/tags/route.js +1 -1
  150. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  151. package/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  152. package/.next/server/app/api/translator/load/route.js +1 -1
  153. package/.next/server/app/api/translator/save/route.js +1 -1
  154. package/.next/server/app/api/translator/send/route.js +1 -1
  155. package/.next/server/app/api/translator/translate/route.js +1 -1
  156. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  157. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  158. package/.next/server/app/api/tunnel/status/route.js +1 -1
  159. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  160. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  161. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  162. package/.next/server/app/api/tunnel/tailscale-install/route.js +3 -3
  163. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  164. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  165. package/.next/server/app/api/usage/chart/route.js +1 -1
  166. package/.next/server/app/api/usage/health/route.js +1 -1
  167. package/.next/server/app/api/usage/history/route.js +1 -1
  168. package/.next/server/app/api/usage/logs/route.js +1 -1
  169. package/.next/server/app/api/usage/providers/route.js +1 -1
  170. package/.next/server/app/api/usage/request-details/route.js +1 -1
  171. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  172. package/.next/server/app/api/usage/stats/route.js +1 -1
  173. package/.next/server/app/api/usage/stream/route.js +2 -2
  174. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  175. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  176. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  177. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  178. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  179. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  180. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  181. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  182. package/.next/server/app/api/v1/messages/route.js +1 -1
  183. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  184. package/.next/server/app/api/v1/models/info/route.js +1 -1
  185. package/.next/server/app/api/v1/models/route.js +1 -1
  186. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  187. package/.next/server/app/api/v1/responses/route.js +1 -1
  188. package/.next/server/app/api/v1/route.js +1 -1
  189. package/.next/server/app/api/v1/search/route.js +1 -1
  190. package/.next/server/app/api/v1/systemone/route.js +1 -1
  191. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  192. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  193. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  194. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  195. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  196. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  197. package/.next/server/app/api/v1beta/models/route.js +1 -1
  198. package/.next/server/app/api/version/route.js +1 -1
  199. package/.next/server/app/api/version/shutdown/route.js +1 -1
  200. package/.next/server/app/api/version/update/route.js +1 -1
  201. package/.next/server/app/callback/page.js +1 -1
  202. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  203. package/.next/server/app/callback.html +1 -1
  204. package/.next/server/app/callback.rsc +6 -6
  205. package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
  206. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  207. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  208. package/.next/server/app/dashboard/basic-chat.html +1 -1
  209. package/.next/server/app/dashboard/basic-chat.rsc +8 -8
  210. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
  211. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  212. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  213. package/.next/server/app/dashboard/cli-tools.html +1 -1
  214. package/.next/server/app/dashboard/cli-tools.rsc +9 -9
  215. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  216. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
  217. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/dashboard/combos.html +1 -1
  219. package/.next/server/app/dashboard/combos.rsc +8 -8
  220. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  221. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  222. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  223. package/.next/server/app/dashboard/endpoint.html +1 -1
  224. package/.next/server/app/dashboard/endpoint.rsc +9 -9
  225. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  226. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  227. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  228. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  229. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  230. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  231. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  232. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  233. package/.next/server/app/dashboard/profile.html +1 -1
  234. package/.next/server/app/dashboard/profile.rsc +8 -8
  235. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  236. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  237. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  238. package/.next/server/app/dashboard/providers/new.html +1 -1
  239. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  240. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  241. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  242. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  243. package/.next/server/app/dashboard/providers.html +1 -1
  244. package/.next/server/app/dashboard/providers.rsc +8 -8
  245. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  246. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  247. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  248. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  249. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  250. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  251. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  252. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  253. package/.next/server/app/dashboard/pxpipe.html +1 -1
  254. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  255. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  256. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  257. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  258. package/.next/server/app/dashboard/quota.html +2 -2
  259. package/.next/server/app/dashboard/quota.rsc +9 -9
  260. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  261. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  262. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  263. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  264. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  265. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  266. package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
  267. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  268. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  269. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  270. package/.next/server/app/dashboard/token-saver.html +1 -1
  271. package/.next/server/app/dashboard/token-saver.rsc +7 -7
  272. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
  273. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  274. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  275. package/.next/server/app/dashboard/usage.html +2 -2
  276. package/.next/server/app/dashboard/usage.rsc +8 -8
  277. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  278. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  279. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  280. package/.next/server/app/dashboard.html +1 -1
  281. package/.next/server/app/dashboard.rsc +9 -9
  282. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  283. package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
  284. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  285. package/.next/server/app/index.html +1 -1
  286. package/.next/server/app/index.rsc +6 -6
  287. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  288. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  289. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  290. package/.next/server/app/landing/page.js +1 -1
  291. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  292. package/.next/server/app/landing.html +1 -1
  293. package/.next/server/app/landing.rsc +6 -6
  294. package/.next/server/app/landing.segments/_full.segment.rsc +6 -6
  295. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  296. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  297. package/.next/server/app/login/page.js +1 -1
  298. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  299. package/.next/server/app/login.html +1 -1
  300. package/.next/server/app/login.rsc +6 -6
  301. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  302. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  303. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  304. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  305. package/.next/server/app/page.js +1 -1
  306. package/.next/server/app/page_client-reference-manifest.js +1 -1
  307. package/.next/server/app-paths-manifest.json +6 -5
  308. package/.next/server/chunks/1011.js +1 -1
  309. package/.next/server/chunks/1194.js +1 -1
  310. package/.next/server/chunks/1289.js +1 -1
  311. package/.next/server/chunks/1633.js +1 -1
  312. package/.next/server/chunks/1985.js +1 -1
  313. package/.next/server/chunks/2282.js +6 -6
  314. package/.next/server/chunks/2339.js +1 -1
  315. package/.next/server/chunks/2706.js +1 -1
  316. package/.next/server/chunks/2801.js +1 -1
  317. package/.next/server/chunks/3034.js +1 -1
  318. package/.next/server/chunks/3425.js +1 -1
  319. package/.next/server/chunks/4129.js +1 -1
  320. package/.next/server/chunks/6056.js +1 -1
  321. package/.next/server/chunks/7348.js +1 -1
  322. package/.next/server/chunks/7816.js +1 -1
  323. package/.next/server/chunks/9429.js +1 -1
  324. package/.next/server/middleware-build-manifest.js +1 -1
  325. package/.next/server/middleware.js +3 -3
  326. package/.next/server/pages/404.html +1 -1
  327. package/.next/server/pages/500.html +1 -1
  328. package/.next/server/server-reference-manifest.js +1 -1
  329. package/.next/server/server-reference-manifest.json +1 -1
  330. package/.next/static/C423Aljus-j0GJlKCHgC1/_buildManifest.js +1 -0
  331. package/.next/static/chunks/1278-3b5ed69340ddb23f.js +1 -0
  332. package/.next/static/chunks/159-89c77cec422bd76f.js +1 -0
  333. package/.next/static/chunks/2392-b07fcae4714087ef.js +65 -0
  334. package/.next/static/chunks/2441-96064c4ee1216099.js +1 -0
  335. package/.next/static/chunks/{2836-d97f0aa2718945d5.js → 2836-4781ea7374870f4a.js} +1 -1
  336. package/.next/static/chunks/9320-ae7eb68edeb92e89.js +3 -0
  337. package/.next/static/chunks/{9369-0d43b295968c2168.js → 9369-07e432041bb48a39.js} +1 -1
  338. package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-34f4d77aa3df67a8.js +1 -0
  339. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-e8bceccb95695755.js → page-36ad70a4f906c64b.js} +2 -2
  340. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-adee408d9de02423.js → page-aae6be7f75fcd819.js} +1 -1
  341. package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-d4c1e29e8d038f09.js → page-18212c87b17b33cf.js} +1 -1
  342. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/{page-36c9e8748d6f3f0c.js → page-52b5a6dc2c2d2d93.js} +1 -1
  343. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-9287a3cbd098b9c4.js +1 -0
  344. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-b751d9603cb82e62.js → page-610d962dd8bd1744.js} +1 -1
  345. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/{page-49b3b4867d06cbe0.js → page-9dbf4cd6901b6042.js} +1 -1
  346. package/.next/static/chunks/app/(dashboard)/dashboard/page-1d6e969653676c7d.js +1 -0
  347. package/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-65b2c7989dbe2663.js → page-2ab30b6e1baf1efd.js} +1 -1
  348. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-d5d480e209fdc55a.js → page-b17607bc2ed06d50.js} +1 -1
  349. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-7977a61350d874d2.js → page-0e649a78a041306a.js} +1 -1
  350. package/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-2396571281d02804.js → page-b10c05192c664e8d.js} +1 -1
  351. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-cfd6bcb7e55d7d18.js → page-b33051a3fc600082.js} +2 -2
  352. package/.next/static/chunks/app/(dashboard)/dashboard/quota/{page-fef6edb7aafd8bd0.js → page-ee2a0fa91d9bea9c.js} +1 -1
  353. package/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-697f46461825d7fc.js → page-2457f236bc58e590.js} +1 -1
  354. package/.next/static/chunks/app/(dashboard)/{layout-5039502fc12707c9.js → layout-7ef1d599b3c4c6d2.js} +1 -1
  355. package/.next/static/chunks/app/_global-error/page-a826a2eb5dc30149.js +1 -0
  356. package/.next/static/chunks/app/api/auth/login/route-a826a2eb5dc30149.js +1 -0
  357. package/.next/static/chunks/app/api/auth/logout/route-a826a2eb5dc30149.js +1 -0
  358. package/.next/static/chunks/app/api/auth/oidc/callback/route-a826a2eb5dc30149.js +1 -0
  359. package/.next/static/chunks/app/api/auth/oidc/start/route-a826a2eb5dc30149.js +1 -0
  360. package/.next/static/chunks/app/api/auth/oidc/test/route-a826a2eb5dc30149.js +1 -0
  361. package/.next/static/chunks/app/api/auth/reset-password/route-a826a2eb5dc30149.js +1 -0
  362. package/.next/static/chunks/app/api/auth/saml/acs/route-a826a2eb5dc30149.js +1 -0
  363. package/.next/static/chunks/app/api/auth/saml/metadata/route-a826a2eb5dc30149.js +1 -0
  364. package/.next/static/chunks/app/api/auth/saml/start/route-a826a2eb5dc30149.js +1 -0
  365. package/.next/static/chunks/app/api/auth/saml/test/route-a826a2eb5dc30149.js +1 -0
  366. package/.next/static/chunks/app/api/auth/status/route-a826a2eb5dc30149.js +1 -0
  367. package/.next/static/chunks/app/api/changelog/route-a826a2eb5dc30149.js +1 -0
  368. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-a826a2eb5dc30149.js +1 -0
  369. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-a826a2eb5dc30149.js +1 -0
  370. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-a826a2eb5dc30149.js +1 -0
  371. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-a826a2eb5dc30149.js +1 -0
  372. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-a826a2eb5dc30149.js +1 -0
  373. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-a826a2eb5dc30149.js +1 -0
  374. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-a826a2eb5dc30149.js +1 -0
  375. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-a826a2eb5dc30149.js +1 -0
  376. package/.next/static/chunks/app/api/combos/[id]/route-a826a2eb5dc30149.js +1 -0
  377. package/.next/static/chunks/app/api/combos/route-a826a2eb5dc30149.js +1 -0
  378. package/.next/static/chunks/app/api/dashboard/chat/completions/route-a826a2eb5dc30149.js +1 -0
  379. package/.next/static/chunks/app/api/headroom/extras/route-a826a2eb5dc30149.js +1 -0
  380. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-a826a2eb5dc30149.js +1 -0
  381. package/.next/static/chunks/app/api/headroom/restart/route-a826a2eb5dc30149.js +1 -0
  382. package/.next/static/chunks/app/api/headroom/start/route-a826a2eb5dc30149.js +1 -0
  383. package/.next/static/chunks/app/api/headroom/status/route-a826a2eb5dc30149.js +1 -0
  384. package/.next/static/chunks/app/api/headroom/stop/route-a826a2eb5dc30149.js +1 -0
  385. package/.next/static/chunks/app/api/health/route-a826a2eb5dc30149.js +1 -0
  386. package/.next/static/chunks/app/api/init/route-a826a2eb5dc30149.js +1 -0
  387. package/.next/static/chunks/app/api/keys/[id]/route-a826a2eb5dc30149.js +1 -0
  388. package/.next/static/chunks/app/api/keys/route-a826a2eb5dc30149.js +1 -0
  389. package/.next/static/chunks/app/api/locale/route-a826a2eb5dc30149.js +1 -0
  390. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-a826a2eb5dc30149.js +1 -0
  391. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-a826a2eb5dc30149.js +1 -0
  392. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-a826a2eb5dc30149.js +1 -0
  393. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-a826a2eb5dc30149.js +1 -0
  394. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-a826a2eb5dc30149.js +1 -0
  395. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-a826a2eb5dc30149.js +1 -0
  396. package/.next/static/chunks/app/api/media-providers/tts/voices/route-a826a2eb5dc30149.js +1 -0
  397. package/.next/static/chunks/app/api/models/alias/route-a826a2eb5dc30149.js +1 -0
  398. package/.next/static/chunks/app/api/models/availability/route-a826a2eb5dc30149.js +1 -0
  399. package/.next/static/chunks/app/api/models/catalog-sync/route-a826a2eb5dc30149.js +1 -0
  400. package/.next/static/chunks/app/api/models/custom/route-a826a2eb5dc30149.js +1 -0
  401. package/.next/static/chunks/app/api/models/disabled/route-a826a2eb5dc30149.js +1 -0
  402. package/.next/static/chunks/app/api/models/route-a826a2eb5dc30149.js +1 -0
  403. package/.next/static/chunks/app/api/models/test/route-a826a2eb5dc30149.js +1 -0
  404. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-a826a2eb5dc30149.js +1 -0
  405. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-a826a2eb5dc30149.js +1 -0
  406. package/.next/static/chunks/app/api/oauth/codex/import-token/route-a826a2eb5dc30149.js +1 -0
  407. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-a826a2eb5dc30149.js +1 -0
  408. package/.next/static/chunks/app/api/oauth/cursor/import/route-a826a2eb5dc30149.js +1 -0
  409. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-a826a2eb5dc30149.js +1 -0
  410. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-a826a2eb5dc30149.js +1 -0
  411. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-a826a2eb5dc30149.js +1 -0
  412. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-a826a2eb5dc30149.js +1 -0
  413. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-a826a2eb5dc30149.js +1 -0
  414. package/.next/static/chunks/app/api/pricing/route-a826a2eb5dc30149.js +1 -0
  415. package/.next/static/chunks/app/api/provider-nodes/[id]/route-a826a2eb5dc30149.js +1 -0
  416. package/.next/static/chunks/app/api/provider-nodes/route-a826a2eb5dc30149.js +1 -0
  417. package/.next/static/chunks/app/api/provider-nodes/validate/route-a826a2eb5dc30149.js +1 -0
  418. package/.next/static/chunks/app/api/providers/[id]/models/route-a826a2eb5dc30149.js +1 -0
  419. package/.next/static/chunks/app/api/providers/[id]/route-a826a2eb5dc30149.js +1 -0
  420. package/.next/static/chunks/app/api/providers/[id]/test/route-a826a2eb5dc30149.js +1 -0
  421. package/.next/static/chunks/app/api/providers/[id]/test-models/route-a826a2eb5dc30149.js +1 -0
  422. package/.next/static/chunks/app/api/providers/client/route-a826a2eb5dc30149.js +1 -0
  423. package/.next/static/chunks/app/api/providers/kilo/free-models/route-a826a2eb5dc30149.js +1 -0
  424. package/.next/static/chunks/app/api/providers/route-a826a2eb5dc30149.js +1 -0
  425. package/.next/static/chunks/app/api/providers/suggested-models/route-a826a2eb5dc30149.js +1 -0
  426. package/.next/static/chunks/app/api/providers/test-batch/route-a826a2eb5dc30149.js +1 -0
  427. package/.next/static/chunks/app/api/providers/validate/route-a826a2eb5dc30149.js +1 -0
  428. package/.next/static/chunks/app/api/proxy-pools/[id]/route-a826a2eb5dc30149.js +1 -0
  429. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-a826a2eb5dc30149.js +1 -0
  430. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-a826a2eb5dc30149.js +1 -0
  431. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-a826a2eb5dc30149.js +1 -0
  432. package/.next/static/chunks/app/api/proxy-pools/route-a826a2eb5dc30149.js +1 -0
  433. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-a826a2eb5dc30149.js +1 -0
  434. package/.next/static/chunks/app/api/pxpipe/health/route-a826a2eb5dc30149.js +1 -0
  435. package/.next/static/chunks/app/api/pxpipe/install/route-a826a2eb5dc30149.js +1 -0
  436. package/.next/static/chunks/app/api/pxpipe/logs/route-a826a2eb5dc30149.js +1 -0
  437. package/.next/static/chunks/app/api/pxpipe/restart/route-a826a2eb5dc30149.js +1 -0
  438. package/.next/static/chunks/app/api/pxpipe/start/route-a826a2eb5dc30149.js +1 -0
  439. package/.next/static/chunks/app/api/pxpipe/stats/route-a826a2eb5dc30149.js +1 -0
  440. package/.next/static/chunks/app/api/pxpipe/status/route-a826a2eb5dc30149.js +1 -0
  441. package/.next/static/chunks/app/api/pxpipe/stop/route-a826a2eb5dc30149.js +1 -0
  442. package/.next/static/chunks/app/api/settings/database/route-a826a2eb5dc30149.js +1 -0
  443. package/.next/static/chunks/app/api/settings/proxy-test/route-a826a2eb5dc30149.js +1 -0
  444. package/.next/static/chunks/app/api/settings/require-login/route-a826a2eb5dc30149.js +1 -0
  445. package/.next/static/chunks/app/api/settings/route-a826a2eb5dc30149.js +1 -0
  446. package/.next/static/chunks/app/api/shutdown/route-a826a2eb5dc30149.js +1 -0
  447. package/.next/static/chunks/app/api/tags/route-a826a2eb5dc30149.js +1 -0
  448. package/.next/static/chunks/app/api/translator/console-logs/route-a826a2eb5dc30149.js +1 -0
  449. package/.next/static/chunks/app/api/translator/console-logs/stream/route-a826a2eb5dc30149.js +1 -0
  450. package/.next/static/chunks/app/api/translator/load/route-a826a2eb5dc30149.js +1 -0
  451. package/.next/static/chunks/app/api/translator/save/route-a826a2eb5dc30149.js +1 -0
  452. package/.next/static/chunks/app/api/translator/send/route-a826a2eb5dc30149.js +1 -0
  453. package/.next/static/chunks/app/api/translator/translate/route-a826a2eb5dc30149.js +1 -0
  454. package/.next/static/chunks/app/api/tunnel/disable/route-a826a2eb5dc30149.js +1 -0
  455. package/.next/static/chunks/app/api/tunnel/enable/route-a826a2eb5dc30149.js +1 -0
  456. package/.next/static/chunks/app/api/tunnel/status/route-a826a2eb5dc30149.js +1 -0
  457. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-a826a2eb5dc30149.js +1 -0
  458. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-a826a2eb5dc30149.js +1 -0
  459. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-a826a2eb5dc30149.js +1 -0
  460. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-a826a2eb5dc30149.js +1 -0
  461. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-a826a2eb5dc30149.js +1 -0
  462. package/.next/static/chunks/app/api/usage/[connectionId]/route-a826a2eb5dc30149.js +1 -0
  463. package/.next/static/chunks/app/api/usage/chart/route-a826a2eb5dc30149.js +1 -0
  464. package/.next/static/chunks/app/api/usage/health/route-a826a2eb5dc30149.js +1 -0
  465. package/.next/static/chunks/app/api/usage/history/route-a826a2eb5dc30149.js +1 -0
  466. package/.next/static/chunks/app/api/usage/logs/route-a826a2eb5dc30149.js +1 -0
  467. package/.next/static/chunks/app/api/usage/providers/route-a826a2eb5dc30149.js +1 -0
  468. package/.next/static/chunks/app/api/usage/request-details/route-a826a2eb5dc30149.js +1 -0
  469. package/.next/static/chunks/app/api/usage/request-logs/route-a826a2eb5dc30149.js +1 -0
  470. package/.next/static/chunks/app/api/usage/stats/route-a826a2eb5dc30149.js +1 -0
  471. package/.next/static/chunks/app/api/usage/stream/route-a826a2eb5dc30149.js +1 -0
  472. package/.next/static/chunks/app/api/v1/api/chat/route-a826a2eb5dc30149.js +1 -0
  473. package/.next/static/chunks/app/api/v1/audio/speech/route-a826a2eb5dc30149.js +1 -0
  474. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-a826a2eb5dc30149.js +1 -0
  475. package/.next/static/chunks/app/api/v1/audio/voices/route-a826a2eb5dc30149.js +1 -0
  476. package/.next/static/chunks/app/api/v1/chat/completions/route-a826a2eb5dc30149.js +1 -0
  477. package/.next/static/chunks/app/api/v1/embeddings/route-a826a2eb5dc30149.js +1 -0
  478. package/.next/static/chunks/app/api/v1/images/generations/route-a826a2eb5dc30149.js +1 -0
  479. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-a826a2eb5dc30149.js +1 -0
  480. package/.next/static/chunks/app/api/v1/messages/route-a826a2eb5dc30149.js +1 -0
  481. package/.next/static/chunks/app/api/v1/models/[...model]/route-a826a2eb5dc30149.js +1 -0
  482. package/.next/static/chunks/app/api/v1/models/info/route-a826a2eb5dc30149.js +1 -0
  483. package/.next/static/chunks/app/api/v1/models/route-a826a2eb5dc30149.js +1 -0
  484. package/.next/static/chunks/app/api/v1/responses/compact/route-a826a2eb5dc30149.js +1 -0
  485. package/.next/static/chunks/app/api/v1/responses/route-a826a2eb5dc30149.js +1 -0
  486. package/.next/static/chunks/app/api/v1/route-a826a2eb5dc30149.js +1 -0
  487. package/.next/static/chunks/app/api/v1/search/route-a826a2eb5dc30149.js +1 -0
  488. package/.next/static/chunks/app/api/v1/systemone/route-a826a2eb5dc30149.js +1 -0
  489. package/.next/static/chunks/app/api/v1/videos/[id]/route-a826a2eb5dc30149.js +1 -0
  490. package/.next/static/chunks/app/api/v1/videos/edits/route-a826a2eb5dc30149.js +1 -0
  491. package/.next/static/chunks/app/api/v1/videos/extensions/route-a826a2eb5dc30149.js +1 -0
  492. package/.next/static/chunks/app/api/v1/videos/generations/route-a826a2eb5dc30149.js +1 -0
  493. package/.next/static/chunks/app/api/v1/web/fetch/route-a826a2eb5dc30149.js +1 -0
  494. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-a826a2eb5dc30149.js +1 -0
  495. package/.next/static/chunks/app/api/v1beta/models/route-a826a2eb5dc30149.js +1 -0
  496. package/.next/static/chunks/app/api/version/route-a826a2eb5dc30149.js +1 -0
  497. package/.next/static/chunks/app/api/version/shutdown/route-a826a2eb5dc30149.js +1 -0
  498. package/.next/static/chunks/app/api/version/update/route-a826a2eb5dc30149.js +1 -0
  499. package/.next/static/chunks/app/{layout-8de830cad461f2bd.js → layout-f34e075b1872747e.js} +1 -1
  500. package/.next/static/chunks/app/manifest.webmanifest/route-a826a2eb5dc30149.js +1 -0
  501. package/.next/static/chunks/app/page-a826a2eb5dc30149.js +1 -0
  502. package/.next/static/chunks/next/dist/client/components/builtin/app-error-a826a2eb5dc30149.js +1 -0
  503. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-a826a2eb5dc30149.js +1 -0
  504. package/.next/static/chunks/next/dist/client/components/builtin/not-found-a826a2eb5dc30149.js +1 -0
  505. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-a826a2eb5dc30149.js +1 -0
  506. package/.next/static/css/{c66cbd684164cacf.css → a2628e64fa8ac12e.css} +1 -1
  507. package/CHANGELOG.md +14 -0
  508. package/bin/update-check.mjs +28 -5
  509. package/open-sse/providers/registry/opencode-go.js +4 -0
  510. package/open-sse/providers/registry/opencode-zen.js +4 -0
  511. package/open-sse/providers/registry/opencode.js +3 -0
  512. package/open-sse/translator/concerns/thinkingUnified.js +16 -1
  513. package/open-sse/translator/concerns/toolCall.js +2 -1
  514. package/open-sse/translator/formats/openai.js +10 -2
  515. package/open-sse/translator/request/claude-to-openai.js +9 -5
  516. package/open-sse/translator/response/openai-to-claude.js +66 -32
  517. package/open-sse/translator/schema/defaults.js +6 -0
  518. package/open-sse/translator/schema/index.js +1 -1
  519. package/package.json +2 -1
  520. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +45 -7
  521. package/src/app/api/dashboard/chat/completions/route.ts +45 -0
  522. package/src/app/globals.css +54 -13
  523. package/src/components/app-sidebar.tsx +1 -0
  524. package/src/shared/components/Header.tsx +8 -0
  525. package/.next/static/DaBuw8hGFuPycdhSV3GrJ/_buildManifest.js +0 -1
  526. package/.next/static/chunks/1278-233a1472e792bb65.js +0 -1
  527. package/.next/static/chunks/159-ec207a220d7d5c16.js +0 -1
  528. package/.next/static/chunks/1699-49be310981e2759e.js +0 -67
  529. package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-ce1364b2b9589785.js +0 -1
  530. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-67516b120adbc4d7.js +0 -1
  531. package/.next/static/chunks/app/(dashboard)/dashboard/page-315c9f52c472a700.js +0 -1
  532. package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
  533. package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
  534. package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
  535. package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
  536. package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
  537. package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
  538. package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
  539. package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
  540. package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
  541. package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
  542. package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
  543. package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
  544. package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
  545. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
  546. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
  547. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
  548. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
  549. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
  550. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
  551. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
  552. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
  553. package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  554. package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
  555. package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
  556. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  557. package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
  558. package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
  559. package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
  560. package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
  561. package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
  562. package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
  563. package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
  564. package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
  565. package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
  566. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
  567. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
  568. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
  569. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
  570. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
  571. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
  572. package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
  573. package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
  574. package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
  575. package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
  576. package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
  577. package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
  578. package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
  579. package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
  580. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
  581. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  582. package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
  583. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  584. package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
  585. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
  586. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  587. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
  588. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
  589. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  590. package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
  591. package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
  592. package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
  593. package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
  594. package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
  595. package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
  596. package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  597. package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
  598. package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
  599. package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
  600. package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
  601. package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
  602. package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
  603. package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
  604. package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
  605. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  606. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
  607. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
  608. package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
  609. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
  610. package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
  611. package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
  612. package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
  613. package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
  614. package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
  615. package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
  616. package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
  617. package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
  618. package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
  619. package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
  620. package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
  621. package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
  622. package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  623. package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
  624. package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
  625. package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
  626. package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
  627. package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
  628. package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
  629. package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
  630. package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
  631. package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
  632. package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
  633. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
  634. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
  635. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
  636. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
  637. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
  638. package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
  639. package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
  640. package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
  641. package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
  642. package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
  643. package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
  644. package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
  645. package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
  646. package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
  647. package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
  648. package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
  649. package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
  650. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
  651. package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
  652. package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
  653. package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
  654. package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
  655. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
  656. package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
  657. package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
  658. package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
  659. package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
  660. package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
  661. package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
  662. package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
  663. package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
  664. package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
  665. package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  666. package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
  667. package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
  668. package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
  669. package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
  670. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  671. package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
  672. package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
  673. package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  674. package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
  675. package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
  676. package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
  677. package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
  678. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
  679. package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
  680. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
  681. /package/.next/static/{DaBuw8hGFuPycdhSV3GrJ → C423Aljus-j0GJlKCHgC1}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9320],{1674:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getImgProps",{enumerable:!0,get:function(){return s}});let r=n(36656),o=n(69763),i=n(66967),a=["-moz-initial","fill","none","scale-down",void 0];function l(e){return void 0!==e.default}function u(e){return void 0===e?e:"number"==typeof e?Number.isFinite(e)?e:NaN:"string"==typeof e&&/^[0-9]+$/.test(e)?parseInt(e,10):NaN}function s({src:e,sizes:t,unoptimized:n=!1,priority:c=!1,preload:d=!1,loading:f,className:p,quality:g,width:m,height:h,fill:v=!1,style:b,overrideSrc:w,onLoad:y,onLoadingComplete:x,placeholder:C="empty",blurDataURL:j,fetchPriority:_,decoding:R="async",layout:P,objectFit:D,objectPosition:O,lazyBoundary:E,lazyRoot:S,...M},I){var k;let A,F,T,{imgConf:L,showAltText:K,blurComplete:z,defaultLoader:G}=I,U=L||i.imageConfigDefault;if("allSizes"in U)A=U;else{let e=[...U.deviceSizes,...U.imageSizes].sort((e,t)=>e-t),t=U.deviceSizes.sort((e,t)=>e-t),n=U.qualities?.sort((e,t)=>e-t);A={...U,allSizes:e,deviceSizes:t,qualities:n}}if(void 0===G)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let B=M.loader||G;delete M.loader,delete M.srcSet;let $="__next_img_default"in B;if($){if("custom"===A.loader)throw Object.defineProperty(Error(`Image with src "${e}" is missing "loader" prop.
2
+ Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let e=B;B=t=>{let{config:n,...r}=t;return e(r)}}if(P){"fill"===P&&(v=!0);let e={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[P];e&&(b={...b,...e});let n={responsive:"100vw",fill:"100vw"}[P];n&&!t&&(t=n)}let N="",q=u(m),V=u(h);if((k=e)&&"object"==typeof k&&(l(k)||void 0!==k.src)){let t=l(e)?e.default:e;if(!t.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!t.height||!t.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(t)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(F=t.blurWidth,T=t.blurHeight,j=j||t.blurDataURL,N=t.src,!v)if(q||V){if(q&&!V){let e=q/t.width;V=Math.round(t.height*e)}else if(!q&&V){let e=V/t.height;q=Math.round(t.width*e)}}else q=t.width,V=t.height}let W=!c&&!d&&("lazy"===f||void 0===f);(!(e="string"==typeof e?e:N)||e.startsWith("data:")||e.startsWith("blob:"))&&(n=!0,W=!1),A.unoptimized&&(n=!0),$&&!A.dangerouslyAllowSVG&&e.split("?",1)[0].endsWith(".svg")&&(n=!0);let H=u(g),X=Object.assign(v?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:D,objectPosition:O}:{},K?{}:{color:"transparent"},b),Z=z||"empty"===C?null:"blur"===C?`url("data:image/svg+xml;charset=utf-8,${(0,o.getImageBlurSvg)({widthInt:q,heightInt:V,blurWidth:F,blurHeight:T,blurDataURL:j||"",objectFit:X.objectFit})}")`:`url("${C}")`,J=a.includes(X.objectFit)?"fill"===X.objectFit?"100% 100%":"cover":X.objectFit,Y=Z?{backgroundSize:J,backgroundPosition:X.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:Z}:{},Q=function({config:e,src:t,unoptimized:n,width:o,quality:i,sizes:a,loader:l}){if(n){if(t.startsWith("/")&&!t.startsWith("//")){let e=(0,r.getDeploymentId)();if(t.includes("/_next/static/immutable")&&!(0,r.getAssetToken)())e=void 0;else if(e){let n=t.indexOf("?");if(-1!==n){let r=new URLSearchParams(t.slice(n+1));r.get("dpl")||(r.append("dpl",e),t=t.slice(0,n)+"?"+r.toString())}else t+=`?dpl=${e}`}}return{src:t,srcSet:void 0,sizes:void 0}}let{widths:u,kind:s}=function({deviceSizes:e,allSizes:t},n,r){if(r){let n=/(^|\s)(1?\d?\d)vw/g,o=[];for(let e;e=n.exec(r);)o.push(parseInt(e[2]));if(o.length){let n=.01*Math.min(...o);return{widths:t.filter(t=>t>=e[0]*n),kind:"w"}}return{widths:t,kind:"w"}}return"number"!=typeof n?{widths:e,kind:"w"}:{widths:[...new Set([n,2*n].map(e=>t.find(t=>t>=e)||t[t.length-1]))],kind:"x"}}(e,o,a),c=u.length-1;return{sizes:a||"w"!==s?a:"100vw",srcSet:u.map((n,r)=>`${l({config:e,src:t,quality:i,width:n})} ${"w"===s?n:r+1}${s}`).join(", "),src:l({config:e,src:t,quality:i,width:u[c]})}}({config:A,src:e,unoptimized:n,width:q,quality:H,sizes:t,loader:B}),ee=W?"lazy":f;return{props:{...M,loading:ee,fetchPriority:_,width:q,height:V,decoding:R,className:p,style:{...X,...Y},sizes:Q.sizes,srcSet:Q.srcSet,src:w||Q.src},meta:{unoptimized:n,preload:d||c,placeholder:C,fill:v}}}},2132:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let r=n(15814),o=r.useLayoutEffect,i=r.useEffect;function a(e){let{headManager:t,reduceComponentsToState:n}=e;function a(){if(t&&t.mountedInstances){let e=r.Children.toArray(Array.from(t.mountedInstances).filter(Boolean));t.updateHead(n(e))}}return o(()=>(t?.mountedInstances?.add(e.children),()=>{t?.mountedInstances?.delete(e.children)})),o(()=>(t&&(t._pendingUpdate=a),()=>{t&&(t._pendingUpdate=a)})),i(()=>(t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null),()=>{t&&t._pendingUpdate&&(t._pendingUpdate(),t._pendingUpdate=null)})),null}},15477:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ImageConfigContext",{enumerable:!0,get:function(){return i}});let r=n(27926)._(n(15814)),o=n(66967),i=r.default.createContext(o.imageConfigDefault)},16653:(e,t,n)=>{n.d(t,{default:()=>o.a});var r=n(80514),o=n.n(r)},20632:(e,t)=>{function n(e,t){let n=e||75;return t?.qualities?.length?t.qualities.reduce((e,t)=>Math.abs(t-n)<Math.abs(e-n)?t:e,t.qualities[0]):n}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"findClosestQuality",{enumerable:!0,get:function(){return n}})},27155:(e,t,n)=>{n.d(t,{q7:()=>q,bL:()=>N,RG:()=>k});var r=n(15814),o=n.t(r,2),i=n(52629),a=n(45077),l=n(74612),u=n(67246),s=n(88461),c=n(40144),d=n(14441),f=n(79742),p=n(20977),g=n(57109),m=Object.defineProperty,h=(e,t)=>m(e,"name",{value:t,configurable:!0}),v=!1;function b(){let[e,t]=r.useState(v);return r.useEffect(()=>{v||(v=!0,t(!0))},[]),e}h(b,"useIsHydrated");var w=o[" useSyncExternalStore ".trim().toString()];function y(){return()=>{}}function x(){return w(y,()=>!0,()=>!1)}h(y,"subscribe"),h(x,"useIsHydratedModern");var C="function"==typeof w?x:b,j=n(29798),_=Object.defineProperty,R=(e,t)=>_(e,"name",{value:t,configurable:!0}),P="rovingFocusGroup.onEntryFocus",D={bubbles:!1,cancelable:!0},O="RovingFocusGroup",[E,S,M]=(0,a.N)(O),[I,k]=(0,u.A)(O,[M]),[A,F]=I(O),T=r.forwardRef(R(function(e,t){return(0,j.jsx)(E.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,j.jsx)(E.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,j.jsx)(L,{...e,ref:t})})})},"RovingFocusGroup")),L=r.forwardRef(R(function(e,t){let{__scopeRovingFocusGroup:n,orientation:o,loop:a=!1,dir:u,currentTabStopId:s,defaultCurrentTabStopId:g,onCurrentTabStopIdChange:m,onEntryFocus:h,preventScrollOnEntryFocus:v=!1,...b}=e,w=r.useRef(null),y=(0,l.s)(t,w),x=(0,p.jH)(u),[C,_]=(0,f.i)({prop:s,defaultProp:g??null,onChange:m,caller:O}),[R,E]=r.useState(!1),M=(0,d.c)(h),I=S(n),k=r.useRef(!1),[F,T]=r.useState(0);return r.useEffect(()=>{let e=w.current;if(e)return e.addEventListener(P,M),()=>e.removeEventListener(P,M)},[M]),(0,j.jsx)(A,{scope:n,orientation:o,dir:x,loop:a,currentTabStopId:C,onItemFocus:r.useCallback(e=>_(e),[_]),onItemShiftTab:r.useCallback(()=>E(!0),[]),onFocusableItemAdd:r.useCallback(()=>T(e=>e+1),[]),onFocusableItemRemove:r.useCallback(()=>T(e=>e-1),[]),children:(0,j.jsx)(c.sG.div,{tabIndex:R||0===F?-1:0,"data-orientation":o,...b,ref:y,style:{outline:"none",...e.style},onMouseDown:(0,i.mK)(e.onMouseDown,()=>{k.current=!0}),onFocus:(0,i.mK)(e.onFocus,e=>{let t=!k.current;if(e.target===e.currentTarget&&t&&!R){let t=new CustomEvent(P,D);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=I().filter(e=>e.focusable);B([e.find(e=>e.active),e.find(e=>e.id===C),...e].filter(Boolean).map(e=>e.ref.current),v)}}k.current=!1}),onBlur:(0,i.mK)(e.onBlur,()=>E(!1))})})},"RovingFocusGroupImpl")),K=r.forwardRef(R(function(e,t){let{__scopeRovingFocusGroup:n,focusable:o=!0,active:a=!1,tabStopId:l,children:u,...d}=e,f=(0,s.B)(),p=l||f,m=F("RovingFocusGroupItem",n),h=m.currentTabStopId===p,v=S(n),{onFocusableItemAdd:b,onFocusableItemRemove:w,currentTabStopId:y}=m,x=C();return(0,g.N)(()=>{if(x&&o)return b(),()=>w()},[x,o,b,w]),r.useEffect(()=>{if(!x&&o)return b(),()=>w()},[x,o,b,w]),(0,j.jsx)(E.ItemSlot,{scope:n,id:p,focusable:o,active:a,children:(0,j.jsx)(c.sG.span,{tabIndex:h?0:-1,"data-orientation":m.orientation,...d,ref:t,onMouseDown:(0,i.mK)(e.onMouseDown,e=>{o?m.onItemFocus(p):e.preventDefault()}),onFocus:(0,i.mK)(e.onFocus,()=>m.onItemFocus(p)),onKeyDown:(0,i.mK)(e.onKeyDown,e=>{if("Tab"===e.key&&e.shiftKey)return void m.onItemShiftTab();if(e.target!==e.currentTarget)return;let t=U(e,m.orientation,m.dir);if(void 0!==t){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=v().filter(e=>e.focusable).map(e=>e.ref.current);if("last"===t)n.reverse();else if("prev"===t||"next"===t){"prev"===t&&n.reverse();let r=n.indexOf(e.currentTarget);n=m.loop?$(n,r+1):n.slice(r+1)}setTimeout(()=>B(n))}}),children:"function"==typeof u?u({isCurrentTabStop:h,hasTabStop:null!=y}):u})})},"RovingFocusGroupItem")),z={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function G(e,t){return"rtl"!==t?e:"ArrowLeft"===e?"ArrowRight":"ArrowRight"===e?"ArrowLeft":e}function U(e,t,n){let r=G(e.key,n);if(!("vertical"===t&&["ArrowLeft","ArrowRight"].includes(r))&&!("horizontal"===t&&["ArrowUp","ArrowDown"].includes(r)))return z[r]}function B(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function $(e,t){return e.map((n,r)=>e[(t+r)%e.length])}R(G,"getDirectionAwareKey"),R(U,"getFocusIntent"),R(B,"focusFirst"),R($,"wrapArray");var N=T,q=K},28904:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"RouterContext",{enumerable:!0,get:function(){return r}});let r=n(27926)._(n(15814)).default.createContext(null)},34098:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return x}});let r=n(27926),o=n(72431),i=n(29798),a=o._(n(15814)),l=r._(n(31571)),u=r._(n(44251)),s=n(1674),c=n(66967),d=n(15477),f=n(28904),p=r._(n(35994)),g=n(44313),m={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!0};function h(e,t,n,r,o,i,a){let l=e?.src;e&&e["data-loaded-src"]!==l&&(e["data-loaded-src"]=l,("decode"in e?e.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(e.parentElement&&e.isConnected){if("empty"!==t&&o(!0),n?.current){let t=new Event("load");Object.defineProperty(t,"target",{writable:!1,value:e});let r=!1,o=!1;n.current({...t,nativeEvent:t,currentTarget:e,target:e,isDefaultPrevented:()=>r,isPropagationStopped:()=>o,persist:()=>{},preventDefault:()=>{r=!0,t.preventDefault()},stopPropagation:()=>{o=!0,t.stopPropagation()}})}r?.current&&r.current(e)}}))}function v(e){return a.use?{fetchPriority:e}:{fetchpriority:e}}let b=a.useLayoutEffect,w=(0,a.forwardRef)(({src:e,srcSet:t,sizes:n,height:r,width:o,decoding:l,className:u,style:s,fetchPriority:c,placeholder:d,loading:f,unoptimized:p,fill:m,onLoadRef:w,onLoadingCompleteRef:y,setBlurComplete:x,setShowAltText:C,sizesInput:j,onLoad:_,onError:R,...P},D)=>{let O=(0,a.useRef)(!1),E=(0,a.useRef)(null);b(()=>{let{current:e}=O,{current:t}=E;e||null===t||(R&&(t.src=t.src),t.complete&&h(t,d,w,y,x,p,j),O.current=!0)},[e,d,w,y,R,p,j]);let S=(0,g.useMergedRef)(D,E);return(0,i.jsx)("img",{...P,...v(c),loading:f,width:o,height:r,decoding:l,"data-nimg":m?"fill":"1",className:u,style:s,sizes:n,srcSet:t,src:e,ref:S,onLoad:e=>{h(e.currentTarget,d,w,y,x,p,j)},onError:e=>{C(!0),"empty"!==d&&x(!0),R&&R(e)}})});function y({isAppRouter:e,imgAttributes:t}){let n={as:"image",imageSrcSet:t.srcSet,imageSizes:t.sizes,crossOrigin:t.crossOrigin,referrerPolicy:t.referrerPolicy,...v(t.fetchPriority)};return e&&l.default.preload?(l.default.preload(t.src,n),null):(0,i.jsx)(u.default,{children:(0,i.jsx)("link",{rel:"preload",href:t.srcSet?void 0:t.src,...n},"__nimg-"+t.src+t.srcSet+t.sizes)})}let x=(0,a.forwardRef)((e,t)=>{let n=(0,a.useContext)(f.RouterContext),r=(0,a.useContext)(d.ImageConfigContext),o=(0,a.useMemo)(()=>{let e=m||r||c.imageConfigDefault,t=[...e.deviceSizes,...e.imageSizes].sort((e,t)=>e-t),n=e.deviceSizes.sort((e,t)=>e-t),o=e.qualities?.sort((e,t)=>e-t);return{...e,allSizes:t,deviceSizes:n,qualities:o,localPatterns:e.localPatterns}},[r]),{onLoad:l,onLoadingComplete:u}=e,g=(0,a.useRef)(l);(0,a.useEffect)(()=>{g.current=l},[l]);let h=(0,a.useRef)(u);(0,a.useEffect)(()=>{h.current=u},[u]);let[v,b]=(0,a.useState)(!1),[x,C]=(0,a.useState)(!1),{props:j,meta:_}=(0,s.getImgProps)(e,{defaultLoader:p.default,imgConf:o,blurComplete:v,showAltText:x});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(w,{...j,unoptimized:_.unoptimized,placeholder:_.placeholder,fill:_.fill,onLoadRef:g,onLoadingCompleteRef:h,setBlurComplete:b,setShowAltText:C,sizesInput:e.sizes,ref:t}),_.preload?(0,i.jsx)(y,{isAppRouter:!n,imgAttributes:j}):null]})});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},35994:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let r=n(20632),o=n(36656);function i({config:e,src:t,width:n,quality:a}){let l=(0,o.getDeploymentId)();if(t.startsWith("/")&&!t.startsWith("//"))if(t.includes("/_next/static/immutable")&&!(0,o.getAssetToken)())l=void 0;else{let e=t.indexOf("?");if(-1!==e){let n=new URLSearchParams(t.slice(e+1)),r=n.get("dpl");if(r){l=r,n.delete("dpl");let o=n.toString();t=t.slice(0,e)+(o?"?"+o:"")}}}if(t.startsWith("/")&&t.includes("?")&&e.localPatterns?.length===1&&"**"===e.localPatterns[0].pathname&&""===e.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${t}" is using a query string which is not configured in images.localPatterns.
3
+ Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let u=(0,r.findClosestQuality)(a,e);return`${e.path}?url=${encodeURIComponent(t)}&w=${n}&q=${u}${t.startsWith("/")&&l?`&dpl=${l}`:""}`}i.__next_img_default=!0;let a=i},44251:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});var r={default:function(){return m},defaultHead:function(){return d}};for(var o in r)Object.defineProperty(t,o,{enumerable:!0,get:r[o]});let i=n(27926),a=n(72431),l=n(29798),u=a._(n(15814)),s=i._(n(2132)),c=n(15979);function d(){return[(0,l.jsx)("meta",{charSet:"utf-8"},"charset"),(0,l.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function f(e,t){return"string"==typeof t||"number"==typeof t?e:t.type===u.default.Fragment?e.concat(u.default.Children.toArray(t.props.children).reduce((e,t)=>"string"==typeof t||"number"==typeof t?e:e.concat(t),[])):e.concat(t)}let p=["name","httpEquiv","charSet","itemProp"];function g(e){let t,n,r,o;return e.reduce(f,[]).reverse().concat(d().reverse()).filter((t=new Set,n=new Set,r=new Set,o={},e=>{let i=!0,a=!1;if(e.key&&"number"!=typeof e.key&&e.key.indexOf("$")>0){a=!0;let n=e.key.slice(e.key.indexOf("$")+1);t.has(n)?i=!1:t.add(n)}switch(e.type){case"title":case"base":n.has(e.type)?i=!1:n.add(e.type);break;case"meta":for(let t=0,n=p.length;t<n;t++){let n=p[t];if(e.props.hasOwnProperty(n))if("charSet"===n)r.has(n)?i=!1:r.add(n);else{let t=e.props[n],r=o[n]||new Set;("name"!==n||!a)&&r.has(t)?i=!1:(r.add(t),o[n]=r)}}}return i})).reverse().map((e,t)=>{let n=e.key||t;return u.default.cloneElement(e,{key:n})})}let m=function({children:e}){let t=(0,u.useContext)(c.HeadManagerContext);return(0,l.jsx)(s.default,{reduceComponentsToState:g,headManager:t,children:e})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},47151:(e,t,n)=>{n.d(t,{UC:()=>ez,q7:()=>eU,JU:()=>eG,ZL:()=>eK,bL:()=>eT,wv:()=>eB,l9:()=>eL});var r=n(15814),o=n(52629),i=n(74612),a=n(67246),l=n(79742),u=n(40144),s=n(45077),c=n(20977),d=n(47670),f=n(99059),p=n(73138),g=n(87811),m=n(75211),h=n(14417),v=n(27155),b=n(80954),w=n(14441),y=n(86029),x=n(6424),C=n(29798),j=Object.defineProperty,_=(e,t)=>j(e,"name",{value:t,configurable:!0}),R=["Enter"," "],P=["ArrowUp","PageDown","End"],D=["ArrowDown","PageUp","Home",...P];[...R],[...R];var O="Menu",[E,S,M]=(0,s.N)(O),[I,k]=(0,a.A)(O,[M,g.Bk,v.RG]),A=(0,g.Bk)(),F=(0,v.RG)(),[T,L]=I(O),[K,z]=I(O),G=_(e=>{let{__scopeMenu:t,open:n=!1,children:o,dir:i,onOpenChange:a,modal:l=!0}=e,u=A(t),[s,d]=r.useState(null),f=r.useRef(!1),p=(0,w.c)(a),m=(0,c.jH)(i);return r.useEffect(()=>{let e=_(()=>{f.current=!0,document.addEventListener("pointerdown",t,{capture:!0,once:!0}),document.addEventListener("pointermove",t,{capture:!0,once:!0})},"handleKeyDown"),t=_(()=>f.current=!1,"handlePointer");return document.addEventListener("keydown",e,{capture:!0}),()=>{document.removeEventListener("keydown",e,{capture:!0}),document.removeEventListener("pointerdown",t,{capture:!0}),document.removeEventListener("pointermove",t,{capture:!0})}},[]),r.useEffect(()=>{if(!n)return;let e=_(()=>p(!1),"handleBlur");return window.addEventListener("blur",e),()=>window.removeEventListener("blur",e)},[n,p]),(0,C.jsx)(g.bL,{...u,children:(0,C.jsx)(T,{scope:t,open:n,onOpenChange:p,content:s,onContentChange:d,children:(0,C.jsx)(K,{scope:t,onClose:r.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:m,modal:l,children:o})})})},"Menu"),U=r.forwardRef(_(function(e,t){let{__scopeMenu:n,...r}=e,o=A(n);return(0,C.jsx)(g.Mz,{...o,...r,ref:t})},"MenuAnchor")),B="MenuPortal",[$,N]=I(B,{forceMount:void 0}),q=_(e=>{let{__scopeMenu:t,forceMount:n,children:r,container:o}=e,i=L(B,t);return(0,C.jsx)($,{scope:t,forceMount:n,children:(0,C.jsx)(h.C,{present:n||i.open,children:(0,C.jsx)(m.Z,{asChild:!0,container:o,children:r})})})},"MenuPortal"),V="MenuContent",[W,H]=I(V),X=r.forwardRef(_(function(e,t){let n=N(V,e.__scopeMenu),{forceMount:r=n.forceMount,...o}=e,i=L(V,e.__scopeMenu),a=z(V,e.__scopeMenu);return(0,C.jsx)(E.Provider,{scope:e.__scopeMenu,children:(0,C.jsx)(h.C,{present:r||i.open,children:(0,C.jsx)(E.Slot,{scope:e.__scopeMenu,children:a.modal?(0,C.jsx)(Z,{...o,ref:t}):(0,C.jsx)(J,{...o,ref:t})})})})},"MenuContent")),Z=r.forwardRef(_(function(e,t){let n=L(V,e.__scopeMenu),a=r.useRef(null),l=(0,i.s)(t,a);return r.useEffect(()=>{let e=a.current;if(e)return(0,y.Eq)(e)},[]),(0,C.jsx)(Q,{...e,ref:l,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:(0,o.mK)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})},"MenuRootContentModal")),J=r.forwardRef(_(function(e,t){let n=L(V,e.__scopeMenu);return(0,C.jsx)(Q,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})},"MenuRootContentNonModal")),Y=(0,b.TL)("MenuContent.ScrollLock"),Q=r.forwardRef(_(function(e,t){let{__scopeMenu:n,loop:a=!1,trapFocus:l,onOpenAutoFocus:u,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:m,onEscapeKeyDown:h,onPointerDownOutside:b,onFocusOutside:w,onInteractOutside:y,onDismiss:j,disableOutsideScroll:R,...O}=e,E=L(V,n),M=z(V,n),I=A(n),k=F(n),T=S(n),[K,G]=r.useState(null),U=r.useRef(null),B=(0,i.s)(t,U,E.onContentChange),$=r.useRef(0),N=r.useRef(""),q=r.useRef(0),H=r.useRef(null),X=r.useRef("right"),Z=r.useRef(0),J=R?x.A:r.Fragment,Q=_(e=>{let t=N.current+e,n=T().filter(e=>!e.disabled),r=document.activeElement,o=n.find(e=>e.ref.current===r)?.textValue,i=eh(n.map(e=>e.textValue),t,o),a=n.find(e=>e.textValue===i)?.ref.current;a&&setTimeout(()=>a.focus())},"handleTypeaheadSearch");r.useEffect(()=>()=>window.clearTimeout($.current),[]),(0,f.Oh)();let ee=r.useCallback(e=>X.current===H.current?.side&&eb(e,H.current?.area),[]);return(0,C.jsx)(W,{scope:n,searchRef:N,onItemEnter:r.useCallback(e=>{ee(e)&&e.preventDefault()},[ee]),onItemLeave:r.useCallback(e=>{ee(e)||(U.current?.focus(),G(null))},[ee]),onTriggerLeave:r.useCallback(e=>{ee(e)&&e.preventDefault()},[ee]),pointerGraceTimerRef:q,onPointerGraceIntentChange:r.useCallback(e=>{H.current=e},[]),children:(0,C.jsx)(J,{...R?{as:Y,allowPinchZoom:!0}:void 0,children:(0,C.jsx)(p.n,{asChild:!0,trapped:l,onMountAutoFocus:(0,o.mK)(u,e=>{e.preventDefault(),U.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,C.jsx)(d.qW,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:h,onPointerDownOutside:b,onFocusOutside:w,onInteractOutside:y,onDismiss:j,children:(0,C.jsx)(v.bL,{asChild:!0,...k,dir:M.dir,orientation:"vertical",loop:a,currentTabStopId:K,onCurrentTabStopIdChange:G,onEntryFocus:(0,o.mK)(m,e=>{M.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,C.jsx)(g.UC,{role:"menu","aria-orientation":"vertical","data-state":ef(E.open),"data-radix-menu-content":"",dir:M.dir,...I,...O,ref:B,style:{outline:"none",...O.style},onKeyDown:(0,o.mK)(O.onKeyDown,e=>{let t=e.target.closest("[data-radix-menu-content]")===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=1===e.key.length;t&&("Tab"===e.key&&e.preventDefault(),!n&&r&&Q(e.key));let o=U.current;if(e.target!==o||!D.includes(e.key))return;e.preventDefault();let i=T().filter(e=>!e.disabled).map(e=>e.ref.current);P.includes(e.key)&&i.reverse(),eg(i)}),onBlur:(0,o.mK)(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout($.current),N.current="")}),onPointerMove:(0,o.mK)(e.onPointerMove,ew(e=>{let t=e.target,n=Z.current!==e.clientX;e.currentTarget.contains(t)&&n&&(X.current=e.clientX>Z.current?"right":"left",Z.current=e.clientX)}))})})})})})})},"MenuContentImpl")),ee=r.forwardRef(_(function(e,t){let{__scopeMenu:n,...r}=e;return(0,C.jsx)(u.sG.div,{...r,ref:t})},"MenuLabel")),et="MenuItem",en="menu.itemSelect",er=r.forwardRef(_(function(e,t){let{disabled:n=!1,onSelect:a,...l}=e,s=r.useRef(null),c=z(et,e.__scopeMenu),d=H(et,e.__scopeMenu),f=(0,i.s)(t,s),p=r.useRef(!1),g=_(()=>{let e=s.current;if(!n&&e){let t=new CustomEvent(en,{bubbles:!0,cancelable:!0});e.addEventListener(en,e=>a?.(e),{once:!0}),(0,u.hO)(e,t),t.defaultPrevented?p.current=!1:c.onClose()}},"handleSelect");return(0,C.jsx)(eo,{...l,ref:f,disabled:n,onClick:(0,o.mK)(e.onClick,g),onPointerDown:t=>{e.onPointerDown?.(t),p.current=!0},onPointerUp:(0,o.mK)(e.onPointerUp,e=>{p.current||e.currentTarget?.click()}),onKeyDown:(0,o.mK)(e.onKeyDown,e=>{n||e.target!==e.currentTarget||(""===d.searchRef.current||" "!==e.key)&&R.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})},"MenuItem")),eo=r.forwardRef(_(function(e,t){let{__scopeMenu:n,disabled:a=!1,textValue:l,...s}=e,c=H(et,n),d=F(n),f=r.useRef(null),p=(0,i.s)(t,f),[g,m]=r.useState(!1),[h,b]=r.useState("");return r.useEffect(()=>{let e=f.current;e&&b((e.textContent??"").trim())},[s.children]),(0,C.jsx)(E.ItemSlot,{scope:n,disabled:a,textValue:l??h,children:(0,C.jsx)(v.q7,{asChild:!0,...d,focusable:!a,children:(0,C.jsx)(u.sG.div,{role:"menuitem","data-highlighted":g?"":void 0,"aria-disabled":a||void 0,"data-disabled":a?"":void 0,...s,ref:p,onPointerMove:(0,o.mK)(e.onPointerMove,ew(e=>{a?c.onItemLeave(e):(c.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,o.mK)(e.onPointerLeave,ew(e=>c.onItemLeave(e))),onFocus:(0,o.mK)(e.onFocus,()=>m(!0)),onBlur:(0,o.mK)(e.onBlur,()=>m(!1))})})})},"MenuItemImpl")),[ei,ea]=I("MenuRadioGroup",{value:void 0,onValueChange:_(()=>{},"onValueChange")}),[el,eu]=I("MenuItemIndicator",{checked:!1}),es=r.forwardRef(_(function(e,t){let{__scopeMenu:n,...r}=e;return(0,C.jsx)(u.sG.div,{role:"separator","aria-orientation":"horizontal",...r,ref:t})},"MenuSeparator")),[ec,ed]=I("MenuSub");function ef(e){return e?"open":"closed"}function ep(e){return"indeterminate"===e}function eg(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function em(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function eh(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,o=n?e.indexOf(n):-1,i=em(e,Math.max(o,0));1===r.length&&(i=i.filter(e=>e!==n));let a=i.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return a!==n?a:void 0}function ev(e,t){let{x:n,y:r}=e,o=!1;for(let e=0,i=t.length-1;e<t.length;i=e++){let a=t[e],l=t[i],u=a.x,s=a.y,c=l.x,d=l.y;s>r!=d>r&&n<(c-u)*(r-s)/(d-s)+u&&(o=!o)}return o}function eb(e,t){return!!t&&ev({x:e.clientX,y:e.clientY},t)}function ew(e){return t=>"mouse"===t.pointerType?e(t):void 0}_(ef,"getOpenState"),_(ep,"isIndeterminate"),_(function(e){return ep(e)?"indeterminate":e?"checked":"unchecked"},"getCheckedState"),_(eg,"focusFirst"),_(em,"wrapArray"),_(eh,"getNextMatch"),_(ev,"isPointInPolygon"),_(eb,"isPointerInGraceArea"),_(ew,"whenMouse");var ey=n(88461),ex=Object.defineProperty,eC=(e,t)=>ex(e,"name",{value:t,configurable:!0}),ej="DropdownMenu",[e_,eR]=(0,a.A)(ej,[k]),eP=k(),[eD,eO]=e_(ej),eE=eC(e=>{let{__scopeDropdownMenu:t,children:n,dir:o,open:i,defaultOpen:a,onOpenChange:u,modal:s=!0}=e,c=eP(t),d=r.useRef(null),[f,p]=(0,l.i)({prop:i,defaultProp:a??!1,onChange:u,caller:ej});return(0,C.jsx)(eD,{scope:t,triggerId:(0,ey.B)(),triggerRef:d,contentId:(0,ey.B)(),open:f,onOpenChange:p,onOpenToggle:r.useCallback(()=>p(e=>!e),[p]),modal:s,children:(0,C.jsx)(G,{...c,open:f,onOpenChange:p,dir:o,modal:s,children:n})})},"DropdownMenu"),eS=r.forwardRef(eC(function(e,t){let{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,l=eO("DropdownMenuTrigger",n),s=eP(n),c=(0,i.s)(t,l.triggerRef);return(0,C.jsx)(U,{asChild:!0,...s,children:(0,C.jsx)(u.sG.button,{type:"button",id:l.triggerId,"aria-haspopup":"menu","aria-expanded":l.open,"aria-controls":l.open?l.contentId:void 0,"data-state":l.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...a,ref:c,onPointerDown:(0,o.mK)(e.onPointerDown,e=>{!r&&0===e.button&&!1===e.ctrlKey&&(l.onOpenToggle(),l.open||e.preventDefault())}),onKeyDown:(0,o.mK)(e.onKeyDown,e=>{!r&&(["Enter"," "].includes(e.key)&&l.onOpenToggle(),"ArrowDown"===e.key&&l.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(e.key)&&e.preventDefault())})})})},"DropdownMenuTrigger")),eM=eC(e=>{let{__scopeDropdownMenu:t,...n}=e,r=eP(t);return(0,C.jsx)(q,{...r,...n})},"DropdownMenuPortal"),eI=r.forwardRef(eC(function(e,t){let{__scopeDropdownMenu:n,...i}=e,a=eO("DropdownMenuContent",n),l=eP(n),u=r.useRef(!1);return(0,C.jsx)(X,{id:a.contentId,"aria-labelledby":a.triggerId,...l,...i,ref:t,onCloseAutoFocus:(0,o.mK)(e.onCloseAutoFocus,e=>{u.current||a.triggerRef.current?.focus(),u.current=!1,e.preventDefault()}),onInteractOutside:(0,o.mK)(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=0===t.button&&!0===t.ctrlKey,r=2===t.button||n;(!a.modal||r)&&(u.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})},"DropdownMenuContent")),ek=r.forwardRef(eC(function(e,t){let{__scopeDropdownMenu:n,...r}=e,o=eP(n);return(0,C.jsx)(ee,{...o,...r,ref:t})},"DropdownMenuLabel")),eA=r.forwardRef(eC(function(e,t){let{__scopeDropdownMenu:n,...r}=e,o=eP(n);return(0,C.jsx)(er,{...o,...r,ref:t})},"DropdownMenuItem")),eF=r.forwardRef(eC(function(e,t){let{__scopeDropdownMenu:n,...r}=e,o=eP(n);return(0,C.jsx)(es,{...o,...r,ref:t})},"DropdownMenuSeparator")),eT=eE,eL=eS,eK=eM,ez=eI,eG=ek,eU=eA,eB=eF},58013:(e,t,n)=>{n.d(t,{v:()=>a});var r=n(15814);let o=e=>{let t,n=new Set,r=(e,r)=>{let o="function"==typeof e?e(t):e;if(!Object.is(o,t)){let e=t;t=(null!=r?r:"object"!=typeof o||null===o)?o:Object.assign({},t,o),n.forEach(n=>n(t,e))}},o=()=>t,i={setState:r,getState:o,getInitialState:()=>a,subscribe:e=>(n.add(e),()=>n.delete(e))},a=t=e(r,o,i);return i},i=e=>{let t=e?o(e):o,n=e=>(function(e,t=e=>e){let n=r.useSyncExternalStore(e.subscribe,r.useCallback(()=>t(e.getState()),[e,t]),r.useCallback(()=>t(e.getInitialState()),[e,t]));return r.useDebugValue(n),n})(t,e);return Object.assign(n,t),n},a=e=>e?i(e):i},66967:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var n={VALID_LOADERS:function(){return o},imageConfigDefault:function(){return i}};for(var r in n)Object.defineProperty(t,r,{enumerable:!0,get:n[r]});let o=["default","imgix","cloudinary","akamai","custom"],i={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1}},69260:(e,t,n)=>{n.d(t,{UC:()=>L,VY:()=>B,ZL:()=>M,bL:()=>D,bm:()=>$,hE:()=>U,hJ:()=>k});var r=n(15814),o=n(52629),i=n(74612),a=n(67246),l=n(88461),u=n(79742),s=n(47670),c=n(73138),d=n(75211),f=n(14417),p=n(40144),g=n(99059),m=n(57109),h=n(6424),v=n(86029),b=n(80954),w=n(29798),y=Object.defineProperty,x=(e,t)=>y(e,"name",{value:t,configurable:!0}),C="Dialog",[j,_]=(0,a.A)(C),[R,P]=j(C),D=x(e=>{let{__scopeDialog:t,children:n,open:o,defaultOpen:i,onOpenChange:a,modal:s=!0}=e,c=r.useRef(null),d=r.useRef(null),[f,p]=(0,u.i)({prop:o,defaultProp:i??!1,onChange:a,caller:C}),[g,m]=r.useState(0),[h,v]=r.useState(0);return(0,w.jsx)(R,{scope:t,triggerRef:c,contentRef:d,contentId:(0,l.B)(),titleId:(0,l.B)(),descriptionId:(0,l.B)(),titlePresent:g>0,descriptionPresent:h>0,setTitleCount:m,setDescriptionCount:v,open:f,onOpenChange:p,onOpenToggle:r.useCallback(()=>p(e=>!e),[p]),modal:s,children:n})},"Dialog"),O="DialogPortal",[E,S]=j(O,{forceMount:void 0}),M=x(e=>{let{__scopeDialog:t,forceMount:n,children:o,container:i}=e,a=P(O,t);return(0,w.jsx)(E,{scope:t,forceMount:n,children:r.Children.map(o,e=>(0,w.jsx)(f.C,{present:n||a.open,children:(0,w.jsx)(d.Z,{asChild:!0,container:i,children:e})}))})},"DialogPortal"),I="DialogOverlay",k=r.forwardRef(x(function(e,t){let n=S(I,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=P(I,e.__scopeDialog);return i.modal?(0,w.jsx)(f.C,{present:r||i.open,children:(0,w.jsx)(F,{...o,ref:t})}):null},"DialogOverlay")),A=(0,b.TL)("DialogOverlay.RemoveScroll"),F=r.forwardRef(x(function(e,t){let{__scopeDialog:n,...r}=e,o=P(I,n),a=(0,s.e0)(),l=(0,i.s)(t,a);return(0,w.jsx)(h.A,{as:A,allowPinchZoom:!0,shards:[o.contentRef],children:(0,w.jsx)(p.sG.div,{"data-state":N(o.open),...r,ref:l,style:{pointerEvents:"auto",...r.style}})})},"DialogOverlayImpl")),T="DialogContent",L=r.forwardRef(x(function(e,t){let n=S(T,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=P(T,e.__scopeDialog);return(0,w.jsx)(f.C,{present:r||i.open,children:i.modal?(0,w.jsx)(K,{...o,ref:t}):(0,w.jsx)(z,{...o,ref:t})})},"DialogContent")),K=r.forwardRef(x(function(e,t){let n=P(T,e.__scopeDialog),a=r.useRef(null),l=(0,i.s)(t,n.contentRef,a);return r.useEffect(()=>{let e=a.current;if(e)return(0,v.Eq)(e)},[]),(0,w.jsx)(G,{...e,ref:l,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:(0,o.mK)(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:(0,o.mK)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=0===t.button&&!0===t.ctrlKey;(2===t.button||n)&&e.preventDefault()}),onFocusOutside:(0,o.mK)(e.onFocusOutside,e=>e.preventDefault())})},"DialogContentModal")),z=r.forwardRef(x(function(e,t){let n=P(T,e.__scopeDialog),o=r.useRef(!1),i=r.useRef(!1);return(0,w.jsx)(G,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(o.current||n.triggerRef.current?.focus(),t.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(o.current=!0,"pointerdown"===t.detail.originalEvent.type&&(i.current=!0));let r=t.target;n.triggerRef.current?.contains(r)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})},"DialogContentNonModal")),G=r.forwardRef(x(function(e,t){let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:i,...a}=e,l=P(T,n);return(0,g.Oh)(),(0,w.jsx)(w.Fragment,{children:(0,w.jsx)(c.n,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:i,children:(0,w.jsx)(s.qW,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionPresent?l.descriptionId:void 0,"aria-labelledby":l.titlePresent?l.titleId:void 0,"data-state":N(l.open),...a,ref:t,deferPointerDownOutside:!0,onDismiss:()=>l.onOpenChange(!1)})})})},"DialogContentImpl")),U=r.forwardRef(x(function(e,t){let{__scopeDialog:n,...r}=e,o=P("DialogTitle",n),{setTitleCount:i}=o;return(0,m.N)(()=>(i(e=>e+1),()=>i(e=>e-1)),[i]),(0,w.jsx)(p.sG.h2,{id:o.titleId,...r,ref:t})},"DialogTitle")),B=r.forwardRef(x(function(e,t){let{__scopeDialog:n,...r}=e,o=P("DialogDescription",n),{setDescriptionCount:i}=o;return(0,m.N)(()=>(i(e=>e+1),()=>i(e=>e-1)),[i]),(0,w.jsx)(p.sG.p,{id:o.descriptionId,...r,ref:t})},"DialogDescription")),$=r.forwardRef(x(function(e,t){let{__scopeDialog:n,...r}=e,i=P("DialogClose",n);return(0,w.jsx)(p.sG.button,{type:"button",...r,ref:t,onClick:(0,o.mK)(e.onClick,()=>i.onOpenChange(!1))})},"DialogClose"));function N(e){return e?"open":"closed"}x(N,"getState")},69763:(e,t)=>{function n({widthInt:e,heightInt:t,blurWidth:r,blurHeight:o,blurDataURL:i,objectFit:a}){let l=r?40*r:e,u=o?40*o:t,s=l&&u?`viewBox='0 0 ${l} ${u}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${s}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${s?"none":"contain"===a?"xMidYMid":"cover"===a?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${i}'/%3E%3C/svg%3E`}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getImageBlurSvg",{enumerable:!0,get:function(){return n}})},73639:(e,t,n)=>{n.d(t,{b:()=>f});var r=n(15814),o=n(40144),i=n(29798),a=Object.defineProperty,l=(e,t)=>a(e,"name",{value:t,configurable:!0}),u="horizontal",s=["horizontal","vertical"],c=r.forwardRef(l(function(e,t){let{decorative:n,orientation:r=u,...a}=e,l=d(r)?r:u;return(0,i.jsx)(o.sG.div,{"data-orientation":l,...n?{role:"none"}:{"aria-orientation":"vertical"===l?l:void 0,role:"separator"},...a,ref:t})},"Separator"));function d(e){return s.includes(e)}l(d,"isValidOrientation");var f=c},80514:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});var r={default:function(){return c},getImageProps:function(){return s}};for(var o in r)Object.defineProperty(t,o,{enumerable:!0,get:r[o]});let i=n(27926),a=n(1674),l=n(34098),u=i._(n(35994));function s(e){let{props:t}=(0,a.getImgProps)(e,{defaultLoader:u.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!0}});for(let[e,n]of Object.entries(t))void 0===n&&delete t[e];return{props:t}}let c=l.Image}}]);
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9369],{15764:(e,t,r)=>{r.d(t,{CK:()=>o.default,G9:()=>u.default,Iz:()=>g.default,KX:()=>v.PanelSkeleton,LF:()=>l.default,LH:()=>x.default,Mu:()=>v.StatCardSkeleton,Nf:()=>d.default,Qv:()=>s.CardSkeleton,YW:()=>b.YW,gw:()=>p.default,jK:()=>c.default,nh:()=>j.default,pV:()=>b.pV,rq:()=>n.default,uR:()=>i.default,uo:()=>a.ConfirmModal,vE:()=>m.default,vj:()=>f.default,wI:()=>h.default,wn:()=>b.wn,zY:()=>b.zY}),r(58913);var a=r(3537),s=r(58350);r(30872),r(33526),r(42535),r(1279);var l=r(92802),n=r(25908),i=r(58729),o=r(24873),d=r(5258),c=r(80599);r(949),r(56776),r(53599),r(88336),r(69561);var u=r(37753),x=r(23444),m=r(93624),f=r(86920),h=r(65461);r(14580);var p=r(14670),g=r(70296);r(57779),r(22205);var v=r(43276),j=r(75862),b=r(92412)},21796:(e,t,r)=>{r.d(t,{A:()=>x});var a=r(29798),s=r(58913),l=r(15814),n=r(53784);function i({until:e}){let[t,r]=(0,l.useState)("");return((0,l.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void r("");let a=Math.floor(t/1e3);if(a<60)r(`${a}s`);else if(a<3600)r(`${Math.floor(a/60)}m ${a%60}s`);else{let e=Math.floor(a/3600),t=Math.floor(a%3600/60);r(`${e}h ${t}m`)}};t();let a=setInterval(t,1e3);return()=>clearInterval(a)},[e]),t)?(0,a.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}var o=r(14231),d=r(1352);function c(e){return"success"===e||"primary"===e?"default":"error"===e?"destructive":"warning"===e||"info"===e?"secondary":"destructive"===e||"secondary"===e||"outline"===e||"ghost"===e||"link"===e?e:"default"}function u({variant:e}){return(0,a.jsx)("span",{className:`size-1.5 rounded-full ${"success"===e||"primary"===e?"bg-green-500":"error"===e?"bg-red-500":"bg-gray-500"}`})}function x({connection:e,proxyPools:t,isOAuth:r,isFirst:m,isLast:f,onMoveUp:h,onMoveDown:p,onToggleActive:g,onUpdateProxy:v,onEdit:j,onDelete:b,oneByOneStatus:y=null,autoPing:w=null}){let[k,N]=(0,l.useState)(!1),[C,$]=(0,l.useState)(!1),_=(0,l.useRef)(null),A=new Map((t||[]).map(e=>[e.id,e])),E=e.providerSpecificData?.proxyPoolId||null,P=E?A.get(E):null,S=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,D=!!E||S,I=P?`Pool: ${P.name}`:E?`Pool: ${E} (inactive/missing)`:S?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",L=w?.provider==="codex"?"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota.":"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",U="";if(P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);U=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{U=t}}let q=P?.noProxy||e.providerSpecificData?.connectionNoProxy||"",z="default";P?.isActive===!0?z="success":(E||S)&&(z="error"),(0,l.useEffect)(()=>{if(!k)return;let e=e=>{_.current&&!_.current.contains(e.target)&&N(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[k]);let M=async e=>{$(!0);try{await v("__none__"===e?null:e)}finally{$(!1),N(!1)}},W=e.authType||(r?"oauth":"apikey"),Y="oauth"===W,K="cookie"===W,Z=e.name?.trim()||e.email?.trim()||e.displayName?.trim()||(Y?"OAuth Account":K?"Cookie Account":"API Key"),O=e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null,[T,R]=(0,l.useState)(!1),V=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,l.useEffect)(()=>{let t=()=>{R(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let r=V?setInterval(t,1e3):null;return()=>{r&&clearInterval(r)}},[V]);let G="unavailable"!==e.testStatus||T?e.testStatus:"active",H=()=>{var t;return t=e.isActive,!1===t?"default":"active"===G||"success"===G?"success":"error"===G||"expired"===G||"unavailable"===G?"error":"default"},F=()=>y?"queued"===y.state?"queued":"testing"===y.state?"testing":"success"===y.state?"success":"failed"===y.state?y.error?`failed: ${y.error}`:"failed":null:null;return(0,a.jsxs)("div",{className:`group flex min-w-0 flex-col gap-3 rounded-lg p-2 transition-colors hover:bg-black/[0.02] dark:hover:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 flex-col",children:[(0,a.jsx)("button",{onClick:h,disabled:m,className:`p-0.5 rounded ${m?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_up",className:"text-sm"})}),(0,a.jsx)("button",{onClick:p,disabled:f,className:`p-0.5 rounded ${f?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_down",className:"text-sm"})})]}),(0,a.jsx)(s.default,{name:K?"cookie":Y?"lock":"key",className:"shrink-0 text-base text-muted-foreground"}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:Z}),O&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:O}),(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[(0,a.jsxs)(n.E,{variant:c(H()),children:[(0,a.jsx)(u,{variant:H()}),!1===e.isActive?"disabled":G||"Unknown"]}),(0,a.jsx)(n.E,{variant:"default",children:Y?"OAuth":K?"Cookie":"API Key"}),D&&(0,a.jsx)(n.E,{variant:c(z),children:"Proxy"}),T&&!1!==e.isActive&&(0,a.jsx)(i,{until:V}),e.lastError&&!1!==e.isActive&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-xs text-red-500 sm:max-w-[300px]",children:e.lastError})}),(0,a.jsx)(d.ZI,{children:e.lastError})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["#",e.priority]}),e.globalPriority&&(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Auto: ",e.globalPriority]}),F()&&(0,a.jsx)(n.E,{variant:c(y?"success"===y.state?"success":"failed"===y.state?"error":"testing"===y.state?"primary":"default":"default"),children:F()})]}),D&&(0,a.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[420px]",children:I})}),(0,a.jsx)(d.ZI,{children:I})]}),U&&(0,a.jsx)("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-muted-foreground dark:bg-white/5 sm:max-w-[260px]",children:U}),q&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsxs)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[320px]",children:["no_proxy: ",q]})}),(0,a.jsx)(d.ZI,{children:q})]})]})]})]}),(0,a.jsxs)("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[(0,a.jsxs)("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(t||[]).length>0&&(0,a.jsxs)("div",{className:"relative",ref:_,children:[(0,a.jsxs)("button",{onClick:()=>N(e=>!e),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${D?"text-primary":"text-muted-foreground hover:text-primary"}`,disabled:C,children:[(0,a.jsx)(s.default,{name:C?"progress_activity":"lan",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),k&&(0,a.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-background py-1 shadow-lg",children:[(0,a.jsx)("button",{onClick:()=>M("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!E?"text-primary font-medium":"text-foreground"}`,children:"None"}),(t||[]).map(e=>(0,a.jsx)("button",{onClick:()=>M(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${E===e.id?"text-primary font-medium":"text-foreground"}`,children:e.name},e.id))]})]}),w&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsxs)("button",{onClick:()=>w.onToggle(!w.on),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${w.on?"text-primary":"text-muted-foreground hover:text-primary"}`,children:[(0,a.jsx)(s.default,{name:"bolt",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Auto-ping"})]})})}),(0,a.jsx)(d.ZI,{children:L})]}),(0,a.jsxs)("button",{onClick:j,className:"flex flex-col items-center rounded px-2 py-1 text-muted-foreground hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[(0,a.jsx)(s.default,{name:"edit",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,a.jsxs)("button",{onClick:b,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[(0,a.jsx)(s.default,{name:"delete",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)(o.d,{size:"sm",checked:e.isActive??!0,onCheckedChange:g,"aria-label":e.isActive??!0?"Disable connection":"Enable connection"})}),(0,a.jsx)(d.ZI,{side:"top",children:e.isActive??!0?"Disable connection":"Enable connection"})]})]})]})}},92412:(e,t,r)=>{r.d(t,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),r(16675),r(72778);var a=r(29575)}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9369],{15764:(e,t,r)=>{r.d(t,{CK:()=>o.default,G9:()=>u.default,Iz:()=>g.default,KX:()=>v.PanelSkeleton,LF:()=>l.default,LH:()=>x.default,Mu:()=>v.StatCardSkeleton,Nf:()=>d.default,Qv:()=>s.CardSkeleton,YW:()=>b.YW,gw:()=>p.default,jK:()=>c.default,nh:()=>j.default,pV:()=>b.pV,rq:()=>n.default,uR:()=>i.default,uo:()=>a.ConfirmModal,vE:()=>m.default,vj:()=>f.default,wI:()=>h.default,wn:()=>b.wn,zY:()=>b.zY}),r(58913);var a=r(3537),s=r(58350);r(30872),r(33526),r(42535),r(1279);var l=r(92802),n=r(25908),i=r(58729),o=r(24873),d=r(5258),c=r(80599);r(949),r(56776),r(53599),r(77063),r(69561);var u=r(37753),x=r(23444),m=r(93624),f=r(86920),h=r(65461);r(14580);var p=r(14670),g=r(70296);r(57779),r(22205);var v=r(43276),j=r(75862),b=r(92412)},21796:(e,t,r)=>{r.d(t,{A:()=>x});var a=r(29798),s=r(58913),l=r(15814),n=r(53784);function i({until:e}){let[t,r]=(0,l.useState)("");return((0,l.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void r("");let a=Math.floor(t/1e3);if(a<60)r(`${a}s`);else if(a<3600)r(`${Math.floor(a/60)}m ${a%60}s`);else{let e=Math.floor(a/3600),t=Math.floor(a%3600/60);r(`${e}h ${t}m`)}};t();let a=setInterval(t,1e3);return()=>clearInterval(a)},[e]),t)?(0,a.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}var o=r(14231),d=r(1352);function c(e){return"success"===e||"primary"===e?"default":"error"===e?"destructive":"warning"===e||"info"===e?"secondary":"destructive"===e||"secondary"===e||"outline"===e||"ghost"===e||"link"===e?e:"default"}function u({variant:e}){return(0,a.jsx)("span",{className:`size-1.5 rounded-full ${"success"===e||"primary"===e?"bg-green-500":"error"===e?"bg-red-500":"bg-gray-500"}`})}function x({connection:e,proxyPools:t,isOAuth:r,isFirst:m,isLast:f,onMoveUp:h,onMoveDown:p,onToggleActive:g,onUpdateProxy:v,onEdit:j,onDelete:b,oneByOneStatus:y=null,autoPing:w=null}){let[k,N]=(0,l.useState)(!1),[C,$]=(0,l.useState)(!1),_=(0,l.useRef)(null),A=new Map((t||[]).map(e=>[e.id,e])),E=e.providerSpecificData?.proxyPoolId||null,P=E?A.get(E):null,S=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,D=!!E||S,I=P?`Pool: ${P.name}`:E?`Pool: ${E} (inactive/missing)`:S?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",L=w?.provider==="codex"?"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota.":"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",U="";if(P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);U=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{U=t}}let q=P?.noProxy||e.providerSpecificData?.connectionNoProxy||"",z="default";P?.isActive===!0?z="success":(E||S)&&(z="error"),(0,l.useEffect)(()=>{if(!k)return;let e=e=>{_.current&&!_.current.contains(e.target)&&N(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[k]);let M=async e=>{$(!0);try{await v("__none__"===e?null:e)}finally{$(!1),N(!1)}},W=e.authType||(r?"oauth":"apikey"),Y="oauth"===W,K="cookie"===W,Z=e.name?.trim()||e.email?.trim()||e.displayName?.trim()||(Y?"OAuth Account":K?"Cookie Account":"API Key"),O=e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null,[T,R]=(0,l.useState)(!1),V=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,l.useEffect)(()=>{let t=()=>{R(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let r=V?setInterval(t,1e3):null;return()=>{r&&clearInterval(r)}},[V]);let G="unavailable"!==e.testStatus||T?e.testStatus:"active",H=()=>{var t;return t=e.isActive,!1===t?"default":"active"===G||"success"===G?"success":"error"===G||"expired"===G||"unavailable"===G?"error":"default"},F=()=>y?"queued"===y.state?"queued":"testing"===y.state?"testing":"success"===y.state?"success":"failed"===y.state?y.error?`failed: ${y.error}`:"failed":null:null;return(0,a.jsxs)("div",{className:`group flex min-w-0 flex-col gap-3 rounded-lg p-2 transition-colors hover:bg-black/[0.02] dark:hover:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 flex-col",children:[(0,a.jsx)("button",{onClick:h,disabled:m,className:`p-0.5 rounded ${m?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_up",className:"text-sm"})}),(0,a.jsx)("button",{onClick:p,disabled:f,className:`p-0.5 rounded ${f?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_down",className:"text-sm"})})]}),(0,a.jsx)(s.default,{name:K?"cookie":Y?"lock":"key",className:"shrink-0 text-base text-muted-foreground"}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:Z}),O&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:O}),(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[(0,a.jsxs)(n.E,{variant:c(H()),children:[(0,a.jsx)(u,{variant:H()}),!1===e.isActive?"disabled":G||"Unknown"]}),(0,a.jsx)(n.E,{variant:"default",children:Y?"OAuth":K?"Cookie":"API Key"}),D&&(0,a.jsx)(n.E,{variant:c(z),children:"Proxy"}),T&&!1!==e.isActive&&(0,a.jsx)(i,{until:V}),e.lastError&&!1!==e.isActive&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-xs text-red-500 sm:max-w-[300px]",children:e.lastError})}),(0,a.jsx)(d.ZI,{children:e.lastError})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["#",e.priority]}),e.globalPriority&&(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Auto: ",e.globalPriority]}),F()&&(0,a.jsx)(n.E,{variant:c(y?"success"===y.state?"success":"failed"===y.state?"error":"testing"===y.state?"primary":"default":"default"),children:F()})]}),D&&(0,a.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[420px]",children:I})}),(0,a.jsx)(d.ZI,{children:I})]}),U&&(0,a.jsx)("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-muted-foreground dark:bg-white/5 sm:max-w-[260px]",children:U}),q&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsxs)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[320px]",children:["no_proxy: ",q]})}),(0,a.jsx)(d.ZI,{children:q})]})]})]})]}),(0,a.jsxs)("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[(0,a.jsxs)("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(t||[]).length>0&&(0,a.jsxs)("div",{className:"relative",ref:_,children:[(0,a.jsxs)("button",{onClick:()=>N(e=>!e),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${D?"text-primary":"text-muted-foreground hover:text-primary"}`,disabled:C,children:[(0,a.jsx)(s.default,{name:C?"progress_activity":"lan",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),k&&(0,a.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-background py-1 shadow-lg",children:[(0,a.jsx)("button",{onClick:()=>M("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!E?"text-primary font-medium":"text-foreground"}`,children:"None"}),(t||[]).map(e=>(0,a.jsx)("button",{onClick:()=>M(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${E===e.id?"text-primary font-medium":"text-foreground"}`,children:e.name},e.id))]})]}),w&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsxs)("button",{onClick:()=>w.onToggle(!w.on),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${w.on?"text-primary":"text-muted-foreground hover:text-primary"}`,children:[(0,a.jsx)(s.default,{name:"bolt",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Auto-ping"})]})})}),(0,a.jsx)(d.ZI,{children:L})]}),(0,a.jsxs)("button",{onClick:j,className:"flex flex-col items-center rounded px-2 py-1 text-muted-foreground hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[(0,a.jsx)(s.default,{name:"edit",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,a.jsxs)("button",{onClick:b,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[(0,a.jsx)(s.default,{name:"delete",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)(o.d,{size:"sm",checked:e.isActive??!0,onCheckedChange:g,"aria-label":e.isActive??!0?"Disable connection":"Enable connection"})}),(0,a.jsx)(d.ZI,{side:"top",children:e.isActive??!0?"Disable connection":"Enable connection"})]})]})]})}},92412:(e,t,r)=>{r.d(t,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),r(16675),r(72778);var a=r(29575)}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{10145:(e,t,r)=>{Promise.resolve().then(r.bind(r,23928))},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var a=r(29798);r(15814);var i=r(54366),s=r(5471),n=r(80954);let o=(0,i.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function l({className:e,variant:t="default",size:r="default",asChild:i=!1,...d}){let c=i?n.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,s.cn)(o({variant:t,size:r,className:e})),...d})}},23928:(e,t,r)=>{"use strict";r.d(t,{default:()=>N});var a=r(29798),i=r(58913),s=r(15814),n=r(69394),o=r(69024),l=r(53784),d=r(18055),c=r(80159),u=r(13794);o.xI.setOptions({gfm:!0,breaks:!0});let m="basic-chat.sessions",p="basic-chat.activeSessionId",h="basic-chat.activeProviderId",x="basic-chat.draft";function f(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function g(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(g).filter(Boolean).join(" ");if("object"==typeof e){if("string"==typeof e.message)return e.message;if("string"==typeof e.error)return e.error;try{return JSON.stringify(e)}catch{}}return String(e)}function v(e=""){let t=g(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}function b({text:e}){let t=g(e),r=(0,s.useMemo)(()=>t?n.A.sanitize(o.xI.parse(t,{async:!1})):"",[t]);return null===r?(0,a.jsx)("span",{className:"whitespace-pre-wrap break-words",children:t}):(0,a.jsx)("div",{className:"chat-markdown break-words",dangerouslySetInnerHTML:{__html:r}})}async function w(e){return await new Promise((t,r)=>{let a=new FileReader;a.onload=()=>t(String(a.result||"")),a.onerror=()=>r(a.error||Error("Failed to read file")),a.readAsDataURL(e)})}function y(e){return e?.name||function(e=""){return String(e).replace(/[-_]/g," ").replace(/\b\w/g,e=>e.toUpperCase()).trim()||"Unknown"}(e?.provider||e?.id||"provider")}function N(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(!0),[o,N]=(0,s.useState)(""),[j,_]=(0,s.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(m),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[k,S]=(0,s.useState)(()=>globalThis.localStorage.getItem(p)||""),[I,C]=(0,s.useState)(()=>globalThis.localStorage.getItem(h)||""),[A,O]=(0,s.useState)(""),[M,D]=(0,s.useState)(()=>globalThis.localStorage.getItem(x)||""),[T,z]=(0,s.useState)([]),[L,R]=(0,s.useState)(!1),[U,$]=(0,s.useState)(""),[E,P]=(0,s.useState)(""),[B,q]=(0,s.useState)(!1),[F,H]=(0,s.useState)(!1),[W,J]=(0,s.useState)(!1),K=(0,s.useRef)(null),X=(0,s.useRef)(null),G=(0,s.useRef)(!1),V=(0,s.useRef)(null),Z=(0,s.useRef)(null);(0,s.useEffect)(()=>{q(!0)},[]),(0,s.useEffect)(()=>{let e=!1;return async function(){n(!0),N("");try{let r=await fetch("/api/providers",{cache:"no-store"}),a=await r.json().catch(()=>({})),i=Array.isArray(a.connections)?a.connections.filter(e=>e?.isActive!==!1):[];if(0===i.length){e||(t([]),N("No providers connected yet."));return}let s=new Map;for(let e of i){let t=e.provider||e.id,r=y(e),a=(0,u.mq)(t)?"openai-compatible":(0,u.gb)(t)?"anthropic-compatible":t;s.has(t)||s.set(t,{providerId:t,providerName:r,providerType:a,connections:[],models:[]});let i=s.get(t);i.providerName=i.providerName||r,i.providerType=i.providerType||a,i.connections.push(e);let n=(0,c.KC)(t).map(t=>t?.id?{id:`${e.provider}/${t.id}`,requestModel:`${e.provider}/${t.id}`,name:t.name||t.id,providerId:e.provider,providerName:y(e),source:"static"}:null).filter(Boolean);i.models.push(...n)}for(let e of(await Promise.all(i.map(async e=>{try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)return{connection:e,models:[]};let a=(Array.isArray(r?.models)?r.models:Array.isArray(r?.data)?r.data:Array.isArray(r?.results)?r.results:Array.isArray(r)?r:[]).map(t=>(function(e,t){let r="string"==typeof e?e:e?.id||e?.name||e?.model||"";if(!r)return null;let a="string"==typeof e?e:e?.name||e?.displayName||r,i=r;return((0,u.mq)(t.provider)||(0,u.gb)(t.provider))&&!r.includes("/")&&(i=`${t.provider}/${r}`),{id:i,requestModel:i,name:a,providerId:t.provider,providerName:y(t),source:"live"}})(t,e)).filter(Boolean);return{connection:e,models:a}}catch{return{connection:e,models:[]}}})))){let t=e.connection.provider||e.connection.id,r=s.get(t);r&&r.models.push(...e.models)}let n=Array.from(s.values()).map(e=>({...e,models:(function(e){let t=new Map;for(let r of e)r?.id&&(t.has(r.id)||t.set(r.id,r));return Array.from(t.values())})(e.models).sort((e,t)=>e.name.localeCompare(t.name))})).filter(e=>e.models.length>0).sort((e,t)=>e.providerName.localeCompare(t.providerName));e||(t(n),0===n.length&&N("Providers connected but no models available."))}catch(r){e||(N(g(r?.message)||"Failed to load providers/models."),t([]))}finally{e||n(!1)}}(),()=>{e=!0}},[]),(0,s.useEffect)(()=>{let e=e=>{V.current&&!V.current.contains(e.target)&&H(!1),Z.current&&!Z.current.contains(e.target)&&J(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let Q=(0,s.useMemo)(()=>{let t=new Map;for(let r of e)for(let e of r.models)t.set(e.id,{...e,providerId:r.providerId,providerName:r.providerName});return t},[e]),Y=(0,s.useMemo)(()=>e.find(e=>e.providerId===I)||e[0]||null,[e,I]),ee=(0,s.useMemo)(()=>{if(A&&Q.has(A))return Q.get(A);if(k){let e=j.find(e=>e.id===k);if(e?.modelId&&Q.has(e.modelId))return Q.get(e.modelId)}return Y?.models?.[0]||null},[A,Q,Y,j,k]),et=(0,s.useMemo)(()=>j.find(e=>e.id===k)||null,[j,k]),er=et?.messages||[],ea=(0,s.useMemo)(()=>[...j].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[j]),ei=!L&&!!ee&&(M.trim().length>0||T.length>0);(0,s.useEffect)(()=>{if(B)try{globalThis.localStorage.setItem(m,JSON.stringify(j)),globalThis.localStorage.setItem(p,k),globalThis.localStorage.setItem(h,I),globalThis.localStorage.setItem(x,M)}catch{}},[B,j,k,I,M]),(0,s.useEffect)(()=>{if(!B||r||G.current||0===e.length)return;let t=e.find(e=>e.providerId===I)||e[0],a=A&&Q.has(A)?Q.get(A):t.models[0];if(j.length>0){let e=j.find(e=>e.id===k)||j[0],r=e?.modelId&&Q.has(e.modelId)?Q.get(e.modelId):a;G.current=!0,S(e.id),C(r?.providerId||t.providerId),O(r?.id||a.id);return}let i={id:f(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:a.id,modelName:a.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};G.current=!0,_([i]),S(i.id),C(t.providerId),O(a.id)},[B,r,e,Q,j,k,I,A]);let es=(e,t)=>{_(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},en=e=>e?{id:f(),title:"New chat",providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]}:null,eo=async e=>{let t=Array.from(e.target.files||[]);if(0===t.length)return;let r=t.filter(e=>e.type.startsWith("image/"));if(0===r.length){e.target.value="";return}let a=await Promise.all(r.map(async e=>({id:f(),name:e.name,type:e.type,size:e.size,dataUrl:await w(e)})));z(e=>[...e,...a]),e.target.value=""},el=async()=>{let e=ee||Y?.models?.[0]||null;if(!e)return;let t=M.trim();if(!t&&0===T.length)return;let r=k,a=j.find(e=>e.id===r);if(!a){if(!(a=en(e)))return;r=a.id,_(e=>[a,...e]),S(r)}let i={id:f(),role:"user",content:t,attachments:T.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},s=f(),n={id:s,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},o=[...a.messages||[],i,n];_(a=>a.map(a=>a.id===r?{...a,providerId:e.providerId,providerName:e.providerName,modelId:e.id,modelName:e.name,messages:o,updatedAt:new Date().toISOString(),title:"New chat"===a.title?v(t):a.title}:a)),D(""),z([]),R(!0),$(s),P(""),X.current?.abort(),X.current=new AbortController;let l=o.filter(e=>"assistant"!==e.role||e.id!==s).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=g(e.content).trim(),r=Array.isArray(e.attachments)?e.attachments:[];if(0===r.length)return t;let a=[];for(let e of(t&&a.push({type:"text",text:t}),r))e?.dataUrl&&a.push({type:"image_url",image_url:{url:e.dataUrl}});return a.length>0?a:t}(e):e.content}));try{var d;let a,i=await fetch("/api/dashboard/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},body:JSON.stringify({model:e.requestModel||e.id,messages:l,stream:!0}),signal:X.current.signal});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(g(e.error||e.message||`Request failed (${i.status})`))}let n=i.body?.getReader();if(!n){let e=await i.json().catch(()=>({})),t=g(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");es(r,e=>({...e,messages:e.messages.map(e=>e.id===s?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let o=new TextDecoder,c="",u="",m="";for(;;){let{value:e,done:t}=await n.read();if(t)break;let a=(c+=o.decode(e,{stream:!0})).split(/\r?\n/);for(let e of(c=a.pop()||"",a)){let t=e.trim();if(!t.startsWith("data:"))continue;let a=t.slice(5).trim();if(a&&"[DONE]"!==a)try{let e=JSON.parse(a),t=e&&"object"==typeof e?e.error?g(e.error)||"Request failed":"error"===e.type?g(e.message)||"Request failed":"":"";if(t){m=t;continue}let i=function(e){if(!e||"object"!=typeof e)return"";let t=e.choices?.[0];return[(t?.delta||{}).content,t?.message?.content,e.output_text,e.text].map(g).filter(Boolean)[0]||""}(e);if(!i)continue;u+=i,P(u),es(r,e=>({...e,messages:e.messages.map(e=>e.id===s?{...e,content:u,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}es(r,e=>({...e,messages:e.messages.map(e=>e.id!==s?e:!u&&m?{...e,content:e.content||m,status:"error"}:{...e,content:u||e.content,status:"done"}),updatedAt:new Date().toISOString()})),!u&&m&&N(m),d=r,a=v(t),es(d,e=>({...e,title:"New chat"===e.title?a:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"!==e.name){let t=g(e?.message||e);es(r,e=>({...e,messages:e.messages.map(e=>e.id===s?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),N(t||"Failed to send message.")}}finally{R(!1),$(""),P(""),X.current=null}},ed=ee?`${ee.name}`:"Select model",ec=ee?ee.requestModel:"Choose from connected providers";return(0,a.jsx)("div",{className:"relative flex-1 flex flex-col h-full min-h-0 min-w-0 bg-[#212121] text-white overflow-hidden",children:(0,a.jsxs)("div",{className:"relative mx-auto flex flex-1 h-full min-h-0 w-full max-w-4xl flex-col",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-3 px-4 py-3 lg:px-6",children:[(0,a.jsxs)("div",{ref:V,className:"relative",children:[(0,a.jsx)("button",{type:"button",onClick:()=>H(e=>!e),className:"flex items-center gap-3 rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-left transition hover:bg-white/8",children:(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-semibold text-white",children:ed}),(0,a.jsx)(i.default,{name:"expand_more",className:"text-[18px] text-white/70"})]}),(0,a.jsx)("p",{className:"truncate text-xs text-white/55",children:ec})]})}),F?(0,a.jsxs)("div",{className:"absolute left-0 top-[calc(100%+10px)] z-30 w-[min(520px,calc(100vw-2rem))] overflow-hidden rounded-[20px] border border-white/10 bg-[#262626] shadow-2xl shadow-black/50",children:[(0,a.jsxs)("div",{className:"border-b border-white/10 px-4 py-3",children:[(0,a.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Models"}),(0,a.jsx)("p",{className:"text-sm text-white/75",children:"Only from connected providers"})]}),(0,a.jsx)("div",{className:"max-h-[60vh] overflow-y-auto p-2",children:e.map(e=>(0,a.jsxs)("div",{className:"mb-2 rounded-[16px] border border-white/10 bg-black/20 p-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-2 py-2",children:[(0,a.jsx)("p",{className:"text-sm font-semibold text-white",children:e.providerName}),(0,a.jsx)(l.E,{children:e.models.length})]}),(0,a.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:e.models.map(e=>{let t=e.id===A;return(0,a.jsx)("button",{type:"button",onClick:()=>(e=>{let t=Q.get(e);if(!t)return;let r=j.find(e=>e.id===k);if(r&&r.messages.length>0){let e=en(t);if(!e)return;_(t=>[e,...t]),S(e.id)}else if(r)_(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),S(r.id);else{let e=en(t);if(!e)return;_(t=>[e,...t]),S(e.id)}C(t.providerId),O(t.id),H(!1)})(e.id),className:`rounded-[14px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.name}),(0,a.jsx)("p",{className:"truncate text-[11px] text-white/45",children:e.requestModel})]}),t?(0,a.jsx)(i.default,{name:"check_circle",className:"text-[18px] text-blue-300"}):null]})},e.id)})})]},e.providerId))})]}):null]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>J(e=>!e),className:"rounded-2xl border border-white/10 bg-white/5 px-4 py-3 text-sm text-white/80 transition hover:bg-white/8",children:"History"}),(0,a.jsxs)(d.$,{variant:"ghost",size:"sm",onClick:()=>{if(!k)return;let e=j.filter(e=>e.id!==k),t=e[0]||null;_(e),t?(S(t.id),C(t.providerId),O(t.modelId)):(S(""),C(""),O(""))},disabled:!k||0===j.length,children:[(0,a.jsx)(i.default,{name:"delete"}),"Clear"]})]})]}),W?(0,a.jsxs)("div",{ref:Z,className:"absolute right-4 top-[72px] z-20 w-[min(360px,calc(100vw-2rem))] rounded-[20px] border border-white/10 bg-[#262626] p-2 shadow-2xl shadow-black/50 lg:right-6",children:[(0,a.jsx)("div",{className:"px-3 py-2",children:(0,a.jsx)("p",{className:"text-xs uppercase tracking-[0.22em] text-white/45",children:"Recent chats"})}),(0,a.jsx)("div",{className:"max-h-[48vh] space-y-2 overflow-y-auto p-1",children:0===ea.length?(0,a.jsx)("div",{className:"rounded-[16px] border border-dashed border-white/10 bg-white/5 p-4 text-sm text-white/55",children:"No conversations yet."}):ea.map(e=>{let t=e.id===k,r=[...e.messages||[]].reverse().find(e=>"user"===e.role)||e.messages?.[0];return(0,a.jsx)("button",{type:"button",onClick:()=>{var t;let r;return t=e.id,void((r=j.find(e=>e.id===t))&&(S(t),C(r.providerId||I),O(r.modelId||A),J(!1)))},className:`w-full rounded-[16px] border px-3 py-3 text-left transition ${t?"border-blue-400/40 bg-blue-500/15":"border-white/10 bg-white/5 hover:bg-white/8"}`,children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"truncate text-sm font-medium text-white",children:e.title}),(0,a.jsx)("p",{className:"mt-1 truncate text-xs text-white/50",children:g(r?.content)||"Empty chat"})]}),(0,a.jsx)("span",{className:"text-[10px] text-white/40 shrink-0",children:function(e){if(!e)return"Now";let t=new Date(e).getTime();if(Number.isNaN(t))return"Now";let r=Math.max(1,Math.round((Date.now()-t)/6e4));if(r<60)return`${r}m`;let a=Math.round(r/60);return a<24?`${a}h`:`${Math.round(a/24)}d`}(e.updatedAt)})]})},e.id)})})]}):null,o?(0,a.jsx)("div",{className:"mt-4 rounded-[18px] border border-rose-500/20 bg-rose-500/10 px-4 py-3 text-rose-100",children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(i.default,{name:"error",className:"text-[20px]"}),(0,a.jsx)("p",{className:"text-sm leading-6",children:o})]})}):null,(0,a.jsxs)("div",{className:"flex flex-1 flex-col min-h-0",children:[(0,a.jsxs)("div",{className:"flex-1 overflow-y-auto py-4",children:[0===er.length?(0,a.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center px-4 text-center",children:(0,a.jsxs)("div",{className:"max-w-xl space-y-4",children:[(0,a.jsx)("div",{className:"mx-auto flex size-16 items-center justify-center rounded-[20px] border border-white/10 bg-white/5 text-white/80",children:(0,a.jsx)(i.default,{name:"chat",className:"text-[30px]"})}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("h2",{className:"text-2xl font-semibold text-white",children:"Start a conversation"}),(0,a.jsx)("p",{className:"text-sm leading-6 text-white/60",children:"Simple chat interface to interact with any AI model from connected providers. Select a model and start chatting!"})]})]})}):null,(0,a.jsx)("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-4 px-4",children:er.map(e=>{let t="user"===e.role,r="assistant"===e.role,i=r&&e.id===U&&"streaming"===e.status,s=g(e.content)||(r?E:"");return(0,a.jsx)("div",{className:`flex w-full ${t?"justify-end":"justify-start"} mb-6`,children:(0,a.jsxs)("div",{className:`max-w-[min(88%,42rem)] ${t?"rounded-3xl bg-[#2f2f2f] px-5 py-3.5 text-white":"text-white/90"}`,children:[(0,a.jsx)("div",{className:"mb-1 flex items-center justify-between gap-3",children:(0,a.jsx)("span",{className:"text-xs font-semibold",children:t?"You":ee?.name||"Assistant"})}),e.attachments?.length?(0,a.jsx)("div",{className:"mb-3 grid grid-cols-2 gap-2 sm:grid-cols-3 mt-2",children:e.attachments.map(e=>(0,a.jsx)("a",{href:e.dataUrl,target:"_blank",rel:"noreferrer",className:"overflow-hidden rounded-[18px] border border-white/10 bg-black/20",children:(0,a.jsx)("img",{src:e.dataUrl,alt:e.name,className:"h-28 w-full object-cover",loading:"lazy",decoding:"async"})},e.id))}):null,(0,a.jsxs)("div",{className:`break-words text-[15px] leading-7 ${r?"":"whitespace-pre-wrap"}`,children:[r?(0,a.jsx)(b,{text:s}):s,r&&i&&!E?(0,a.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},e.id)})})]}),(0,a.jsxs)("div",{className:"shrink-0 pt-2",children:[T.length>0?(0,a.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:T.map(e=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-3 py-2",children:[(0,a.jsx)("span",{className:"text-xs text-white/80 max-w-[12rem] truncate",children:e.name}),(0,a.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void z(e=>e.filter(e=>e.id!==t))},className:"text-white/55 hover:text-white","aria-label":"Remove attachment",children:(0,a.jsx)(i.default,{name:"close",className:"text-[18px]"})})]},e.id))}):null,(0,a.jsx)("div",{className:"mx-auto w-full max-w-3xl px-4 pb-2",children:(0,a.jsxs)("div",{className:"rounded-[26px] bg-[#2f2f2f] px-3 pt-3 pb-2 shadow-[0_0_15px_rgba(0,0,0,0.10)] ring-1 ring-white/5",children:[(0,a.jsx)("textarea",{value:M,onChange:e=>D(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ei&&el())},placeholder:"Message AI",rows:1,className:"w-full resize-none bg-transparent px-2 text-[15px] leading-6 text-white outline-none placeholder:text-white/40 max-h-[25vh] overflow-y-auto"}),(0,a.jsxs)("div",{className:"mt-2 flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("button",{type:"button",onClick:()=>K.current?.click(),disabled:!ee||r,className:"p-2 text-white/50 hover:text-white transition rounded-full hover:bg-white/5",children:(0,a.jsx)(i.default,{name:"attach_file",className:"text-[20px]"})}),(0,a.jsx)("input",{ref:K,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:eo}),(0,a.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:ee?ee.name:"No model"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[L?(0,a.jsx)("button",{type:"button",onClick:()=>{X.current?.abort()},className:"p-2 text-white bg-white/10 hover:bg-white/20 transition rounded-full h-8 w-8 flex items-center justify-center",children:(0,a.jsx)(i.default,{name:"stop",className:"text-[16px]"})}):null,(0,a.jsx)("button",{onClick:el,disabled:!ei,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${ei?"bg-white text-black hover:opacity-90":"bg-white/10 text-white/30 cursor-not-allowed"}`,children:(0,a.jsx)(i.default,{name:"arrow_upward",className:"text-[16px]"})})]})]})]})})]}),(0,a.jsx)("p",{className:"mx-auto mt-2 max-w-3xl px-4 pb-4 text-center text-[11px] text-white/30",children:"Model list is filtered from connected providers."})]})]})})}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>l});var a=r(29798);r(15814);var i=r(54366),s=r(5471),n=r(80954);let o=(0,i.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function l({className:e,variant:t="default",asChild:r=!1,...i}){let d=r?n.bL:"span";return(0,a.jsx)(d,{"data-slot":"badge","data-variant":t,className:(0,s.cn)(o({variant:t}),e),...i})}},58913:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(29798);r(15814);var i=r(36256);let s={add:"Plus",account_circle:"CircleUser",account_tree:"GitFork",api:"Plug",apps:"LayoutGrid",arrow_back:"ArrowLeft",arrow_downward:"ArrowDown",arrow_forward:"ArrowRight",arrow_upward:"ArrowUp",attach_file:"Paperclip",bar_chart:"BarChart3",block:"Ban",bolt:"Zap",business:"Briefcase",cancel:"X",cast:"Cast",chat:"MessageSquare",check:"Check",check_circle:"CheckCircle2",checklist:"ClipboardCheck",chevron_down:"ChevronDown",chevron_left:"ChevronLeft",chevron_right:"ChevronRight",chevron_up:"ChevronUp",close:"X",cloud:"Cloud",cloud_off:"CloudOff",cloud_sync:"CloudSync",cloud_upload:"CloudUpload",code:"Code2",computer:"Monitor",content_copy:"Copy",cookie:"Cookie",dashboard:"LayoutDashboard",data_array:"Table",data_object:"Braces",data_usage:"BarChart3",dark_mode:"Moon",delete:"Trash2",devices:"MonitorSmartphone",dns:"Network",download:"Download",edit:"Pencil",error:"CircleAlert",expand_more:"ChevronDown",extension:"Blocks",file_upload:"UploadCloud",filter_alt_off:"SlidersHorizontal",folder_open:"FolderOpen",gavel:"Scale",graphic_eq:"AudioWaveform",grid_view:"Grid2X2",group:"Users",help:"CircleHelp",history:"History",hourglass_top:"Timer",hub:"Router",image:"Image",image_search:"ScanSearch",info:"Info",input:"FileInput",key:"Key",keyboard_arrow_down:"ArrowDown",keyboard_arrow_up:"ArrowUp",lan:"Layers",language:"Languages",layers:"Layers",legend_toggle:"ListTree",light_mode:"Sun",link:"Link",link_off:"Link2Off",lock:"Lock",lock_open:"LockOpen",logout:"LogOut",menu:"Menu",menu_book:"BookOpen",mic:"Mic",monitoring:"Activity",monitor:"Monitor",movie:"Clapperboard",music_note:"Music",neurology:"Brain",open_in_new:"ExternalLink",output:"FileOutput",pause_circle:"CirclePause",person:"User",play_arrow:"Play",play_circle:"CirclePlay",playlist_add:"ListPlus",power:"Power",power_off:"PowerOff",power_settings_new:"Power",progress_activity:"Loader2",psychology:"BrainCircuit",public:"Earth",qr_code_scanner:"ScanQrCode",record_voice_over:"Mic",refresh:"RefreshCw",restart_alt:"RotateCcw",restore:"RotateCcw",rocket_launch:"Rocket",route:"Route",save:"Save",savings:"PiggyBank",scatter_plot:"ScatterChart",schedule:"Clock",science:"FlaskConical",search:"Search",search_off:"SearchX",security:"ShieldCheck",send:"Send",settings:"Settings",shield:"Shield",shield_lock:"ShieldCheck",shield_with_heart:"HeartPulse",smart_toy:"Bot",star:"Star",stop:"Square",stop_circle:"CircleStop",sync:"RefreshCw",sync_alt:"RefreshCw",terminal:"Terminal",toggle_off:"ToggleLeft",toggle_on:"ToggleRight",translate:"Languages",travel_explore:"Music4",upload:"Upload",upload_file:"UploadCloud",verified:"BadgeCheck",verified_user:"ShieldCheck",visibility:"Eye",visibility_off:"EyeOff",vpn_key:"KeyRound",vpn_lock:"Lock",warning:"TriangleAlert",wifi:"Wifi",wifi_off:"WifiOff",wifi_tethering:"Wifi"};function n(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim().match(/^(\d+(?:\.\d+)?)px$/);if(t)return Number(t[1])}return null}function o({name:e="",className:t,style:r,...l}){let d=i[e]??i[s[e]||String(e).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join("")]??i.Circle,c=function(e=""){let t=String(e).match(/\[(\d+(?:\.\d+)?)px\]/);return t?Number(t[1]):({"text-xs":12,"text-sm":14,"text-base":16,"text-lg":18,"text-xl":20,"text-2xl":24,"text-3xl":30,"text-4xl":36})[String(e).match(/\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl)\b/)?.[0]]||null}(t)??(r&&"object"==typeof r?n(r.width)??n(r.height)??n(r.fontSize):null),u=c?{width:c,height:c}:void 0,m=String(t??"").replace(/\bmaterial-symbols-outlined\b/g,"").replace(/\bfill-1\b/g,"").replace(/\s+/g," ").trim();return(0,a.jsx)(d,{className:m,style:u?{...u,...r}:r,"aria-hidden":"true",...l})}function l({name:e,className:t,style:r}){return(0,a.jsx)(o,{name:e,className:t,style:r})}},69024:(e,t,r)=>{"use strict";r.d(t,{xI:()=>a.xI});var a=r(62392)}},e=>{e.O(0,[6766,5166,1471,2392,2441,159,427,9966,7358],()=>e(e.s=10145)),_N_E=e.O()}]);
@@ -1,4 +1,4 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{7006:(e,s,t)=>{Promise.resolve().then(t.bind(t,32063))},15764:(e,s,t)=>{"use strict";t.d(s,{CK:()=>i.default,G9:()=>m.default,Iz:()=>f.default,KX:()=>j.PanelSkeleton,LF:()=>a.default,LH:()=>x.default,Mu:()=>j.StatCardSkeleton,Nf:()=>d.default,Qv:()=>r.CardSkeleton,YW:()=>y.YW,gw:()=>g.default,jK:()=>c.default,nh:()=>b.default,pV:()=>y.pV,rq:()=>n.default,uR:()=>o.default,uo:()=>l.ConfirmModal,vE:()=>u.default,vj:()=>p.default,wI:()=>h.default,wn:()=>y.wn,zY:()=>y.zY}),t(58913);var l=t(3537),r=t(58350);t(30872),t(33526),t(42535),t(1279);var a=t(92802),n=t(25908),o=t(58729),i=t(24873),d=t(5258),c=t(80599);t(949),t(56776),t(53599),t(88336),t(69561);var m=t(37753),x=t(23444),u=t(93624),p=t(86920),h=t(65461);t(14580);var g=t(14670),f=t(70296);t(57779),t(22205);var j=t(43276),b=t(75862),y=t(92412)},32063:(e,s,t)=>{"use strict";t.d(s,{default:()=>en});var l=t(29798),r=t(58913),a=t(15814),n=t(50141),o=t.n(n),i=t(15764),d=t(18055),c=t(738),m=t(90046),x=t(80159),u=t(75669),p=t(45111),h=t(1352),g=t(69221),f=t(7896),j=t(16653),b=t(51660),y=t(77345);function v({storageKey:e,changeEvent:s,itemField:t,normalize:l=e=>e,defaultName:r=e=>e}){let a=()=>{try{let s=JSON.parse(window.localStorage.getItem(e)||"[]");if(!Array.isArray(s))return[];return s.filter(e=>e?.name&&e?.[t])}catch{return[]}},n=t=>{window.localStorage.setItem(e,JSON.stringify(t)),window.dispatchEvent(new CustomEvent(s))};return{read:a,subscribe:e=>(window.addEventListener(s,e),()=>window.removeEventListener(s,e)),upsert:(e,s)=>{let o=l(e);if(!o)return null;let i=a(),d=i.find(e=>l(e[t])===o);if(d&&!s)return d.name;let c=(s||r(o)).trim();return c?(n([...i.filter(e=>e.name!==c&&l(e[t])!==o),{name:c,[t]:o}].sort((e,s)=>e.name.localeCompare(s.name))),c):null},remove:e=>n(a().filter(s=>s.name!==e))}}let N=e=>(e||"").replace(/\/+$/,""),w=v({storageKey:"10router.cliToolEndpointPresets",changeEvent:"10router:endpoint-presets-changed",itemField:"baseUrl",normalize:N,defaultName:e=>{try{return new URL(e).host}catch{return e}}}),k=v({storageKey:"10router.cliToolApiKeyPresets",changeEvent:"10router:api-key-presets-changed",itemField:"key"}),C=w.read,_=w.subscribe,S=w.upsert,E=w.remove,A=k.read,$=k.subscribe,M=k.upsert,O=k.remove;function U(e,{tunnelPublicUrl:s,tailscaleUrl:t,cloudUrl:l}={}){let r=N(e);return!r||[`http://127.0.0.1:${b._$}`,s,t,l].filter(Boolean).flatMap(e=>[N(e),`${N(e)}/v1`]).includes(r)?null:S(r)}let P="__custom__",R="__save__",z=e=>{let s=(e||"").replace(/\/+$/,"");return s?/\/v1$/.test(s)?s:`${s}/v1`:""};function I({value:e,onChange:s,requiresExternalUrl:t=!1,tunnelEnabled:n=!1,tunnelPublicUrl:o="",tailscaleEnabled:i=!1,tailscaleUrl:d="",cloudEnabled:c=!1,cloudUrl:m="",withV1:x=!0,currentUrl:u=""}){let[g,f]=(0,a.useState)([]),[j,v]=(0,a.useState)(!1),[w,k]=(0,a.useState)(""),[A,$]=(0,a.useState)(""),M=(0,a.useRef)(!1),O=(0,a.useRef)("");(0,a.useEffect)(()=>{let e=()=>{let e=C();f(e),k(s=>{if(s!==P)return s;let t=N(O.current);if(!t)return s;let l=e.find(e=>{let s=N(e.baseUrl);return s===t||s===z(t)});return l?`saved:${l.name}`:s})};return e(),v(!0),_(e)},[]);let U=(0,a.useMemo)(()=>(({requiresExternalUrl:e,tunnelEnabled:s,tunnelPublicUrl:t,tailscaleEnabled:l,tailscaleUrl:r,cloudEnabled:a,cloudUrl:n,savedPresets:o,withV1:i})=>{let d=[],c=e=>i?z(e):(e||"").replace(/\/+$/,"");if(!e){let e=c(`http://127.0.0.1:${b._$}`);d.push({value:"local",label:e,url:e})}if(s&&t){let e=c(t);d.push({value:"tunnel",label:e,url:e})}if(l&&r){let e=c(r);d.push({value:"tailscale",label:e,url:e})}if(a&&n){let e=c(n);d.push({value:"cloud",label:e,url:e})}return o.forEach(e=>{d.push({value:`saved:${e.name}`,label:e.baseUrl,url:e.baseUrl,saved:!0})}),d.push({value:P,label:"Custom URL...",url:""}),d})({requiresExternalUrl:t,tunnelEnabled:n,tunnelPublicUrl:o,tailscaleEnabled:i,tailscaleUrl:d,cloudEnabled:c,cloudUrl:m,savedPresets:g,withV1:x}),[t,n,o,i,d,c,m,g,x]);(0,a.useEffect)(()=>{if(M.current||!j||0===U.length)return;M.current=!0;let e=N(u),t=(e?U.find(s=>s.saved&&N(s.url)===e):null)||U.find(e=>e.value!==P);t?(k(t.value),s(t.url)):k(P)},[j,U,s,u]);let T=w.startsWith("saved:"),L=w===P,K=L&&(A||"").trim().length>0;return(0,l.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(p.l6,{value:w,onValueChange:t=>{if(t===R){let s=(e||"").trim();if(!s)return;let t=s;try{t=new URL(s).host}catch{}let l=window.prompt("Save endpoint as:",t),r=l?.trim()?S(s,l.trim()):null;r&&k(`saved:${r}`);return}if(k(t),t===P){$(""),s("");return}let l=U.find(e=>e.value===t);l&&s(l.url)},children:[(0,l.jsx)(p.bq,{className:"flex-1 min-w-0 text-xs",children:(0,l.jsx)(p.yv,{placeholder:"Select endpoint"})}),(0,l.jsxs)(p.gC,{children:[U.map(e=>(0,l.jsx)(p.eb,{value:e.value,title:e.label,children:e.label},e.value)),K&&(0,l.jsx)(p.eb,{value:R,children:"+ Save current as..."})]})]}),T&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{type:"button",onClick:()=>{if(!w.startsWith("saved:"))return;E(w.slice(6)),$("");let e=U.find(e=>e.value!==P&&e.value!==w);e?(k(e.value),s(e.url)):(k(P),s(""))},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,l.jsx)(r.default,{name:"delete",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Delete saved endpoint"})]})]}),L&&(0,l.jsx)(y.p,{type:"text",value:A,onChange:e=>{let t=e.target.value;O.current=t,$(t),s(t)},placeholder:x?"https://example.com/v1":"https://example.com",className:"h-9 text-xs"})]})}let T="__custom__",L="__save_key__";function K({value:e,onChange:s,apiKeys:t=[],cloudEnabled:n=!1,className:o=""}){let[i,d]=(0,a.useState)([]),[c,m]=(0,a.useState)(!1),[x,u]=(0,a.useState)("");(0,a.useEffect)(()=>{let e=()=>d(A());return e(),$(e)},[]);let g=(0,a.useMemo)(()=>[...t.map(e=>({value:e.key,label:e.key})),...i.map(e=>({value:`saved:${e.name}`,label:e.key,url:e.key,saved:!0})),{value:T,label:"Custom...",url:""}],[t,i]),f=e?g.find(s=>s.value===e||s.url===e):null,j=f?f.value:c||e?T:g[0]?.value??T,b=c?x:e||"",v="string"==typeof j&&j.startsWith("saved:"),N=j===T,w=N&&(e||"").trim().length>0&&!t.some(s=>s.key===e);return 0!==t.length||0!==i.length||c||e?(0,l.jsxs)("div",{className:`flex flex-col gap-1.5 ${o}`,children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(p.l6,{value:j,onValueChange:t=>{if(t===L)return void M((e||"").trim());if(t===T){m(!0),u(""),s("");return}m(!1),u("");let l=g.find(e=>e.value===t);l&&s(l.url??l.value)},children:[(0,l.jsx)(p.bq,{className:"flex-1 min-w-0 text-xs",children:(0,l.jsx)(p.yv,{placeholder:"Select key"})}),(0,l.jsxs)(p.gC,{children:[g.map(e=>(0,l.jsx)(p.eb,{value:e.value,title:e.label,children:e.label},e.value)),w&&(0,l.jsx)(p.eb,{value:L,children:"+ Save current as..."})]})]}),v&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{type:"button",onClick:()=>{if(!v)return;O(j.slice(6)),m(!1),u("");let e=g.find(e=>e.value!==T&&e.value!==j);s(e?e.url??e.value:"")},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,l.jsx)(r.default,{name:"delete",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Delete saved key"})]})]}),N&&(0,l.jsx)(y.p,{type:"text",value:b,onChange:e=>{let t=e.target.value;m(!0),u(t),s(t)},placeholder:"sk-...",className:"h-9 text-xs"})]}):(0,l.jsx)("span",{className:`min-w-0 rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5 ${o}`,children:n?"No API keys - Create one in Keys page":"sk_10router (default)"})}let D=e=>(e||"").replace(/\/+$/,"");function W(e,s={}){if(!e)return!1;let t=D(e),{tunnelPublicUrl:l,tailscaleUrl:r,cloudUrl:a}=s;return!!(/localhost|127\.0\.0\.1|0\.0\.0\.0/.test(t)||l&&t.startsWith(D(l))||r&&t.startsWith(D(r))||a&&t.startsWith(D(a)))}let H=/\[1m\]$/i,F=t(65746).env.NEXT_PUBLIC_CLOUD_URL,q=[{label:"Default",value:""},{label:"200K",value:"198000"},{label:"300K",value:"298000"},{label:"500K",value:"498000"},{label:"700K",value:"698000"}];function B({tool:e,isExpanded:s,onToggle:t,activeProviders:n,modelMappings:o,onModelMappingChange:c,baseUrl:m,hasActiveProviders:x,apiKeys:b,cloudEnabled:y,initialStatus:v,tunnelEnabled:N,tunnelPublicUrl:w,tailscaleEnabled:k,tailscaleUrl:C}){let _,S,E,[A,$]=(0,a.useState)(v||null),[M,O]=(0,a.useState)(!1),[P,R]=(0,a.useState)(!1),[z,T]=(0,a.useState)(!1),[L,D]=(0,a.useState)(null),[Z,Y]=(0,a.useState)(!1),[J,V]=(0,a.useState)(!1),[G,X]=(0,a.useState)(null),[Q,ee]=(0,a.useState)(""),[es,et]=(0,a.useState)({}),[el,er]=(0,a.useState)(!1),[ea,en]=(0,a.useState)(""),[eo,ei]=(0,a.useState)(!1),[ed,ec]=(0,a.useState)(!1),[em,ex]=(0,a.useState)(""),[eu,ep]=(0,a.useState)(!1),eh=(0,a.useRef)(!1),eg=A?.settings?.env?.ANTHROPIC_BASE_URL||"",ef=(()=>{if(!A?.installed)return null;let e=A.settings?.env?.ANTHROPIC_BASE_URL;return e?W(e,{tunnelPublicUrl:w,tailscaleUrl:C,cloudUrl:y?F:null})?"configured":"other":"not_configured"})();(0,a.useEffect)(()=>{b?.length>0&&!Q&&ee(b[0].key)},[b,Q]),(0,a.useEffect)(()=>{v&&($(v),ec(!!v.exaMcpEnabled))},[v]),(0,a.useEffect)(()=>{ex(A?.settings?.env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW||"")},[A?.settings?.env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW]),(0,a.useEffect)(()=>{let s=A?.settings?.env;s&&ep(e.defaultModels.some(e=>s[e.envKey]?.endsWith("[1m]")))},[A?.settings?.env,e.defaultModels]),(0,a.useEffect)(()=>{s&&(A||ey(),eb())},[s]),(0,a.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{ei(!!e.ccFilterNaming)}).catch(()=>{})},[]);let ej=async e=>{let s=!0===e;ei(s),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:s})}).catch(()=>{})},eb=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&et(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(A?.installed&&!eh.current){eh.current=!0;let s=A.settings?.env||{};e.defaultModels.forEach(e=>{if(e.envKey){let t=s[e.envKey]||e.defaultValue||"";t&&c(e.alias,t)}});let t=s.ANTHROPIC_AUTH_TOKEN;t&&ee(t)}},[A,b,e.defaultModels,c]);let ey=async()=>{O(!0);try{let e=await fetch("/api/cli-tools/claude-settings"),s=await e.json();$(s),ec(!!s.exaMcpEnabled)}catch(e){$({installed:!1,error:e.message})}finally{O(!1)}},ev=()=>{let e=ea||m;return e.endsWith("/v1")?e:`${e}/v1`},eN=async()=>{R(!0),D(null);try{let s={ANTHROPIC_BASE_URL:ev()},t=Q?.trim()||(b?.length>0?b[0].key:null)||(y?null:"sk_10router");t&&(s.ANTHROPIC_AUTH_TOKEN=t),e.defaultModels.forEach(e=>{let t=o[e.alias];t&&e.envKey&&(s[e.envKey]=t)}),em&&(s.CLAUDE_CODE_AUTO_COMPACT_WINDOW=em);let l=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:s,exaMcpEnabled:ed,autoCompactWindow:em})}),r=await l.json();l.ok?(U(ev(),{tunnelPublicUrl:w,tailscaleUrl:C}),D({type:"success",text:"Settings applied successfully!"}),$(e=>({...e,hasBackup:!0,settings:{...e?.settings,env:s},exaMcpEnabled:ed}))):D({type:"error",text:r.error||"Failed to apply settings"})}catch(e){D({type:"error",text:e.message})}finally{R(!1)}},ew=async()=>{T(!0),D(null);try{let s=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),t=await s.json();s.ok?(D({type:"success",text:"Settings reset successfully!"}),e.defaultModels.forEach(e=>c(e.alias,e.defaultValue||"")),ee(""),ec(!1),ex(""),ep(!1)):D({type:"error",text:t.error||"Failed to reset settings"})}catch(e){D({type:"error",text:e.message})}finally{T(!1)}};return(0,l.jsx)(u.Zp,{size:"sm",className:"overflow-hidden",children:(0,l.jsxs)(u.Wu,{children:[(0,l.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:t,children:(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(j.default,{src:"/providers/claude.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===ef&&(0,l.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"===ef&&(0,l.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"===ef&&(0,l.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,l.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:e.description})]})]})}),s&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[M&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,l.jsx)(r.default,{name:"progress_activity",className:"animate-spin"}),(0,l.jsx)("span",{children:"Checking Claude CLI..."})]}),!M&&A&&!A.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-yellow-500"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:A.container?"10Router runs in a container":"Claude CLI not detected locally"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:A.container?"The CLI lives on your host, not inside the container. Copy the manual config below into your host's ~/.claude/settings.json.":"Manual configuration is still available if 10router is deployed on a remote server."})]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>er(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:()=>Y(!Z),children:[(0,l.jsx)(r.default,{name:Z?"expand_less":"help",className:"text-[18px] mr-1"}),Z?"Hide":"How to Install"]})]})]}),Z&&(0,l.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,l.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,l.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!M&&A?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,l.jsx)(I,{value:ea||((_=ea||m).endsWith("/v1")?_:`${_}/v1`),onChange:en,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:N,tunnelPublicUrl:w,tailscaleEnabled:k,tailscaleUrl:C,currentUrl:eg})]}),A?.settings?.env?.ANTHROPIC_BASE_URL&&(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,l.jsx)("span",{className:"min-w-0 truncate rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5",children:A.settings.env.ANTHROPIC_BASE_URL})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,l.jsx)(K,{value:Q,onChange:ee,apiKeys:b,cloudEnabled:y})]}),e.defaultModels.map(e=>(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:e.name}),(0,l.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,l.jsx)("input",{type:"text",value:o[e.alias]||"",onChange:s=>c(e.alias,s.target.value),placeholder:"provider/model-id",className:"w-full min-w-0 pl-2 pr-7 py-2 bg-card rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),o[e.alias]&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>c(e.alias,""),className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-muted-foreground hover:text-red-500 rounded transition-colors",children:(0,l.jsx)(r.default,{name:"close",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Clear"})]})]}),(0,l.jsx)("button",{onClick:()=>{X(e.alias),V(!0)},className:"w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 bg-card border-border text-foreground hover:border-primary cursor-pointer",children:"Select Model"})]},e.alias)),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Auto-compact"}),(0,l.jsxs)(p.l6,{value:em||"__default__",onValueChange:e=>ex("__default__"===e?"":e),children:[(0,l.jsx)(p.bq,{className:"w-full text-xs",children:(0,l.jsx)(p.yv,{})}),(0,l.jsx)(p.gC,{children:q.map(e=>(0,l.jsx)(p.eb,{value:e.value||"__default__",children:e.label},e.label))})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"1M context"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:eu,onCheckedChange:s=>{var t;ep(t=!0===s),e.defaultModels.forEach(e=>{let s=o[e.alias];s&&c(e.alias,((e,s)=>{let{model:t}=function(e){if("string"!=typeof e)return{model:e,contextMarker:null};let s=e.trim(),t=s.match(H);return t?{model:s.slice(0,-t[0].length),contextMarker:t[0].slice(1,-1).toLowerCase()}:{model:e,contextMarker:null}}(e);return s?`${t}[1m]`:t})(s,t))})}}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Append [1m] to the model name"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Claude Code otherwise assumes a 200K window, which clamps the auto-compact window above. Applied to every mapped model — only enable it for models that really accept 1M."})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Filter naming"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:eo,onCheckedChange:ej}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Filter naming requests"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens."})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Web Search"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:ed,onCheckedChange:e=>ec(!0===e)}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Exa MCP"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Injects Exa MCP into ~/.claude.json so non-Claude models gain web search. Restart Claude Code after Apply."})]})]})]})]}),L&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===L.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===L.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:L.text})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,l.jsxs)(d.$,{size:"sm",onClick:eN,disabled:P,children:[P&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:ew,disabled:!A?.has10Router||z,children:[z&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,l.jsxs)(d.$,{variant:"ghost",size:"sm",onClick:()=>er(!0),children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),J&&(0,l.jsx)(i.rq,{isOpen:J,onClose:()=>V(!1),onSelect:e=>{G&&c(G,e.value)},selectedModel:G?o[G]:null,activeProviders:n,modelAliases:es,title:`Select model for ${G}`}),(0,l.jsx)(i.uR,{isOpen:el,onClose:()=>er(!1),title:"Claude CLI - Manual Configuration",configs:(S=Q&&Q.trim()?Q:y?"<API_KEY_FROM_DASHBOARD>":"sk_10router",E={ANTHROPIC_BASE_URL:ev(),ANTHROPIC_AUTH_TOKEN:S},e.defaultModels.forEach(e=>{let s=o[e.alias];s&&e.envKey&&(E[e.envKey]=s)}),em&&(E.CLAUDE_CODE_AUTO_COMPACT_WINDOW=em),[{filename:"~/.claude/settings.json",content:JSON.stringify({hasCompletedOnboarding:!0,env:E},null,2)}])})]})})}function Z({tool:e,isExpanded:s,onToggle:t,baseUrl:n,apiKeys:o,activeProviders:c,cloudEnabled:m,initialStatus:x,tunnelEnabled:p,tunnelPublicUrl:f,tailscaleEnabled:b,tailscaleUrl:y}){let v,N,w,[k,C]=(0,a.useState)(x||null),[_,S]=(0,a.useState)(!1),[E,A]=(0,a.useState)(!1),[$,M]=(0,a.useState)(!1),[O,P]=(0,a.useState)(null),[R,z]=(0,a.useState)(!1),[T,L]=(0,a.useState)(""),[D,H]=(0,a.useState)([]),[F,q]=(0,a.useState)(""),[B,Y]=(0,a.useState)(!1),[J,V]=(0,a.useState)(!1),[G,X]=(0,a.useState)({}),[Q,ee]=(0,a.useState)(!1),[es,et]=(0,a.useState)("");(0,a.useEffect)(()=>{o?.length>0&&!T&&L(o[0].key)},[o,T]),(0,a.useEffect)(()=>{x&&C(x)},[x]),(0,a.useEffect)(()=>{s&&(k||eo(),el())},[s]);let el=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&X(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(k?.profiles&&H(k.profiles.map(e=>e.model).filter(Boolean)),k?.config){let e=k.config.match(/^default_subagent_model\s*=\s*"([^"]+)"/m);e&&q(e[1])}},[k]);let er=(v=k?.config?.match(/base_url\s*=\s*"([^"]+)"/))?v[1]:"",ea=k?.installed?k.config?W(er,{tunnelPublicUrl:f,tailscaleUrl:y})?"configured":"other":"not_configured":null,en=()=>{let e=es||`${n}/v1`;return e.endsWith("/v1")?e:`${e}/v1`},eo=async()=>{S(!0);try{let e=await fetch("/api/cli-tools/codex-settings"),s=await e.json();C(s)}catch(e){C({installed:!1,error:e.message})}finally{S(!1)}},ei=async()=>{A(!0),P(null);try{let e=T&&T.trim()||m?T:"sk_10router",s=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:en(),apiKey:e,models:D,subagentModel:F})}),t=await s.json();s.ok?(U(en(),{tunnelPublicUrl:f,tailscaleUrl:y}),P({type:"success",text:"Applied — models appear in codex /model. Account default kept; use codex --profile 10router-<model> for 10Router routing."}),eo()):P({type:"error",text:t.error||"Failed to apply settings"})}catch(e){P({type:"error",text:e.message})}finally{A(!1)}},ed=async()=>{M(!0),P(null);try{let e=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),s=await e.json();e.ok?(P({type:"success",text:"Settings reset successfully!"}),H([]),q(""),eo()):P({type:"error",text:s.error||"Failed to reset settings"})}catch(e){P({type:"error",text:e.message})}finally{M(!1)}};return(0,l.jsx)(u.Zp,{size:"sm",className:"overflow-hidden",children:(0,l.jsxs)(u.Wu,{children:[(0,l.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:t,children:(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(j.default,{src:"/providers/codex.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===ea&&(0,l.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"===ea&&(0,l.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"===ea&&(0,l.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,l.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:e.description})]})]})}),s&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[_&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,l.jsx)(r.default,{name:"progress_activity",className:"animate-spin"}),(0,l.jsx)("span",{children:"Checking Codex CLI..."})]}),!_&&k&&!k.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-yellow-500"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:k.container?"10Router runs in a container":"Codex CLI not detected locally"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:k.container?"The CLI lives on your host, not inside the container. Copy the manual config below into your host's ~/.codex/config.toml.":"Manual configuration is still available if 10router is deployed on a remote server."})]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>ee(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:()=>z(!R),children:[(0,l.jsx)(r.default,{name:R?"expand_less":"help",className:"text-[18px] mr-1"}),R?"Hide":"How to Install"]})]})]}),R&&(0,l.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,l.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,l.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,l.jsx)("div",{className:"pt-2 border-t border-border",children:(0,l.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Codex reads custom providers from"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/config.toml"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!_&&k?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[k?.rootHijacked&&(0,l.jsxs)("div",{className:"flex items-start gap-2 px-2 py-1.5 rounded text-xs bg-yellow-500/10 text-yellow-600 dark:text-yellow-400",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-[14px] shrink-0 mt-0.5"}),(0,l.jsx)("span",{children:"Old settings overrode your default Codex model. Apply to restore your ChatGPT account default — added models become profiles."})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,l.jsx)(I,{value:es||es||`${n}/v1`,onChange:et,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:p,tunnelPublicUrl:f,tailscaleEnabled:b,tailscaleUrl:y,currentUrl:er})]}),k?.config&&(er?(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,l.jsx)("span",{className:"min-w-0 truncate rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5",children:er})]}):null),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,l.jsx)(K,{value:T,onChange:L,apiKeys:o,cloudEnabled:m})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-start sm:gap-2",children:[(0,l.jsx)("span",{className:"pt-1 text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Models"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,l.jsx)("div",{className:"flex min-h-7 flex-wrap gap-1.5 rounded border border-border bg-card px-2 py-1.5",children:0===D.length?(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models added"}):D.map(e=>(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 rounded border border-transparent bg-black/5 px-2 py-0.5 text-xs text-muted-foreground hover:border-border dark:bg-white/5",children:[e,(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>H(D.filter(s=>s!==e)),className:"ml-0.5 hover:text-red-500",children:(0,l.jsx)(r.default,{name:"close",className:"text-[12px]"})})}),(0,l.jsx)(h.ZI,{children:"Remove"})]})]},e))}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("button",{onClick:()=>Y(!0),className:"cursor-pointer rounded border border-border bg-card px-2 py-1 text-xs text-foreground transition-colors hover:border-primary",children:"Add Model"}),(0,l.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Launch:"," ",(0,l.jsx)("code",{className:"rounded bg-black/5 px-1 dark:bg-white/5",children:"codex --profile 10router-<model>"})]})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Subagent Model"}),(0,l.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,l.jsx)("input",{type:"text",value:F,onChange:e=>q(e.target.value),placeholder:D[0]||"provider/model-id (defaults to main model)",className:"w-full min-w-0 pl-2 pr-7 py-2 bg-card rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),F&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>q(""),className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-muted-foreground hover:text-red-500 rounded transition-colors",children:(0,l.jsx)(r.default,{name:"close",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Clear (will use main model)"})]})]}),(0,l.jsx)("button",{onClick:()=>V(!0),className:"w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 bg-card border-border text-foreground hover:border-primary cursor-pointer",children:"Select Model"})]})]}),O&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===O.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===O.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:O.text})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,l.jsxs)(d.$,{size:"sm",onClick:ei,disabled:!T&&m&&o.length>0||0===D.length||E,children:[E&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:ed,disabled:$,children:[$&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,l.jsxs)(d.$,{variant:"ghost",size:"sm",onClick:()=>ee(!0),children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),B&&(0,l.jsx)(i.rq,{isOpen:B,onClose:()=>Y(!1),onSelect:e=>{D.includes(e.value)||H([...D,e.value])},onDeselect:e=>{H(D.filter(s=>s!==e.value))},selectedModel:null,addedModelValues:D,closeOnSelect:!1,title:"Add Models for Codex",activeProviders:c,modelAliases:G}),J&&(0,l.jsx)(i.rq,{isOpen:J,onClose:()=>V(!1),onSelect:e=>{q(e.value),V(!1)},selectedModel:F,activeProviders:c,modelAliases:G,title:"Select Subagent Model for Codex"}),(0,l.jsx)(i.uR,{isOpen:Q,onClose:()=>ee(!1),title:"Codex CLI - Manual Configuration",configs:(N=T&&T.trim()?T:m?"<API_KEY_FROM_DASHBOARD>":"sk_10router",w=[{filename:"~/.codex/config.toml",content:`# 10Router Configuration for Codex CLI
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{7006:(e,s,t)=>{Promise.resolve().then(t.bind(t,32063))},15764:(e,s,t)=>{"use strict";t.d(s,{CK:()=>i.default,G9:()=>m.default,Iz:()=>f.default,KX:()=>j.PanelSkeleton,LF:()=>a.default,LH:()=>x.default,Mu:()=>j.StatCardSkeleton,Nf:()=>d.default,Qv:()=>r.CardSkeleton,YW:()=>y.YW,gw:()=>g.default,jK:()=>c.default,nh:()=>b.default,pV:()=>y.pV,rq:()=>n.default,uR:()=>o.default,uo:()=>l.ConfirmModal,vE:()=>u.default,vj:()=>p.default,wI:()=>h.default,wn:()=>y.wn,zY:()=>y.zY}),t(58913);var l=t(3537),r=t(58350);t(30872),t(33526),t(42535),t(1279);var a=t(92802),n=t(25908),o=t(58729),i=t(24873),d=t(5258),c=t(80599);t(949),t(56776),t(53599),t(77063),t(69561);var m=t(37753),x=t(23444),u=t(93624),p=t(86920),h=t(65461);t(14580);var g=t(14670),f=t(70296);t(57779),t(22205);var j=t(43276),b=t(75862),y=t(92412)},32063:(e,s,t)=>{"use strict";t.d(s,{default:()=>en});var l=t(29798),r=t(58913),a=t(15814),n=t(50141),o=t.n(n),i=t(15764),d=t(18055),c=t(738),m=t(90046),x=t(80159),u=t(75669),p=t(45111),h=t(1352),g=t(69221),f=t(7896),j=t(16653),b=t(51660),y=t(77345);function v({storageKey:e,changeEvent:s,itemField:t,normalize:l=e=>e,defaultName:r=e=>e}){let a=()=>{try{let s=JSON.parse(window.localStorage.getItem(e)||"[]");if(!Array.isArray(s))return[];return s.filter(e=>e?.name&&e?.[t])}catch{return[]}},n=t=>{window.localStorage.setItem(e,JSON.stringify(t)),window.dispatchEvent(new CustomEvent(s))};return{read:a,subscribe:e=>(window.addEventListener(s,e),()=>window.removeEventListener(s,e)),upsert:(e,s)=>{let o=l(e);if(!o)return null;let i=a(),d=i.find(e=>l(e[t])===o);if(d&&!s)return d.name;let c=(s||r(o)).trim();return c?(n([...i.filter(e=>e.name!==c&&l(e[t])!==o),{name:c,[t]:o}].sort((e,s)=>e.name.localeCompare(s.name))),c):null},remove:e=>n(a().filter(s=>s.name!==e))}}let N=e=>(e||"").replace(/\/+$/,""),w=v({storageKey:"10router.cliToolEndpointPresets",changeEvent:"10router:endpoint-presets-changed",itemField:"baseUrl",normalize:N,defaultName:e=>{try{return new URL(e).host}catch{return e}}}),k=v({storageKey:"10router.cliToolApiKeyPresets",changeEvent:"10router:api-key-presets-changed",itemField:"key"}),C=w.read,_=w.subscribe,S=w.upsert,E=w.remove,A=k.read,$=k.subscribe,M=k.upsert,O=k.remove;function U(e,{tunnelPublicUrl:s,tailscaleUrl:t,cloudUrl:l}={}){let r=N(e);return!r||[`http://127.0.0.1:${b._$}`,s,t,l].filter(Boolean).flatMap(e=>[N(e),`${N(e)}/v1`]).includes(r)?null:S(r)}let P="__custom__",R="__save__",z=e=>{let s=(e||"").replace(/\/+$/,"");return s?/\/v1$/.test(s)?s:`${s}/v1`:""};function I({value:e,onChange:s,requiresExternalUrl:t=!1,tunnelEnabled:n=!1,tunnelPublicUrl:o="",tailscaleEnabled:i=!1,tailscaleUrl:d="",cloudEnabled:c=!1,cloudUrl:m="",withV1:x=!0,currentUrl:u=""}){let[g,f]=(0,a.useState)([]),[j,v]=(0,a.useState)(!1),[w,k]=(0,a.useState)(""),[A,$]=(0,a.useState)(""),M=(0,a.useRef)(!1),O=(0,a.useRef)("");(0,a.useEffect)(()=>{let e=()=>{let e=C();f(e),k(s=>{if(s!==P)return s;let t=N(O.current);if(!t)return s;let l=e.find(e=>{let s=N(e.baseUrl);return s===t||s===z(t)});return l?`saved:${l.name}`:s})};return e(),v(!0),_(e)},[]);let U=(0,a.useMemo)(()=>(({requiresExternalUrl:e,tunnelEnabled:s,tunnelPublicUrl:t,tailscaleEnabled:l,tailscaleUrl:r,cloudEnabled:a,cloudUrl:n,savedPresets:o,withV1:i})=>{let d=[],c=e=>i?z(e):(e||"").replace(/\/+$/,"");if(!e){let e=c(`http://127.0.0.1:${b._$}`);d.push({value:"local",label:e,url:e})}if(s&&t){let e=c(t);d.push({value:"tunnel",label:e,url:e})}if(l&&r){let e=c(r);d.push({value:"tailscale",label:e,url:e})}if(a&&n){let e=c(n);d.push({value:"cloud",label:e,url:e})}return o.forEach(e=>{d.push({value:`saved:${e.name}`,label:e.baseUrl,url:e.baseUrl,saved:!0})}),d.push({value:P,label:"Custom URL...",url:""}),d})({requiresExternalUrl:t,tunnelEnabled:n,tunnelPublicUrl:o,tailscaleEnabled:i,tailscaleUrl:d,cloudEnabled:c,cloudUrl:m,savedPresets:g,withV1:x}),[t,n,o,i,d,c,m,g,x]);(0,a.useEffect)(()=>{if(M.current||!j||0===U.length)return;M.current=!0;let e=N(u),t=(e?U.find(s=>s.saved&&N(s.url)===e):null)||U.find(e=>e.value!==P);t?(k(t.value),s(t.url)):k(P)},[j,U,s,u]);let T=w.startsWith("saved:"),L=w===P,K=L&&(A||"").trim().length>0;return(0,l.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(p.l6,{value:w,onValueChange:t=>{if(t===R){let s=(e||"").trim();if(!s)return;let t=s;try{t=new URL(s).host}catch{}let l=window.prompt("Save endpoint as:",t),r=l?.trim()?S(s,l.trim()):null;r&&k(`saved:${r}`);return}if(k(t),t===P){$(""),s("");return}let l=U.find(e=>e.value===t);l&&s(l.url)},children:[(0,l.jsx)(p.bq,{className:"flex-1 min-w-0 text-xs",children:(0,l.jsx)(p.yv,{placeholder:"Select endpoint"})}),(0,l.jsxs)(p.gC,{children:[U.map(e=>(0,l.jsx)(p.eb,{value:e.value,title:e.label,children:e.label},e.value)),K&&(0,l.jsx)(p.eb,{value:R,children:"+ Save current as..."})]})]}),T&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{type:"button",onClick:()=>{if(!w.startsWith("saved:"))return;E(w.slice(6)),$("");let e=U.find(e=>e.value!==P&&e.value!==w);e?(k(e.value),s(e.url)):(k(P),s(""))},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,l.jsx)(r.default,{name:"delete",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Delete saved endpoint"})]})]}),L&&(0,l.jsx)(y.p,{type:"text",value:A,onChange:e=>{let t=e.target.value;O.current=t,$(t),s(t)},placeholder:x?"https://example.com/v1":"https://example.com",className:"h-9 text-xs"})]})}let T="__custom__",L="__save_key__";function K({value:e,onChange:s,apiKeys:t=[],cloudEnabled:n=!1,className:o=""}){let[i,d]=(0,a.useState)([]),[c,m]=(0,a.useState)(!1),[x,u]=(0,a.useState)("");(0,a.useEffect)(()=>{let e=()=>d(A());return e(),$(e)},[]);let g=(0,a.useMemo)(()=>[...t.map(e=>({value:e.key,label:e.key})),...i.map(e=>({value:`saved:${e.name}`,label:e.key,url:e.key,saved:!0})),{value:T,label:"Custom...",url:""}],[t,i]),f=e?g.find(s=>s.value===e||s.url===e):null,j=f?f.value:c||e?T:g[0]?.value??T,b=c?x:e||"",v="string"==typeof j&&j.startsWith("saved:"),N=j===T,w=N&&(e||"").trim().length>0&&!t.some(s=>s.key===e);return 0!==t.length||0!==i.length||c||e?(0,l.jsxs)("div",{className:`flex flex-col gap-1.5 ${o}`,children:[(0,l.jsxs)("div",{className:"flex items-center gap-2",children:[(0,l.jsxs)(p.l6,{value:j,onValueChange:t=>{if(t===L)return void M((e||"").trim());if(t===T){m(!0),u(""),s("");return}m(!1),u("");let l=g.find(e=>e.value===t);l&&s(l.url??l.value)},children:[(0,l.jsx)(p.bq,{className:"flex-1 min-w-0 text-xs",children:(0,l.jsx)(p.yv,{placeholder:"Select key"})}),(0,l.jsxs)(p.gC,{children:[g.map(e=>(0,l.jsx)(p.eb,{value:e.value,title:e.label,children:e.label},e.value)),w&&(0,l.jsx)(p.eb,{value:L,children:"+ Save current as..."})]})]}),v&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{type:"button",onClick:()=>{if(!v)return;O(j.slice(6)),m(!1),u("");let e=g.find(e=>e.value!==T&&e.value!==j);s(e?e.url??e.value:"")},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,l.jsx)(r.default,{name:"delete",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Delete saved key"})]})]}),N&&(0,l.jsx)(y.p,{type:"text",value:b,onChange:e=>{let t=e.target.value;m(!0),u(t),s(t)},placeholder:"sk-...",className:"h-9 text-xs"})]}):(0,l.jsx)("span",{className:`min-w-0 rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5 ${o}`,children:n?"No API keys - Create one in Keys page":"sk_10router (default)"})}let D=e=>(e||"").replace(/\/+$/,"");function W(e,s={}){if(!e)return!1;let t=D(e),{tunnelPublicUrl:l,tailscaleUrl:r,cloudUrl:a}=s;return!!(/localhost|127\.0\.0\.1|0\.0\.0\.0/.test(t)||l&&t.startsWith(D(l))||r&&t.startsWith(D(r))||a&&t.startsWith(D(a)))}let H=/\[1m\]$/i,F=t(65746).env.NEXT_PUBLIC_CLOUD_URL,q=[{label:"Default",value:""},{label:"200K",value:"198000"},{label:"300K",value:"298000"},{label:"500K",value:"498000"},{label:"700K",value:"698000"}];function B({tool:e,isExpanded:s,onToggle:t,activeProviders:n,modelMappings:o,onModelMappingChange:c,baseUrl:m,hasActiveProviders:x,apiKeys:b,cloudEnabled:y,initialStatus:v,tunnelEnabled:N,tunnelPublicUrl:w,tailscaleEnabled:k,tailscaleUrl:C}){let _,S,E,[A,$]=(0,a.useState)(v||null),[M,O]=(0,a.useState)(!1),[P,R]=(0,a.useState)(!1),[z,T]=(0,a.useState)(!1),[L,D]=(0,a.useState)(null),[Z,Y]=(0,a.useState)(!1),[J,V]=(0,a.useState)(!1),[G,X]=(0,a.useState)(null),[Q,ee]=(0,a.useState)(""),[es,et]=(0,a.useState)({}),[el,er]=(0,a.useState)(!1),[ea,en]=(0,a.useState)(""),[eo,ei]=(0,a.useState)(!1),[ed,ec]=(0,a.useState)(!1),[em,ex]=(0,a.useState)(""),[eu,ep]=(0,a.useState)(!1),eh=(0,a.useRef)(!1),eg=A?.settings?.env?.ANTHROPIC_BASE_URL||"",ef=(()=>{if(!A?.installed)return null;let e=A.settings?.env?.ANTHROPIC_BASE_URL;return e?W(e,{tunnelPublicUrl:w,tailscaleUrl:C,cloudUrl:y?F:null})?"configured":"other":"not_configured"})();(0,a.useEffect)(()=>{b?.length>0&&!Q&&ee(b[0].key)},[b,Q]),(0,a.useEffect)(()=>{v&&($(v),ec(!!v.exaMcpEnabled))},[v]),(0,a.useEffect)(()=>{ex(A?.settings?.env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW||"")},[A?.settings?.env?.CLAUDE_CODE_AUTO_COMPACT_WINDOW]),(0,a.useEffect)(()=>{let s=A?.settings?.env;s&&ep(e.defaultModels.some(e=>s[e.envKey]?.endsWith("[1m]")))},[A?.settings?.env,e.defaultModels]),(0,a.useEffect)(()=>{s&&(A||ey(),eb())},[s]),(0,a.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>{ei(!!e.ccFilterNaming)}).catch(()=>{})},[]);let ej=async e=>{let s=!0===e;ei(s),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:s})}).catch(()=>{})},eb=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&et(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(A?.installed&&!eh.current){eh.current=!0;let s=A.settings?.env||{};e.defaultModels.forEach(e=>{if(e.envKey){let t=s[e.envKey]||e.defaultValue||"";t&&c(e.alias,t)}});let t=s.ANTHROPIC_AUTH_TOKEN;t&&ee(t)}},[A,b,e.defaultModels,c]);let ey=async()=>{O(!0);try{let e=await fetch("/api/cli-tools/claude-settings"),s=await e.json();$(s),ec(!!s.exaMcpEnabled)}catch(e){$({installed:!1,error:e.message})}finally{O(!1)}},ev=()=>{let e=ea||m;return e.endsWith("/v1")?e:`${e}/v1`},eN=async()=>{R(!0),D(null);try{let s={ANTHROPIC_BASE_URL:ev()},t=Q?.trim()||(b?.length>0?b[0].key:null)||(y?null:"sk_10router");t&&(s.ANTHROPIC_AUTH_TOKEN=t),e.defaultModels.forEach(e=>{let t=o[e.alias];t&&e.envKey&&(s[e.envKey]=t)}),em&&(s.CLAUDE_CODE_AUTO_COMPACT_WINDOW=em);let l=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:s,exaMcpEnabled:ed,autoCompactWindow:em})}),r=await l.json();l.ok?(U(ev(),{tunnelPublicUrl:w,tailscaleUrl:C}),D({type:"success",text:"Settings applied successfully!"}),$(e=>({...e,hasBackup:!0,settings:{...e?.settings,env:s},exaMcpEnabled:ed}))):D({type:"error",text:r.error||"Failed to apply settings"})}catch(e){D({type:"error",text:e.message})}finally{R(!1)}},ew=async()=>{T(!0),D(null);try{let s=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),t=await s.json();s.ok?(D({type:"success",text:"Settings reset successfully!"}),e.defaultModels.forEach(e=>c(e.alias,e.defaultValue||"")),ee(""),ec(!1),ex(""),ep(!1)):D({type:"error",text:t.error||"Failed to reset settings"})}catch(e){D({type:"error",text:e.message})}finally{T(!1)}};return(0,l.jsx)(u.Zp,{size:"sm",className:"overflow-hidden",children:(0,l.jsxs)(u.Wu,{children:[(0,l.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:t,children:(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(j.default,{src:"/providers/claude.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===ef&&(0,l.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"===ef&&(0,l.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"===ef&&(0,l.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,l.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:e.description})]})]})}),s&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[M&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,l.jsx)(r.default,{name:"progress_activity",className:"animate-spin"}),(0,l.jsx)("span",{children:"Checking Claude CLI..."})]}),!M&&A&&!A.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-yellow-500"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:A.container?"10Router runs in a container":"Claude CLI not detected locally"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:A.container?"The CLI lives on your host, not inside the container. Copy the manual config below into your host's ~/.claude/settings.json.":"Manual configuration is still available if 10router is deployed on a remote server."})]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>er(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:()=>Y(!Z),children:[(0,l.jsx)(r.default,{name:Z?"expand_less":"help",className:"text-[18px] mr-1"}),Z?"Hide":"How to Install"]})]})]}),Z&&(0,l.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,l.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,l.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!M&&A?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,l.jsx)(I,{value:ea||((_=ea||m).endsWith("/v1")?_:`${_}/v1`),onChange:en,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:N,tunnelPublicUrl:w,tailscaleEnabled:k,tailscaleUrl:C,currentUrl:eg})]}),A?.settings?.env?.ANTHROPIC_BASE_URL&&(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,l.jsx)("span",{className:"min-w-0 truncate rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5",children:A.settings.env.ANTHROPIC_BASE_URL})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,l.jsx)(K,{value:Q,onChange:ee,apiKeys:b,cloudEnabled:y})]}),e.defaultModels.map(e=>(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:e.name}),(0,l.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,l.jsx)("input",{type:"text",value:o[e.alias]||"",onChange:s=>c(e.alias,s.target.value),placeholder:"provider/model-id",className:"w-full min-w-0 pl-2 pr-7 py-2 bg-card rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),o[e.alias]&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>c(e.alias,""),className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-muted-foreground hover:text-red-500 rounded transition-colors",children:(0,l.jsx)(r.default,{name:"close",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Clear"})]})]}),(0,l.jsx)("button",{onClick:()=>{X(e.alias),V(!0)},className:"w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 bg-card border-border text-foreground hover:border-primary cursor-pointer",children:"Select Model"})]},e.alias)),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Auto-compact"}),(0,l.jsxs)(p.l6,{value:em||"__default__",onValueChange:e=>ex("__default__"===e?"":e),children:[(0,l.jsx)(p.bq,{className:"w-full text-xs",children:(0,l.jsx)(p.yv,{})}),(0,l.jsx)(p.gC,{children:q.map(e=>(0,l.jsx)(p.eb,{value:e.value||"__default__",children:e.label},e.label))})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"1M context"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:eu,onCheckedChange:s=>{var t;ep(t=!0===s),e.defaultModels.forEach(e=>{let s=o[e.alias];s&&c(e.alias,((e,s)=>{let{model:t}=function(e){if("string"!=typeof e)return{model:e,contextMarker:null};let s=e.trim(),t=s.match(H);return t?{model:s.slice(0,-t[0].length),contextMarker:t[0].slice(1,-1).toLowerCase()}:{model:e,contextMarker:null}}(e);return s?`${t}[1m]`:t})(s,t))})}}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Append [1m] to the model name"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Claude Code otherwise assumes a 200K window, which clamps the auto-compact window above. Applied to every mapped model — only enable it for models that really accept 1M."})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Filter naming"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:eo,onCheckedChange:ej}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Filter naming requests"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens."})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Web Search"}),(0,l.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,l.jsx)(f.S,{checked:ed,onCheckedChange:e=>ec(!0===e)}),(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"Exa MCP"}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("span",{className:"relative inline-flex",children:(0,l.jsx)(r.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,l.jsx)(h.ZI,{side:"top",children:"Injects Exa MCP into ~/.claude.json so non-Claude models gain web search. Restart Claude Code after Apply."})]})]})]})]}),L&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===L.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===L.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:L.text})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,l.jsxs)(d.$,{size:"sm",onClick:eN,disabled:P,children:[P&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:ew,disabled:!A?.has10Router||z,children:[z&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,l.jsxs)(d.$,{variant:"ghost",size:"sm",onClick:()=>er(!0),children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),J&&(0,l.jsx)(i.rq,{isOpen:J,onClose:()=>V(!1),onSelect:e=>{G&&c(G,e.value)},selectedModel:G?o[G]:null,activeProviders:n,modelAliases:es,title:`Select model for ${G}`}),(0,l.jsx)(i.uR,{isOpen:el,onClose:()=>er(!1),title:"Claude CLI - Manual Configuration",configs:(S=Q&&Q.trim()?Q:y?"<API_KEY_FROM_DASHBOARD>":"sk_10router",E={ANTHROPIC_BASE_URL:ev(),ANTHROPIC_AUTH_TOKEN:S},e.defaultModels.forEach(e=>{let s=o[e.alias];s&&e.envKey&&(E[e.envKey]=s)}),em&&(E.CLAUDE_CODE_AUTO_COMPACT_WINDOW=em),[{filename:"~/.claude/settings.json",content:JSON.stringify({hasCompletedOnboarding:!0,env:E},null,2)}])})]})})}function Z({tool:e,isExpanded:s,onToggle:t,baseUrl:n,apiKeys:o,activeProviders:c,cloudEnabled:m,initialStatus:x,tunnelEnabled:p,tunnelPublicUrl:f,tailscaleEnabled:b,tailscaleUrl:y}){let v,N,w,[k,C]=(0,a.useState)(x||null),[_,S]=(0,a.useState)(!1),[E,A]=(0,a.useState)(!1),[$,M]=(0,a.useState)(!1),[O,P]=(0,a.useState)(null),[R,z]=(0,a.useState)(!1),[T,L]=(0,a.useState)(""),[D,H]=(0,a.useState)([]),[F,q]=(0,a.useState)(""),[B,Y]=(0,a.useState)(!1),[J,V]=(0,a.useState)(!1),[G,X]=(0,a.useState)({}),[Q,ee]=(0,a.useState)(!1),[es,et]=(0,a.useState)("");(0,a.useEffect)(()=>{o?.length>0&&!T&&L(o[0].key)},[o,T]),(0,a.useEffect)(()=>{x&&C(x)},[x]),(0,a.useEffect)(()=>{s&&(k||eo(),el())},[s]);let el=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&X(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}};(0,a.useEffect)(()=>{if(k?.profiles&&H(k.profiles.map(e=>e.model).filter(Boolean)),k?.config){let e=k.config.match(/^default_subagent_model\s*=\s*"([^"]+)"/m);e&&q(e[1])}},[k]);let er=(v=k?.config?.match(/base_url\s*=\s*"([^"]+)"/))?v[1]:"",ea=k?.installed?k.config?W(er,{tunnelPublicUrl:f,tailscaleUrl:y})?"configured":"other":"not_configured":null,en=()=>{let e=es||`${n}/v1`;return e.endsWith("/v1")?e:`${e}/v1`},eo=async()=>{S(!0);try{let e=await fetch("/api/cli-tools/codex-settings"),s=await e.json();C(s)}catch(e){C({installed:!1,error:e.message})}finally{S(!1)}},ei=async()=>{A(!0),P(null);try{let e=T&&T.trim()||m?T:"sk_10router",s=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:en(),apiKey:e,models:D,subagentModel:F})}),t=await s.json();s.ok?(U(en(),{tunnelPublicUrl:f,tailscaleUrl:y}),P({type:"success",text:"Applied — models appear in codex /model. Account default kept; use codex --profile 10router-<model> for 10Router routing."}),eo()):P({type:"error",text:t.error||"Failed to apply settings"})}catch(e){P({type:"error",text:e.message})}finally{A(!1)}},ed=async()=>{M(!0),P(null);try{let e=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),s=await e.json();e.ok?(P({type:"success",text:"Settings reset successfully!"}),H([]),q(""),eo()):P({type:"error",text:s.error||"Failed to reset settings"})}catch(e){P({type:"error",text:e.message})}finally{M(!1)}};return(0,l.jsx)(u.Zp,{size:"sm",className:"overflow-hidden",children:(0,l.jsxs)(u.Wu,{children:[(0,l.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:t,children:(0,l.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,l.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,l.jsx)(j.default,{src:"/providers/codex.png",alt:e.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:e=>{e.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:e.name}),"configured"===ea&&(0,l.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"===ea&&(0,l.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"===ea&&(0,l.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,l.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:e.description})]})]})}),s&&(0,l.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[_&&(0,l.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,l.jsx)(r.default,{name:"progress_activity",className:"animate-spin"}),(0,l.jsx)("span",{children:"Checking Codex CLI..."})]}),!_&&k&&!k.installed&&(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,l.jsxs)("div",{className:"flex items-start gap-3",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-yellow-500"}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:k.container?"10Router runs in a container":"Codex CLI not detected locally"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:k.container?"The CLI lives on your host, not inside the container. Copy the manual config below into your host's ~/.codex/config.toml.":"Manual configuration is still available if 10router is deployed on a remote server."})]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>ee(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:()=>z(!R),children:[(0,l.jsx)(r.default,{name:R?"expand_less":"help",className:"text-[18px] mr-1"}),R?"Hide":"How to Install"]})]})]}),R&&(0,l.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,l.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,l.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,l.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,l.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,l.jsx)("div",{className:"pt-2 border-t border-border",children:(0,l.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Codex reads custom providers from"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/config.toml"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!_&&k?.installed&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{className:"flex flex-col gap-2",children:[k?.rootHijacked&&(0,l.jsxs)("div",{className:"flex items-start gap-2 px-2 py-1.5 rounded text-xs bg-yellow-500/10 text-yellow-600 dark:text-yellow-400",children:[(0,l.jsx)(r.default,{name:"warning",className:"text-[14px] shrink-0 mt-0.5"}),(0,l.jsx)("span",{children:"Old settings overrode your default Codex model. Apply to restore your ChatGPT account default — added models become profiles."})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,l.jsx)(I,{value:es||es||`${n}/v1`,onChange:et,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:p,tunnelPublicUrl:f,tailscaleEnabled:b,tailscaleUrl:y,currentUrl:er})]}),k?.config&&(er?(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,l.jsx)("span",{className:"min-w-0 truncate rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5",children:er})]}):null),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,l.jsx)(K,{value:T,onChange:L,apiKeys:o,cloudEnabled:m})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-start sm:gap-2",children:[(0,l.jsx)("span",{className:"pt-1 text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Models"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,l.jsx)("div",{className:"flex min-h-7 flex-wrap gap-1.5 rounded border border-border bg-card px-2 py-1.5",children:0===D.length?(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models added"}):D.map(e=>(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 rounded border border-transparent bg-black/5 px-2 py-0.5 text-xs text-muted-foreground hover:border-border dark:bg-white/5",children:[e,(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>H(D.filter(s=>s!==e)),className:"ml-0.5 hover:text-red-500",children:(0,l.jsx)(r.default,{name:"close",className:"text-[12px]"})})}),(0,l.jsx)(h.ZI,{children:"Remove"})]})]},e))}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("button",{onClick:()=>Y(!0),className:"cursor-pointer rounded border border-border bg-card px-2 py-1 text-xs text-foreground transition-colors hover:border-primary",children:"Add Model"}),(0,l.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Launch:"," ",(0,l.jsx)("code",{className:"rounded bg-black/5 px-1 dark:bg-white/5",children:"codex --profile 10router-<model>"})]})]})]})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,l.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Subagent Model"}),(0,l.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,l.jsx)("input",{type:"text",value:F,onChange:e=>q(e.target.value),placeholder:D[0]||"provider/model-id (defaults to main model)",className:"w-full min-w-0 pl-2 pr-7 py-2 bg-card rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"}),F&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>q(""),className:"absolute right-1 top-1/2 -translate-y-1/2 p-0.5 text-muted-foreground hover:text-red-500 rounded transition-colors",children:(0,l.jsx)(r.default,{name:"close",className:"text-[14px]"})})}),(0,l.jsx)(h.ZI,{children:"Clear (will use main model)"})]})]}),(0,l.jsx)("button",{onClick:()=>V(!0),className:"w-full sm:w-auto rounded border px-2 py-2 text-xs transition-colors sm:py-1.5 whitespace-nowrap sm:shrink-0 bg-card border-border text-foreground hover:border-primary cursor-pointer",children:"Select Model"})]})]}),O&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===O.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===O.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:O.text})]}),(0,l.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,l.jsxs)(d.$,{size:"sm",onClick:ei,disabled:!T&&m&&o.length>0||0===D.length||E,children:[E&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,l.jsxs)(d.$,{variant:"outline",size:"sm",onClick:ed,disabled:$,children:[$&&(0,l.jsx)(g.A,{className:"size-4 animate-spin"}),(0,l.jsx)(r.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,l.jsxs)(d.$,{variant:"ghost",size:"sm",onClick:()=>ee(!0),children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),B&&(0,l.jsx)(i.rq,{isOpen:B,onClose:()=>Y(!1),onSelect:e=>{D.includes(e.value)||H([...D,e.value])},onDeselect:e=>{H(D.filter(s=>s!==e.value))},selectedModel:null,addedModelValues:D,closeOnSelect:!1,title:"Add Models for Codex",activeProviders:c,modelAliases:G}),J&&(0,l.jsx)(i.rq,{isOpen:J,onClose:()=>V(!1),onSelect:e=>{q(e.value),V(!1)},selectedModel:F,activeProviders:c,modelAliases:G,title:"Select Subagent Model for Codex"}),(0,l.jsx)(i.uR,{isOpen:Q,onClose:()=>ee(!1),title:"Codex CLI - Manual Configuration",configs:(N=T&&T.trim()?T:m?"<API_KEY_FROM_DASHBOARD>":"sk_10router",w=[{filename:"~/.codex/config.toml",content:`# 10Router Configuration for Codex CLI
2
2
  # Default model/provider stay on your ChatGPT account — only the provider
3
3
  # definition below is added. Selected models are merged into
4
4
  # model_catalog_json (~/.codex/10router-model-catalog.json) so they show in
@@ -37,4 +37,4 @@ ${w}
37
37
  config:
38
38
  provider: 10router
39
39
  model: ${F||D[0]||"provider/model-id"}
40
- `},{filename:"~/.dsh/.credentials.yaml (add ref)",content:`refs: { TEN_ROUTER_API_KEY: ${N} }`}])})]})})}t(56590);let ea=t(65746).env.NEXT_PUBLIC_CLOUD_URL;function en({toolId:e,machineId:s}){let t=m.d[e],[n,u]=(0,a.useState)([]),[p,h]=(0,a.useState)(!0),[g,f]=(0,a.useState)({}),[j,b]=(0,a.useState)(!1),[y,v]=(0,a.useState)(!1),[N,w]=(0,a.useState)(""),[k,C]=(0,a.useState)(!1),[_,S]=(0,a.useState)(""),[E,A]=(0,a.useState)([]);(0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let[s,t,l,r]=await Promise.all([fetch("/api/providers"),fetch("/api/settings"),fetch("/api/tunnel/status"),fetch("/api/keys")]);if(!e)return;if(s.ok){let e=await s.json();u(e.connections||[])}if(t.ok){let e=await t.json();b(e.cloudEnabled||!1)}if(l.ok){let e=await l.json();v(!!(e.tunnel?.enabled||e.tunnel?.settingsEnabled)),w(e.tunnel?.publicUrl||""),C(!!(e.tailscale?.enabled||e.tailscale?.settingsEnabled)),S(e.tailscale?.tunnelUrl||"")}if(r.ok){let e=await r.json();A(e.keys||[])}}catch(e){console.log("Error loading tool data:",e)}finally{e&&h(!1)}})(),()=>{e=!1}},[]);let $=()=>n.filter(e=>!1!==e.isActive),M=(0,a.useCallback)((e,s,t)=>{f(l=>l[e]?.[s]===t?l:{...l,[e]:{...l[e],[s]:t}})},[]);return t?(0,l.jsxs)(i.YW,{children:[(0,l.jsxs)("div",{children:[(0,l.jsx)(d.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,l.jsxs)(o(),{href:"/dashboard/cli-tools",children:[(0,l.jsx)(r.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,l.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[(0,l.jsx)("div",{className:"size-12 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${t.color}15`},children:(0,l.jsx)(c.A,{src:t.image,alt:t.name,size:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",fallbackText:t.name.slice(0,2).toUpperCase(),fallbackColor:t.color})}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:t.name}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:t.description})]})]})]}),p?(0,l.jsx)(i.KX,{}):(()=>{let s,r,a,n=(s=$(),r=[],a=new Set,s.forEach(e=>{let s=x.Xg[e.provider]||e.provider,t=(0,x.KC)(e.provider);if(t.forEach(t=>{let l=`${s}/${t.id}`;a.has(l)||(a.add(l),r.push({value:l,label:`${s}/${t.id}`,provider:e.provider,alias:s,connectionName:e.name,modelId:t.id}))}),0===t.length){let t=e.providerSpecificData?.prefix||s,l=[];e.defaultModel&&l.push({id:e.defaultModel,name:e.defaultModel}),(e.providerSpecificData?.customModels||[]).forEach(e=>{e?.id&&!l.some(s=>s.id===e.id)&&l.push({id:e.id,name:e.name||e.id})}),0===l.length&&"active"===e.testStatus&&l.push({id:"model-id",name:`${t}/model-id`}),l.forEach(s=>{let l=`${t}/${s.id}`;a.has(l)||(a.add(l),r.push({value:l,label:`${t}/${s.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:s.id}))})}}),r).length>0,o={tool:t,isExpanded:!0,onToggle:()=>{},baseUrl:y&&N?N:j&&ea?ea:window.location.origin,apiKeys:E,tunnelEnabled:y,tunnelPublicUrl:N,tailscaleEnabled:k,tailscaleUrl:_};switch(e){case"claude":return(0,l.jsx)(B,{...o,activeProviders:$(),modelMappings:g[e]||{},onModelMappingChange:(s,t)=>M(e,s,t),hasActiveProviders:n,cloudEnabled:j});case"codex":return(0,l.jsx)(Z,{...o,activeProviders:$(),cloudEnabled:j});case"opencode":return(0,l.jsx)(G,{...o,activeProviders:$(),cloudEnabled:j});case"cowork":return(0,l.jsx)(es,{...o,activeProviders:$(),hasActiveProviders:n,cloudEnabled:j,cloudUrl:ea,tunnelEnabled:y,tunnelPublicUrl:N,tailscaleEnabled:k,tailscaleUrl:_});case"dsh":return(0,l.jsx)(er,{...o,activeProviders:$(),cloudEnabled:j});default:return(0,l.jsx)(V,{toolId:e,...o,activeProviders:$(),cloudEnabled:j,tunnelEnabled:y})}})()]}):(0,l.jsxs)(i.YW,{children:[(0,l.jsx)(d.$,{variant:"outline",size:"sm",asChild:!0,className:"self-start",children:(0,l.jsxs)(o(),{href:"/dashboard/cli-tools",children:[(0,l.jsx)(r.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:"Tool not found or disabled."})]})}},56590:(e,s,t)=>{"use strict";t.d(s,{A:()=>i});var l=t(29798),r=t(53784),a=t(22205),n=t(738);let o={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function i({toolId:e,tool:s,status:t}){let d=s?.configType==="guide"?{label:"Guide",tone:"info"}:t?t.container&&null==t.installed?{label:"Manual setup",tone:"info"}:t.installed?t.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,l.jsx)(a.default,{href:`/dashboard/cli-tools/${e}`,title:s.name,iconBg:s.color?`${s.color}15`:void 0,icon:(0,l.jsx)(n.A,{src:s.image,alt:s.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:s.name.slice(0,2).toUpperCase(),fallbackColor:s.color}),children:(0,l.jsxs)(r.E,{variant:"default",children:[(0,l.jsx)("span",{className:`size-1.5 rounded-full ${o[d.tone]}`}),d.label]})})}},92412:(e,s,t)=>{"use strict";t.d(s,{YW:()=>l.Page,pV:()=>l.CardGrid,wn:()=>l.Section,zY:()=>l.PageHeader}),t(16675),t(72778);var l=t(29575)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,1699,1722,159,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=7006)),_N_E=e.O()}]);
40
+ `},{filename:"~/.dsh/.credentials.yaml (add ref)",content:`refs: { TEN_ROUTER_API_KEY: ${N} }`}])})]})})}t(56590);let ea=t(65746).env.NEXT_PUBLIC_CLOUD_URL;function en({toolId:e,machineId:s}){let t=m.d[e],[n,u]=(0,a.useState)([]),[p,h]=(0,a.useState)(!0),[g,f]=(0,a.useState)({}),[j,b]=(0,a.useState)(!1),[y,v]=(0,a.useState)(!1),[N,w]=(0,a.useState)(""),[k,C]=(0,a.useState)(!1),[_,S]=(0,a.useState)(""),[E,A]=(0,a.useState)([]);(0,a.useEffect)(()=>{let e=!0;return(async()=>{try{let[s,t,l,r]=await Promise.all([fetch("/api/providers"),fetch("/api/settings"),fetch("/api/tunnel/status"),fetch("/api/keys")]);if(!e)return;if(s.ok){let e=await s.json();u(e.connections||[])}if(t.ok){let e=await t.json();b(e.cloudEnabled||!1)}if(l.ok){let e=await l.json();v(!!(e.tunnel?.enabled||e.tunnel?.settingsEnabled)),w(e.tunnel?.publicUrl||""),C(!!(e.tailscale?.enabled||e.tailscale?.settingsEnabled)),S(e.tailscale?.tunnelUrl||"")}if(r.ok){let e=await r.json();A(e.keys||[])}}catch(e){console.log("Error loading tool data:",e)}finally{e&&h(!1)}})(),()=>{e=!1}},[]);let $=()=>n.filter(e=>!1!==e.isActive),M=(0,a.useCallback)((e,s,t)=>{f(l=>l[e]?.[s]===t?l:{...l,[e]:{...l[e],[s]:t}})},[]);return t?(0,l.jsxs)(i.YW,{children:[(0,l.jsxs)("div",{children:[(0,l.jsx)(d.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,l.jsxs)(o(),{href:"/dashboard/cli-tools",children:[(0,l.jsx)(r.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,l.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[(0,l.jsx)("div",{className:"size-12 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${t.color}15`},children:(0,l.jsx)(c.A,{src:t.image,alt:t.name,size:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",fallbackText:t.name.slice(0,2).toUpperCase(),fallbackColor:t.color})}),(0,l.jsxs)("div",{className:"flex-1",children:[(0,l.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:t.name}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:t.description})]})]})]}),p?(0,l.jsx)(i.KX,{}):(()=>{let s,r,a,n=(s=$(),r=[],a=new Set,s.forEach(e=>{let s=x.Xg[e.provider]||e.provider,t=(0,x.KC)(e.provider);if(t.forEach(t=>{let l=`${s}/${t.id}`;a.has(l)||(a.add(l),r.push({value:l,label:`${s}/${t.id}`,provider:e.provider,alias:s,connectionName:e.name,modelId:t.id}))}),0===t.length){let t=e.providerSpecificData?.prefix||s,l=[];e.defaultModel&&l.push({id:e.defaultModel,name:e.defaultModel}),(e.providerSpecificData?.customModels||[]).forEach(e=>{e?.id&&!l.some(s=>s.id===e.id)&&l.push({id:e.id,name:e.name||e.id})}),0===l.length&&"active"===e.testStatus&&l.push({id:"model-id",name:`${t}/model-id`}),l.forEach(s=>{let l=`${t}/${s.id}`;a.has(l)||(a.add(l),r.push({value:l,label:`${t}/${s.id}`,provider:e.provider,alias:t,connectionName:e.name,modelId:s.id}))})}}),r).length>0,o={tool:t,isExpanded:!0,onToggle:()=>{},baseUrl:y&&N?N:j&&ea?ea:window.location.origin,apiKeys:E,tunnelEnabled:y,tunnelPublicUrl:N,tailscaleEnabled:k,tailscaleUrl:_};switch(e){case"claude":return(0,l.jsx)(B,{...o,activeProviders:$(),modelMappings:g[e]||{},onModelMappingChange:(s,t)=>M(e,s,t),hasActiveProviders:n,cloudEnabled:j});case"codex":return(0,l.jsx)(Z,{...o,activeProviders:$(),cloudEnabled:j});case"opencode":return(0,l.jsx)(G,{...o,activeProviders:$(),cloudEnabled:j});case"cowork":return(0,l.jsx)(es,{...o,activeProviders:$(),hasActiveProviders:n,cloudEnabled:j,cloudUrl:ea,tunnelEnabled:y,tunnelPublicUrl:N,tailscaleEnabled:k,tailscaleUrl:_});case"dsh":return(0,l.jsx)(er,{...o,activeProviders:$(),cloudEnabled:j});default:return(0,l.jsx)(V,{toolId:e,...o,activeProviders:$(),cloudEnabled:j,tunnelEnabled:y})}})()]}):(0,l.jsxs)(i.YW,{children:[(0,l.jsx)(d.$,{variant:"outline",size:"sm",asChild:!0,className:"self-start",children:(0,l.jsxs)(o(),{href:"/dashboard/cli-tools",children:[(0,l.jsx)(r.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:"Tool not found or disabled."})]})}},56590:(e,s,t)=>{"use strict";t.d(s,{A:()=>i});var l=t(29798),r=t(53784),a=t(22205),n=t(738);let o={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function i({toolId:e,tool:s,status:t}){let d=s?.configType==="guide"?{label:"Guide",tone:"info"}:t?t.container&&null==t.installed?{label:"Manual setup",tone:"info"}:t.installed?t.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,l.jsx)(a.default,{href:`/dashboard/cli-tools/${e}`,title:s.name,iconBg:s.color?`${s.color}15`:void 0,icon:(0,l.jsx)(n.A,{src:s.image,alt:s.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:s.name.slice(0,2).toUpperCase(),fallbackColor:s.color}),children:(0,l.jsxs)(r.E,{variant:"default",children:[(0,l.jsx)("span",{className:`size-1.5 rounded-full ${o[d.tone]}`}),d.label]})})}},92412:(e,s,t)=>{"use strict";t.d(s,{YW:()=>l.Page,pV:()=>l.CardGrid,wn:()=>l.Section,zY:()=>l.PageHeader}),t(16675),t(72778);var l=t(29575)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,2392,5862,5113,9320,1722,159,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=7006)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{2809:(e,t,a)=>{Promise.resolve().then(a.bind(a,24324))},15764:(e,t,a)=>{"use strict";a.d(t,{CK:()=>d.default,G9:()=>c.default,Iz:()=>j.default,KX:()=>x.PanelSkeleton,LF:()=>n.default,LH:()=>f.default,Mu:()=>x.StatCardSkeleton,Nf:()=>i.default,Qv:()=>o.CardSkeleton,YW:()=>k.YW,gw:()=>h.default,jK:()=>u.default,nh:()=>g.default,pV:()=>k.pV,rq:()=>s.default,uR:()=>r.default,uo:()=>l.ConfirmModal,vE:()=>b.default,vj:()=>p.default,wI:()=>v.default,wn:()=>k.wn,zY:()=>k.zY}),a(58913);var l=a(3537),o=a(58350);a(30872),a(33526),a(42535),a(1279);var n=a(92802),s=a(25908),r=a(58729),d=a(24873),i=a(5258),u=a(80599);a(949),a(56776),a(53599),a(88336),a(69561);var c=a(37753),f=a(23444),b=a(93624),p=a(86920),v=a(65461);a(14580);var h=a(14670),j=a(70296);a(57779),a(22205);var x=a(43276),g=a(75862),k=a(92412)},24324:(e,t,a)=>{"use strict";a.d(t,{default:()=>d});var l=a(29798),o=a(15814),n=a(15764),s=a(90046),r=a(56590);function d({machineId:e}){let[t,a]=(0,o.useState)(!0),[i,u]=(0,o.useState)({});if((0,o.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await fetch("/api/cli-tools/all-statuses");t.ok&&e&&u(await t.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&a(!1)}})(),()=>{e=!1}},[]),t)return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsxs)(n.pV,{children:[(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{})]})]});let c=Object.entries(s.d);return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsx)(n.pV,{children:c.map(([e,t])=>(0,l.jsx)(r.A,{toolId:e,tool:t,status:i[e]},e))})]})}},56590:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var l=a(29798),o=a(53784),n=a(22205),s=a(738);let r={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function d({toolId:e,tool:t,status:a}){let i=t?.configType==="guide"?{label:"Guide",tone:"info"}:a?a.container&&null==a.installed?{label:"Manual setup",tone:"info"}:a.installed?a.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,l.jsx)(n.default,{href:`/dashboard/cli-tools/${e}`,title:t.name,iconBg:t.color?`${t.color}15`:void 0,icon:(0,l.jsx)(s.A,{src:t.image,alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:t.name.slice(0,2).toUpperCase(),fallbackColor:t.color}),children:(0,l.jsxs)(o.E,{variant:"default",children:[(0,l.jsx)("span",{className:`size-1.5 rounded-full ${r[i.tone]}`}),i.label]})})}},92412:(e,t,a)=>{"use strict";a.d(t,{YW:()=>l.Page,pV:()=>l.CardGrid,wn:()=>l.Section,zY:()=>l.PageHeader}),a(16675),a(72778);var l=a(29575)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,1699,1722,159,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=2809)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{2809:(e,t,a)=>{Promise.resolve().then(a.bind(a,24324))},15764:(e,t,a)=>{"use strict";a.d(t,{CK:()=>d.default,G9:()=>c.default,Iz:()=>j.default,KX:()=>x.PanelSkeleton,LF:()=>n.default,LH:()=>f.default,Mu:()=>x.StatCardSkeleton,Nf:()=>i.default,Qv:()=>o.CardSkeleton,YW:()=>k.YW,gw:()=>h.default,jK:()=>u.default,nh:()=>g.default,pV:()=>k.pV,rq:()=>s.default,uR:()=>r.default,uo:()=>l.ConfirmModal,vE:()=>b.default,vj:()=>p.default,wI:()=>v.default,wn:()=>k.wn,zY:()=>k.zY}),a(58913);var l=a(3537),o=a(58350);a(30872),a(33526),a(42535),a(1279);var n=a(92802),s=a(25908),r=a(58729),d=a(24873),i=a(5258),u=a(80599);a(949),a(56776),a(53599),a(77063),a(69561);var c=a(37753),f=a(23444),b=a(93624),p=a(86920),v=a(65461);a(14580);var h=a(14670),j=a(70296);a(57779),a(22205);var x=a(43276),g=a(75862),k=a(92412)},24324:(e,t,a)=>{"use strict";a.d(t,{default:()=>d});var l=a(29798),o=a(15814),n=a(15764),s=a(90046),r=a(56590);function d({machineId:e}){let[t,a]=(0,o.useState)(!0),[i,u]=(0,o.useState)({});if((0,o.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await fetch("/api/cli-tools/all-statuses");t.ok&&e&&u(await t.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&a(!1)}})(),()=>{e=!1}},[]),t)return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsxs)(n.pV,{children:[(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{})]})]});let c=Object.entries(s.d);return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsx)(n.pV,{children:c.map(([e,t])=>(0,l.jsx)(r.A,{toolId:e,tool:t,status:i[e]},e))})]})}},56590:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var l=a(29798),o=a(53784),n=a(22205),s=a(738);let r={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function d({toolId:e,tool:t,status:a}){let i=t?.configType==="guide"?{label:"Guide",tone:"info"}:a?a.container&&null==a.installed?{label:"Manual setup",tone:"info"}:a.installed?a.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,l.jsx)(n.default,{href:`/dashboard/cli-tools/${e}`,title:t.name,iconBg:t.color?`${t.color}15`:void 0,icon:(0,l.jsx)(s.A,{src:t.image,alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:t.name.slice(0,2).toUpperCase(),fallbackColor:t.color}),children:(0,l.jsxs)(o.E,{variant:"default",children:[(0,l.jsx)("span",{className:`size-1.5 rounded-full ${r[i.tone]}`}),i.label]})})}},92412:(e,t,a)=>{"use strict";a.d(t,{YW:()=>l.Page,pV:()=>l.CardGrid,wn:()=>l.Section,zY:()=>l.PageHeader}),a(16675),a(72778);var l=a(29575)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,2392,5862,5113,9320,1722,159,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=2809)),_N_E=e.O()}]);