@amir83nasr/10router 0.1.0

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 (1837) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +169 -0
  3. package/.next/build-manifest.json +20 -0
  4. package/.next/export-marker.json +6 -0
  5. package/.next/images-manifest.json +68 -0
  6. package/.next/next-minimal-server.js.nft.json +1 -0
  7. package/.next/next-server.js.nft.json +1 -0
  8. package/.next/package.json +1 -0
  9. package/.next/prerender-manifest.json +633 -0
  10. package/.next/react-loadable-manifest.json +11 -0
  11. package/.next/required-server-files.json +410 -0
  12. package/.next/routes-manifest.json +1132 -0
  13. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -0
  14. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -0
  15. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -0
  16. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +40 -0
  17. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -0
  18. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -0
  19. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -0
  20. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -0
  21. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -0
  22. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -0
  23. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -0
  24. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -0
  25. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -0
  26. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -0
  27. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -0
  28. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -0
  29. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -0
  30. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -0
  31. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +10 -0
  32. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -0
  33. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -0
  34. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -0
  35. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -0
  36. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -0
  37. package/.next/server/app/(dashboard)/dashboard/page.js +1 -0
  38. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -0
  39. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -0
  40. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -0
  41. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -0
  42. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -0
  43. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +21 -0
  44. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -0
  45. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -0
  46. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -0
  47. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -0
  48. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -0
  49. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -0
  50. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -0
  51. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -0
  52. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +4 -0
  53. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -0
  54. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -0
  55. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -0
  56. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -0
  57. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -0
  58. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -0
  59. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -0
  60. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -0
  61. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -0
  62. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -0
  63. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -0
  64. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -0
  65. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -0
  66. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -0
  67. package/.next/server/app/_global-error/page.js +31 -0
  68. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  69. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  70. package/.next/server/app/_global-error.html +1 -0
  71. package/.next/server/app/_global-error.meta +27 -0
  72. package/.next/server/app/_global-error.rsc +14 -0
  73. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  74. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +20 -0
  75. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  76. package/.next/server/app/_not-found/page.js +1 -0
  77. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  78. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  79. package/.next/server/app/_not-found.html +1 -0
  80. package/.next/server/app/_not-found.meta +27 -0
  81. package/.next/server/app/_not-found.rsc +24 -0
  82. package/.next/server/app/_not-found.segments/_full.segment.rsc +24 -0
  83. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +27 -0
  84. package/.next/server/app/_not-found.segments/_tree.segment.rsc +6 -0
  85. package/.next/server/app/api/auth/login/route.js +3 -0
  86. package/.next/server/app/api/auth/login/route.js.nft.json +1 -0
  87. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -0
  88. package/.next/server/app/api/auth/logout/route.js +1 -0
  89. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -0
  90. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/auth/oidc/callback/route.js +1 -0
  92. package/.next/server/app/api/auth/oidc/callback/route.js.nft.json +1 -0
  93. package/.next/server/app/api/auth/oidc/callback/route_client-reference-manifest.js +1 -0
  94. package/.next/server/app/api/auth/oidc/start/route.js +1 -0
  95. package/.next/server/app/api/auth/oidc/start/route.js.nft.json +1 -0
  96. package/.next/server/app/api/auth/oidc/start/route_client-reference-manifest.js +1 -0
  97. package/.next/server/app/api/auth/oidc/test/route.js +1 -0
  98. package/.next/server/app/api/auth/oidc/test/route.js.nft.json +1 -0
  99. package/.next/server/app/api/auth/oidc/test/route_client-reference-manifest.js +1 -0
  100. package/.next/server/app/api/auth/reset-password/route.js +1 -0
  101. package/.next/server/app/api/auth/reset-password/route.js.nft.json +1 -0
  102. package/.next/server/app/api/auth/reset-password/route_client-reference-manifest.js +1 -0
  103. package/.next/server/app/api/auth/saml/acs/route.js +3 -0
  104. package/.next/server/app/api/auth/saml/acs/route.js.nft.json +1 -0
  105. package/.next/server/app/api/auth/saml/acs/route_client-reference-manifest.js +1 -0
  106. package/.next/server/app/api/auth/saml/metadata/route.js +3 -0
  107. package/.next/server/app/api/auth/saml/metadata/route.js.nft.json +1 -0
  108. package/.next/server/app/api/auth/saml/metadata/route_client-reference-manifest.js +1 -0
  109. package/.next/server/app/api/auth/saml/start/route.js +3 -0
  110. package/.next/server/app/api/auth/saml/start/route.js.nft.json +1 -0
  111. package/.next/server/app/api/auth/saml/start/route_client-reference-manifest.js +1 -0
  112. package/.next/server/app/api/auth/saml/test/route.js +3 -0
  113. package/.next/server/app/api/auth/saml/test/route.js.nft.json +1 -0
  114. package/.next/server/app/api/auth/saml/test/route_client-reference-manifest.js +1 -0
  115. package/.next/server/app/api/auth/status/route.js +3 -0
  116. package/.next/server/app/api/auth/status/route.js.nft.json +1 -0
  117. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -0
  118. package/.next/server/app/api/changelog/route.js +1 -0
  119. package/.next/server/app/api/changelog/route.js.nft.json +1 -0
  120. package/.next/server/app/api/changelog/route_client-reference-manifest.js +1 -0
  121. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -0
  122. package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -0
  123. package/.next/server/app/api/cli-tools/all-statuses/route_client-reference-manifest.js +1 -0
  124. package/.next/server/app/api/cli-tools/claude-settings/route.js +2 -0
  125. package/.next/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -0
  126. package/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -0
  127. package/.next/server/app/api/cli-tools/codex-settings/route.js +2 -0
  128. package/.next/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -0
  129. package/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -0
  130. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -0
  131. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -0
  132. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route_client-reference-manifest.js +1 -0
  133. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -0
  134. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -0
  135. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/cli-tools/cowork-settings/route.js +2 -0
  137. package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -0
  138. package/.next/server/app/api/cli-tools/cowork-settings/route_client-reference-manifest.js +1 -0
  139. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -0
  140. package/.next/server/app/api/cli-tools/dsh-settings/route.js.nft.json +1 -0
  141. package/.next/server/app/api/cli-tools/dsh-settings/route_client-reference-manifest.js +1 -0
  142. package/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -0
  143. package/.next/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -0
  144. package/.next/server/app/api/cli-tools/opencode-settings/route_client-reference-manifest.js +1 -0
  145. package/.next/server/app/api/combos/[id]/route.js +1 -0
  146. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -0
  147. package/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -0
  148. package/.next/server/app/api/combos/route.js +1 -0
  149. package/.next/server/app/api/combos/route.js.nft.json +1 -0
  150. package/.next/server/app/api/combos/route_client-reference-manifest.js +1 -0
  151. package/.next/server/app/api/headroom/extras/route.js +1 -0
  152. package/.next/server/app/api/headroom/extras/route.js.nft.json +1 -0
  153. package/.next/server/app/api/headroom/extras/route_client-reference-manifest.js +1 -0
  154. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -0
  155. package/.next/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -0
  156. package/.next/server/app/api/headroom/proxy/[...path]/route_client-reference-manifest.js +1 -0
  157. package/.next/server/app/api/headroom/restart/route.js +1 -0
  158. package/.next/server/app/api/headroom/restart/route.js.nft.json +1 -0
  159. package/.next/server/app/api/headroom/restart/route_client-reference-manifest.js +1 -0
  160. package/.next/server/app/api/headroom/start/route.js +1 -0
  161. package/.next/server/app/api/headroom/start/route.js.nft.json +1 -0
  162. package/.next/server/app/api/headroom/start/route_client-reference-manifest.js +1 -0
  163. package/.next/server/app/api/headroom/status/route.js +1 -0
  164. package/.next/server/app/api/headroom/status/route.js.nft.json +1 -0
  165. package/.next/server/app/api/headroom/status/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/api/headroom/stop/route.js +1 -0
  167. package/.next/server/app/api/headroom/stop/route.js.nft.json +1 -0
  168. package/.next/server/app/api/headroom/stop/route_client-reference-manifest.js +1 -0
  169. package/.next/server/app/api/health/route.js +1 -0
  170. package/.next/server/app/api/health/route.js.nft.json +1 -0
  171. package/.next/server/app/api/health/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/init/route.js +1 -0
  173. package/.next/server/app/api/init/route.js.nft.json +1 -0
  174. package/.next/server/app/api/init/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/api/keys/[id]/route.js +1 -0
  176. package/.next/server/app/api/keys/[id]/route.js.nft.json +1 -0
  177. package/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -0
  178. package/.next/server/app/api/keys/route.js +1 -0
  179. package/.next/server/app/api/keys/route.js.nft.json +1 -0
  180. package/.next/server/app/api/keys/route_client-reference-manifest.js +1 -0
  181. package/.next/server/app/api/locale/route.js +1 -0
  182. package/.next/server/app/api/locale/route.js.nft.json +1 -0
  183. package/.next/server/app/api/locale/route_client-reference-manifest.js +1 -0
  184. package/.next/server/app/api/mcp/[plugin]/message/route.js +7 -0
  185. package/.next/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -0
  186. package/.next/server/app/api/mcp/[plugin]/message/route_client-reference-manifest.js +1 -0
  187. package/.next/server/app/api/mcp/[plugin]/sse/route.js +10 -0
  188. package/.next/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -0
  189. package/.next/server/app/api/mcp/[plugin]/sse/route_client-reference-manifest.js +1 -0
  190. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -0
  191. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -0
  192. package/.next/server/app/api/media-providers/tts/deepgram/voices/route_client-reference-manifest.js +1 -0
  193. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -0
  194. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -0
  195. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route_client-reference-manifest.js +1 -0
  196. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -0
  197. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -0
  198. package/.next/server/app/api/media-providers/tts/inworld/voices/route_client-reference-manifest.js +1 -0
  199. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -0
  200. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -0
  201. package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +1 -0
  202. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -0
  203. package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -0
  204. package/.next/server/app/api/media-providers/tts/voices/route_client-reference-manifest.js +1 -0
  205. package/.next/server/app/api/models/alias/route.js +1 -0
  206. package/.next/server/app/api/models/alias/route.js.nft.json +1 -0
  207. package/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -0
  208. package/.next/server/app/api/models/availability/route.js +1 -0
  209. package/.next/server/app/api/models/availability/route.js.nft.json +1 -0
  210. package/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -0
  211. package/.next/server/app/api/models/catalog-sync/route.js +1 -0
  212. package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -0
  213. package/.next/server/app/api/models/catalog-sync/route_client-reference-manifest.js +1 -0
  214. package/.next/server/app/api/models/custom/route.js +1 -0
  215. package/.next/server/app/api/models/custom/route.js.nft.json +1 -0
  216. package/.next/server/app/api/models/custom/route_client-reference-manifest.js +1 -0
  217. package/.next/server/app/api/models/disabled/route.js +1 -0
  218. package/.next/server/app/api/models/disabled/route.js.nft.json +1 -0
  219. package/.next/server/app/api/models/disabled/route_client-reference-manifest.js +1 -0
  220. package/.next/server/app/api/models/route.js +1 -0
  221. package/.next/server/app/api/models/route.js.nft.json +1 -0
  222. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  223. package/.next/server/app/api/models/test/route.js +1 -0
  224. package/.next/server/app/api/models/test/route.js.nft.json +1 -0
  225. package/.next/server/app/api/models/test/route_client-reference-manifest.js +1 -0
  226. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -0
  227. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -0
  228. package/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -0
  229. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -0
  230. package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -0
  231. package/.next/server/app/api/oauth/codex/bulk-import/route_client-reference-manifest.js +1 -0
  232. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -0
  233. package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -0
  234. package/.next/server/app/api/oauth/codex/import-token/route_client-reference-manifest.js +1 -0
  235. package/.next/server/app/api/oauth/cursor/auto-import/route.js +4 -0
  236. package/.next/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -0
  237. package/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -0
  238. package/.next/server/app/api/oauth/cursor/import/route.js +1 -0
  239. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -0
  240. package/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -0
  241. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -0
  242. package/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -0
  243. package/.next/server/app/api/oauth/gitlab/pat/route_client-reference-manifest.js +1 -0
  244. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -0
  245. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -0
  246. package/.next/server/app/api/oauth/grok-cli/bulk-import/route_client-reference-manifest.js +1 -0
  247. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -0
  248. package/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -0
  249. package/.next/server/app/api/oauth/iflow/cookie/route_client-reference-manifest.js +1 -0
  250. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -0
  251. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -0
  252. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route_client-reference-manifest.js +1 -0
  253. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +4 -0
  254. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -0
  255. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route_client-reference-manifest.js +1 -0
  256. package/.next/server/app/api/pricing/route.js +1 -0
  257. package/.next/server/app/api/pricing/route.js.nft.json +1 -0
  258. package/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -0
  259. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -0
  260. package/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -0
  261. package/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -0
  262. package/.next/server/app/api/provider-nodes/route.js +1 -0
  263. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -0
  264. package/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -0
  265. package/.next/server/app/api/provider-nodes/validate/route.js +1 -0
  266. package/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -0
  267. package/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -0
  268. package/.next/server/app/api/providers/[id]/models/route.js +1 -0
  269. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -0
  270. package/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -0
  271. package/.next/server/app/api/providers/[id]/route.js +1 -0
  272. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -0
  273. package/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -0
  274. package/.next/server/app/api/providers/[id]/test/route.js +1 -0
  275. package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -0
  276. package/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -0
  277. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -0
  278. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -0
  279. package/.next/server/app/api/providers/[id]/test-models/route_client-reference-manifest.js +1 -0
  280. package/.next/server/app/api/providers/client/route.js +1 -0
  281. package/.next/server/app/api/providers/client/route.js.nft.json +1 -0
  282. package/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -0
  283. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -0
  284. package/.next/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -0
  285. package/.next/server/app/api/providers/kilo/free-models/route_client-reference-manifest.js +1 -0
  286. package/.next/server/app/api/providers/route.js +1 -0
  287. package/.next/server/app/api/providers/route.js.nft.json +1 -0
  288. package/.next/server/app/api/providers/route_client-reference-manifest.js +1 -0
  289. package/.next/server/app/api/providers/suggested-models/route.js +1 -0
  290. package/.next/server/app/api/providers/suggested-models/route.js.nft.json +1 -0
  291. package/.next/server/app/api/providers/suggested-models/route_client-reference-manifest.js +1 -0
  292. package/.next/server/app/api/providers/test-batch/route.js +1 -0
  293. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -0
  294. package/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -0
  295. package/.next/server/app/api/providers/validate/route.js +1 -0
  296. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -0
  297. package/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -0
  298. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -0
  299. package/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -0
  300. package/.next/server/app/api/proxy-pools/[id]/route_client-reference-manifest.js +1 -0
  301. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -0
  302. package/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -0
  303. package/.next/server/app/api/proxy-pools/[id]/test/route_client-reference-manifest.js +1 -0
  304. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +43 -0
  305. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -0
  306. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route_client-reference-manifest.js +1 -0
  307. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +40 -0
  308. package/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -0
  309. package/.next/server/app/api/proxy-pools/deno-deploy/route_client-reference-manifest.js +1 -0
  310. package/.next/server/app/api/proxy-pools/route.js +1 -0
  311. package/.next/server/app/api/proxy-pools/route.js.nft.json +1 -0
  312. package/.next/server/app/api/proxy-pools/route_client-reference-manifest.js +1 -0
  313. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +33 -0
  314. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -0
  315. package/.next/server/app/api/proxy-pools/vercel-deploy/route_client-reference-manifest.js +1 -0
  316. package/.next/server/app/api/pxpipe/health/route.js +3 -0
  317. package/.next/server/app/api/pxpipe/health/route.js.nft.json +1 -0
  318. package/.next/server/app/api/pxpipe/health/route_client-reference-manifest.js +1 -0
  319. package/.next/server/app/api/pxpipe/install/route.js +3 -0
  320. package/.next/server/app/api/pxpipe/install/route.js.nft.json +1 -0
  321. package/.next/server/app/api/pxpipe/install/route_client-reference-manifest.js +1 -0
  322. package/.next/server/app/api/pxpipe/logs/route.js +3 -0
  323. package/.next/server/app/api/pxpipe/logs/route.js.nft.json +1 -0
  324. package/.next/server/app/api/pxpipe/logs/route_client-reference-manifest.js +1 -0
  325. package/.next/server/app/api/pxpipe/restart/route.js +3 -0
  326. package/.next/server/app/api/pxpipe/restart/route.js.nft.json +1 -0
  327. package/.next/server/app/api/pxpipe/restart/route_client-reference-manifest.js +1 -0
  328. package/.next/server/app/api/pxpipe/start/route.js +3 -0
  329. package/.next/server/app/api/pxpipe/start/route.js.nft.json +1 -0
  330. package/.next/server/app/api/pxpipe/start/route_client-reference-manifest.js +1 -0
  331. package/.next/server/app/api/pxpipe/stats/route.js +3 -0
  332. package/.next/server/app/api/pxpipe/stats/route.js.nft.json +1 -0
  333. package/.next/server/app/api/pxpipe/stats/route_client-reference-manifest.js +1 -0
  334. package/.next/server/app/api/pxpipe/status/route.js +3 -0
  335. package/.next/server/app/api/pxpipe/status/route.js.nft.json +1 -0
  336. package/.next/server/app/api/pxpipe/status/route_client-reference-manifest.js +1 -0
  337. package/.next/server/app/api/pxpipe/stop/route.js +3 -0
  338. package/.next/server/app/api/pxpipe/stop/route.js.nft.json +1 -0
  339. package/.next/server/app/api/pxpipe/stop/route_client-reference-manifest.js +1 -0
  340. package/.next/server/app/api/settings/database/route.js +1 -0
  341. package/.next/server/app/api/settings/database/route.js.nft.json +1 -0
  342. package/.next/server/app/api/settings/database/route_client-reference-manifest.js +1 -0
  343. package/.next/server/app/api/settings/proxy-test/route.js +1 -0
  344. package/.next/server/app/api/settings/proxy-test/route.js.nft.json +1 -0
  345. package/.next/server/app/api/settings/proxy-test/route_client-reference-manifest.js +1 -0
  346. package/.next/server/app/api/settings/require-login/route.js +1 -0
  347. package/.next/server/app/api/settings/require-login/route.js.nft.json +1 -0
  348. package/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -0
  349. package/.next/server/app/api/settings/route.js +1 -0
  350. package/.next/server/app/api/settings/route.js.nft.json +1 -0
  351. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  352. package/.next/server/app/api/shutdown/route.js +1 -0
  353. package/.next/server/app/api/shutdown/route.js.nft.json +1 -0
  354. package/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -0
  355. package/.next/server/app/api/tags/route.js +1 -0
  356. package/.next/server/app/api/tags/route.js.nft.json +1 -0
  357. package/.next/server/app/api/tags/route_client-reference-manifest.js +1 -0
  358. package/.next/server/app/api/translator/console-logs/route.js +1 -0
  359. package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -0
  360. package/.next/server/app/api/translator/console-logs/route_client-reference-manifest.js +1 -0
  361. package/.next/server/app/api/translator/console-logs/stream/route.js +9 -0
  362. package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -0
  363. package/.next/server/app/api/translator/console-logs/stream/route_client-reference-manifest.js +1 -0
  364. package/.next/server/app/api/translator/load/route.js +1 -0
  365. package/.next/server/app/api/translator/load/route.js.nft.json +1 -0
  366. package/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -0
  367. package/.next/server/app/api/translator/save/route.js +1 -0
  368. package/.next/server/app/api/translator/save/route.js.nft.json +1 -0
  369. package/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -0
  370. package/.next/server/app/api/translator/send/route.js +1 -0
  371. package/.next/server/app/api/translator/send/route.js.nft.json +1 -0
  372. package/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -0
  373. package/.next/server/app/api/translator/translate/route.js +1 -0
  374. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -0
  375. package/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -0
  376. package/.next/server/app/api/tunnel/disable/route.js +1 -0
  377. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -0
  378. package/.next/server/app/api/tunnel/disable/route_client-reference-manifest.js +1 -0
  379. package/.next/server/app/api/tunnel/enable/route.js +1 -0
  380. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -0
  381. package/.next/server/app/api/tunnel/enable/route_client-reference-manifest.js +1 -0
  382. package/.next/server/app/api/tunnel/status/route.js +1 -0
  383. package/.next/server/app/api/tunnel/status/route.js.nft.json +1 -0
  384. package/.next/server/app/api/tunnel/status/route_client-reference-manifest.js +1 -0
  385. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -0
  386. package/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -0
  387. package/.next/server/app/api/tunnel/tailscale-check/route_client-reference-manifest.js +1 -0
  388. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -0
  389. package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -0
  390. package/.next/server/app/api/tunnel/tailscale-disable/route_client-reference-manifest.js +1 -0
  391. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -0
  392. package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -0
  393. package/.next/server/app/api/tunnel/tailscale-enable/route_client-reference-manifest.js +1 -0
  394. package/.next/server/app/api/tunnel/tailscale-install/route.js +5 -0
  395. package/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -0
  396. package/.next/server/app/api/tunnel/tailscale-install/route_client-reference-manifest.js +1 -0
  397. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -0
  398. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -0
  399. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route_client-reference-manifest.js +1 -0
  400. package/.next/server/app/api/usage/[connectionId]/route.js +1 -0
  401. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -0
  402. package/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -0
  403. package/.next/server/app/api/usage/chart/route.js +1 -0
  404. package/.next/server/app/api/usage/chart/route.js.nft.json +1 -0
  405. package/.next/server/app/api/usage/chart/route_client-reference-manifest.js +1 -0
  406. package/.next/server/app/api/usage/history/route.js +1 -0
  407. package/.next/server/app/api/usage/history/route.js.nft.json +1 -0
  408. package/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -0
  409. package/.next/server/app/api/usage/logs/route.js +1 -0
  410. package/.next/server/app/api/usage/logs/route.js.nft.json +1 -0
  411. package/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -0
  412. package/.next/server/app/api/usage/providers/route.js +1 -0
  413. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -0
  414. package/.next/server/app/api/usage/providers/route_client-reference-manifest.js +1 -0
  415. package/.next/server/app/api/usage/request-details/route.js +1 -0
  416. package/.next/server/app/api/usage/request-details/route.js.nft.json +1 -0
  417. package/.next/server/app/api/usage/request-details/route_client-reference-manifest.js +1 -0
  418. package/.next/server/app/api/usage/request-logs/route.js +1 -0
  419. package/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -0
  420. package/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -0
  421. package/.next/server/app/api/usage/stats/route.js +1 -0
  422. package/.next/server/app/api/usage/stats/route.js.nft.json +1 -0
  423. package/.next/server/app/api/usage/stats/route_client-reference-manifest.js +1 -0
  424. package/.next/server/app/api/usage/stream/route.js +7 -0
  425. package/.next/server/app/api/usage/stream/route.js.nft.json +1 -0
  426. package/.next/server/app/api/usage/stream/route_client-reference-manifest.js +1 -0
  427. package/.next/server/app/api/v1/api/chat/route.js +1 -0
  428. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -0
  429. package/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -0
  430. package/.next/server/app/api/v1/audio/speech/route.js +1 -0
  431. package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -0
  432. package/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -0
  433. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -0
  434. package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -0
  435. package/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -0
  436. package/.next/server/app/api/v1/audio/voices/route.js +1 -0
  437. package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -0
  438. package/.next/server/app/api/v1/audio/voices/route_client-reference-manifest.js +1 -0
  439. package/.next/server/app/api/v1/chat/completions/route.js +1 -0
  440. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -0
  441. package/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -0
  442. package/.next/server/app/api/v1/embeddings/route.js +1 -0
  443. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -0
  444. package/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -0
  445. package/.next/server/app/api/v1/images/generations/route.js +4 -0
  446. package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -0
  447. package/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -0
  448. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -0
  449. package/.next/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -0
  450. package/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -0
  451. package/.next/server/app/api/v1/messages/route.js +1 -0
  452. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -0
  453. package/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -0
  454. package/.next/server/app/api/v1/models/[...model]/route.js +1 -0
  455. package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -0
  456. package/.next/server/app/api/v1/models/[...model]/route_client-reference-manifest.js +1 -0
  457. package/.next/server/app/api/v1/models/info/route.js +1 -0
  458. package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -0
  459. package/.next/server/app/api/v1/models/info/route_client-reference-manifest.js +1 -0
  460. package/.next/server/app/api/v1/models/route.js +1 -0
  461. package/.next/server/app/api/v1/models/route.js.nft.json +1 -0
  462. package/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -0
  463. package/.next/server/app/api/v1/responses/compact/route.js +1 -0
  464. package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -0
  465. package/.next/server/app/api/v1/responses/compact/route_client-reference-manifest.js +1 -0
  466. package/.next/server/app/api/v1/responses/route.js +1 -0
  467. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -0
  468. package/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -0
  469. package/.next/server/app/api/v1/route.js +1 -0
  470. package/.next/server/app/api/v1/route.js.nft.json +1 -0
  471. package/.next/server/app/api/v1/route_client-reference-manifest.js +1 -0
  472. package/.next/server/app/api/v1/search/route.js +1 -0
  473. package/.next/server/app/api/v1/search/route.js.nft.json +1 -0
  474. package/.next/server/app/api/v1/search/route_client-reference-manifest.js +1 -0
  475. package/.next/server/app/api/v1/systemone/route.js +1 -0
  476. package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -0
  477. package/.next/server/app/api/v1/systemone/route_client-reference-manifest.js +1 -0
  478. package/.next/server/app/api/v1/videos/[id]/route.js +1 -0
  479. package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -0
  480. package/.next/server/app/api/v1/videos/[id]/route_client-reference-manifest.js +1 -0
  481. package/.next/server/app/api/v1/videos/edits/route.js +1 -0
  482. package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -0
  483. package/.next/server/app/api/v1/videos/edits/route_client-reference-manifest.js +1 -0
  484. package/.next/server/app/api/v1/videos/extensions/route.js +1 -0
  485. package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -0
  486. package/.next/server/app/api/v1/videos/extensions/route_client-reference-manifest.js +1 -0
  487. package/.next/server/app/api/v1/videos/generations/route.js +1 -0
  488. package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -0
  489. package/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -0
  490. package/.next/server/app/api/v1/web/fetch/route.js +1 -0
  491. package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -0
  492. package/.next/server/app/api/v1/web/fetch/route_client-reference-manifest.js +1 -0
  493. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -0
  494. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -0
  495. package/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -0
  496. package/.next/server/app/api/v1beta/models/route.js +1 -0
  497. package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -0
  498. package/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -0
  499. package/.next/server/app/api/version/route.js +1 -0
  500. package/.next/server/app/api/version/route.js.nft.json +1 -0
  501. package/.next/server/app/api/version/route_client-reference-manifest.js +1 -0
  502. package/.next/server/app/api/version/shutdown/route.js +1 -0
  503. package/.next/server/app/api/version/shutdown/route.js.nft.json +1 -0
  504. package/.next/server/app/api/version/shutdown/route_client-reference-manifest.js +1 -0
  505. package/.next/server/app/api/version/update/route.js +1 -0
  506. package/.next/server/app/api/version/update/route.js.nft.json +1 -0
  507. package/.next/server/app/api/version/update/route_client-reference-manifest.js +1 -0
  508. package/.next/server/app/callback/page.js +1 -0
  509. package/.next/server/app/callback/page.js.nft.json +1 -0
  510. package/.next/server/app/callback/page_client-reference-manifest.js +1 -0
  511. package/.next/server/app/callback.html +1 -0
  512. package/.next/server/app/callback.meta +26 -0
  513. package/.next/server/app/callback.rsc +28 -0
  514. package/.next/server/app/callback.segments/_full.segment.rsc +28 -0
  515. package/.next/server/app/callback.segments/_tree.segment.rsc +6 -0
  516. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +31 -0
  517. package/.next/server/app/dashboard/basic-chat.html +1 -0
  518. package/.next/server/app/dashboard/basic-chat.meta +36 -0
  519. package/.next/server/app/dashboard/basic-chat.rsc +26 -0
  520. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +31 -0
  521. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +26 -0
  522. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +6 -0
  523. package/.next/server/app/dashboard/cli-tools.html +1 -0
  524. package/.next/server/app/dashboard/cli-tools.meta +36 -0
  525. package/.next/server/app/dashboard/cli-tools.rsc +27 -0
  526. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +31 -0
  527. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +27 -0
  528. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +6 -0
  529. package/.next/server/app/dashboard/combos.html +1 -0
  530. package/.next/server/app/dashboard/combos.meta +36 -0
  531. package/.next/server/app/dashboard/combos.rsc +29 -0
  532. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +34 -0
  533. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +29 -0
  534. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +6 -0
  535. package/.next/server/app/dashboard/endpoint.html +1 -0
  536. package/.next/server/app/dashboard/endpoint.meta +36 -0
  537. package/.next/server/app/dashboard/endpoint.rsc +27 -0
  538. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +31 -0
  539. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +27 -0
  540. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +6 -0
  541. package/.next/server/app/dashboard/media-providers/systemone.html +1 -0
  542. package/.next/server/app/dashboard/media-providers/systemone.meta +41 -0
  543. package/.next/server/app/dashboard/media-providers/systemone.rsc +29 -0
  544. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +35 -0
  545. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +29 -0
  546. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +6 -0
  547. package/.next/server/app/dashboard/profile.html +1 -0
  548. package/.next/server/app/dashboard/profile.meta +36 -0
  549. package/.next/server/app/dashboard/profile.rsc +29 -0
  550. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +34 -0
  551. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +29 -0
  552. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +6 -0
  553. package/.next/server/app/dashboard/providers/new.html +1 -0
  554. package/.next/server/app/dashboard/providers/new.meta +41 -0
  555. package/.next/server/app/dashboard/providers/new.rsc +29 -0
  556. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +35 -0
  557. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +29 -0
  558. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +6 -0
  559. package/.next/server/app/dashboard/providers.html +1 -0
  560. package/.next/server/app/dashboard/providers.meta +36 -0
  561. package/.next/server/app/dashboard/providers.rsc +29 -0
  562. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +34 -0
  563. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +29 -0
  564. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +6 -0
  565. package/.next/server/app/dashboard/proxy-pools.html +1 -0
  566. package/.next/server/app/dashboard/proxy-pools.meta +36 -0
  567. package/.next/server/app/dashboard/proxy-pools.rsc +29 -0
  568. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +34 -0
  569. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +29 -0
  570. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +6 -0
  571. package/.next/server/app/dashboard/pxpipe.html +1 -0
  572. package/.next/server/app/dashboard/pxpipe.meta +36 -0
  573. package/.next/server/app/dashboard/pxpipe.rsc +26 -0
  574. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +31 -0
  575. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +26 -0
  576. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +6 -0
  577. package/.next/server/app/dashboard/quota.html +2 -0
  578. package/.next/server/app/dashboard/quota.meta +36 -0
  579. package/.next/server/app/dashboard/quota.rsc +27 -0
  580. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +32 -0
  581. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +27 -0
  582. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +6 -0
  583. package/.next/server/app/dashboard/settings/pricing/page.js +1 -0
  584. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -0
  585. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -0
  586. package/.next/server/app/dashboard/settings/pricing.html +1 -0
  587. package/.next/server/app/dashboard/settings/pricing.meta +36 -0
  588. package/.next/server/app/dashboard/settings/pricing.rsc +28 -0
  589. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +28 -0
  590. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +6 -0
  591. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +33 -0
  592. package/.next/server/app/dashboard/token-saver.html +1 -0
  593. package/.next/server/app/dashboard/token-saver.meta +36 -0
  594. package/.next/server/app/dashboard/token-saver.rsc +26 -0
  595. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +31 -0
  596. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +26 -0
  597. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +6 -0
  598. package/.next/server/app/dashboard/usage.html +2 -0
  599. package/.next/server/app/dashboard/usage.meta +36 -0
  600. package/.next/server/app/dashboard/usage.rsc +29 -0
  601. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +34 -0
  602. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +29 -0
  603. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +6 -0
  604. package/.next/server/app/dashboard.html +1 -0
  605. package/.next/server/app/dashboard.meta +31 -0
  606. package/.next/server/app/dashboard.rsc +27 -0
  607. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +30 -0
  608. package/.next/server/app/dashboard.segments/_full.segment.rsc +27 -0
  609. package/.next/server/app/dashboard.segments/_tree.segment.rsc +6 -0
  610. package/.next/server/app/index.html +1 -0
  611. package/.next/server/app/index.meta +23 -0
  612. package/.next/server/app/index.rsc +23 -0
  613. package/.next/server/app/index.segments/__PAGE__.segment.rsc +25 -0
  614. package/.next/server/app/index.segments/_full.segment.rsc +23 -0
  615. package/.next/server/app/index.segments/_tree.segment.rsc +6 -0
  616. package/.next/server/app/landing/page.js +1 -0
  617. package/.next/server/app/landing/page.js.nft.json +1 -0
  618. package/.next/server/app/landing/page_client-reference-manifest.js +1 -0
  619. package/.next/server/app/landing.html +1 -0
  620. package/.next/server/app/landing.meta +26 -0
  621. package/.next/server/app/landing.rsc +28 -0
  622. package/.next/server/app/landing.segments/_full.segment.rsc +28 -0
  623. package/.next/server/app/landing.segments/_tree.segment.rsc +6 -0
  624. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +31 -0
  625. package/.next/server/app/login/page.js +1 -0
  626. package/.next/server/app/login/page.js.nft.json +1 -0
  627. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  628. package/.next/server/app/login.html +1 -0
  629. package/.next/server/app/login.meta +26 -0
  630. package/.next/server/app/login.rsc +28 -0
  631. package/.next/server/app/login.segments/_full.segment.rsc +28 -0
  632. package/.next/server/app/login.segments/_tree.segment.rsc +6 -0
  633. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +31 -0
  634. package/.next/server/app/manifest.webmanifest/route.js +17 -0
  635. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  636. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  637. package/.next/server/app/manifest.webmanifest.body +1 -0
  638. package/.next/server/app/manifest.webmanifest.meta +1 -0
  639. package/.next/server/app/page.js +1 -0
  640. package/.next/server/app/page.js.nft.json +1 -0
  641. package/.next/server/app/page_client-reference-manifest.js +1 -0
  642. package/.next/server/app-paths-manifest.json +169 -0
  643. package/.next/server/chunks/1003.js +1 -0
  644. package/.next/server/chunks/1011.js +1 -0
  645. package/.next/server/chunks/1126.js +1 -0
  646. package/.next/server/chunks/1157.js +1 -0
  647. package/.next/server/chunks/1194.js +1 -0
  648. package/.next/server/chunks/1238.js +1 -0
  649. package/.next/server/chunks/1273.js +1 -0
  650. package/.next/server/chunks/1316.js +165 -0
  651. package/.next/server/chunks/1336.js +1 -0
  652. package/.next/server/chunks/1412.js +1 -0
  653. package/.next/server/chunks/1470.js +1 -0
  654. package/.next/server/chunks/1564.js +1 -0
  655. package/.next/server/chunks/1612.js +33 -0
  656. package/.next/server/chunks/1633.js +1 -0
  657. package/.next/server/chunks/1985.js +1 -0
  658. package/.next/server/chunks/2076.js +1 -0
  659. package/.next/server/chunks/2143.js +1 -0
  660. package/.next/server/chunks/2151.js +1 -0
  661. package/.next/server/chunks/2225.js +9 -0
  662. package/.next/server/chunks/224.js +1 -0
  663. package/.next/server/chunks/2282.js +150 -0
  664. package/.next/server/chunks/2310.js +2 -0
  665. package/.next/server/chunks/2339.js +1 -0
  666. package/.next/server/chunks/2426.js +1 -0
  667. package/.next/server/chunks/257.js +67 -0
  668. package/.next/server/chunks/2638.js +1 -0
  669. package/.next/server/chunks/2706.js +1 -0
  670. package/.next/server/chunks/3023.js +9 -0
  671. package/.next/server/chunks/3034.js +9 -0
  672. package/.next/server/chunks/3179.js +1 -0
  673. package/.next/server/chunks/3250.js +9 -0
  674. package/.next/server/chunks/3336.js +1 -0
  675. package/.next/server/chunks/3425.js +1 -0
  676. package/.next/server/chunks/3481.js +9 -0
  677. package/.next/server/chunks/3512.js +29 -0
  678. package/.next/server/chunks/3533.js +1 -0
  679. package/.next/server/chunks/3544.js +1 -0
  680. package/.next/server/chunks/4129.js +1 -0
  681. package/.next/server/chunks/4139.js +9 -0
  682. package/.next/server/chunks/4301.js +7 -0
  683. package/.next/server/chunks/4364.js +1 -0
  684. package/.next/server/chunks/4464.js +1 -0
  685. package/.next/server/chunks/460.js +1 -0
  686. package/.next/server/chunks/4793.js +1 -0
  687. package/.next/server/chunks/4915.js +62 -0
  688. package/.next/server/chunks/4961.js +7 -0
  689. package/.next/server/chunks/537.js +9 -0
  690. package/.next/server/chunks/5412.js +9 -0
  691. package/.next/server/chunks/5496.js +1 -0
  692. package/.next/server/chunks/5761.js +1 -0
  693. package/.next/server/chunks/5939.js +9 -0
  694. package/.next/server/chunks/6009.js +1 -0
  695. package/.next/server/chunks/6056.js +1 -0
  696. package/.next/server/chunks/613.js +1 -0
  697. package/.next/server/chunks/6343.js +72 -0
  698. package/.next/server/chunks/6461.js +5 -0
  699. package/.next/server/chunks/6823.js +1 -0
  700. package/.next/server/chunks/7002.js +9 -0
  701. package/.next/server/chunks/7019.js +3 -0
  702. package/.next/server/chunks/7156.js +1 -0
  703. package/.next/server/chunks/7257.js +1 -0
  704. package/.next/server/chunks/7268.js +1 -0
  705. package/.next/server/chunks/7459.js +120 -0
  706. package/.next/server/chunks/7504.js +1 -0
  707. package/.next/server/chunks/7535.js +21 -0
  708. package/.next/server/chunks/7816.js +1 -0
  709. package/.next/server/chunks/7963.js +193 -0
  710. package/.next/server/chunks/8066.js +31 -0
  711. package/.next/server/chunks/8567.js +1 -0
  712. package/.next/server/chunks/8569.js +11 -0
  713. package/.next/server/chunks/8784.js +1 -0
  714. package/.next/server/chunks/881.js +10 -0
  715. package/.next/server/chunks/8857.js +1 -0
  716. package/.next/server/chunks/8923.js +1 -0
  717. package/.next/server/chunks/8940.js +1 -0
  718. package/.next/server/chunks/9018.js +1 -0
  719. package/.next/server/chunks/9250.js +7 -0
  720. package/.next/server/chunks/9287.js +1 -0
  721. package/.next/server/chunks/9429.js +2 -0
  722. package/.next/server/chunks/9603.js +1 -0
  723. package/.next/server/chunks/9614.js +1 -0
  724. package/.next/server/chunks/9646.js +1 -0
  725. package/.next/server/chunks/9792.js +9 -0
  726. package/.next/server/functions-config-manifest.json +25 -0
  727. package/.next/server/instrumentation.js +1 -0
  728. package/.next/server/instrumentation.js.nft.json +1 -0
  729. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  730. package/.next/server/middleware-build-manifest.js +1 -0
  731. package/.next/server/middleware-manifest.json +6 -0
  732. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  733. package/.next/server/middleware.js +171 -0
  734. package/.next/server/middleware.js.nft.json +1 -0
  735. package/.next/server/next-font-manifest.js +1 -0
  736. package/.next/server/next-font-manifest.json +1 -0
  737. package/.next/server/pages/404.html +1 -0
  738. package/.next/server/pages/500.html +1 -0
  739. package/.next/server/pages-manifest.json +4 -0
  740. package/.next/server/prefetch-hints.json +446 -0
  741. package/.next/server/server-reference-manifest.js +1 -0
  742. package/.next/server/server-reference-manifest.json +1 -0
  743. package/.next/server/webpack-runtime.js +1 -0
  744. package/.next/static/AiSMDHTT8m1mHG-uAmkFq/_buildManifest.js +1 -0
  745. package/.next/static/AiSMDHTT8m1mHG-uAmkFq/_ssgManifest.js +1 -0
  746. package/.next/static/chunks/1078-965aa38f6ae4f5b7.js +1 -0
  747. package/.next/static/chunks/1278-d7d5375869132de1.js +1 -0
  748. package/.next/static/chunks/1471-10f225f62f7469cc.js +1 -0
  749. package/.next/static/chunks/159-17737a7c99ff1a65.js +1 -0
  750. package/.next/static/chunks/1722-bb40b4311197204b.js +1 -0
  751. package/.next/static/chunks/1830-901fe48c3c62604f.js +1 -0
  752. package/.next/static/chunks/208-fcb6c54f9db5664f.js +1 -0
  753. package/.next/static/chunks/3153-fde052e626cc6d40.js +67 -0
  754. package/.next/static/chunks/3577-cd98d40e3099e1b0.js +1 -0
  755. package/.next/static/chunks/4484-893f9cfcbe1499df.js +1 -0
  756. package/.next/static/chunks/4489-0f3ff0134169e717.js +1 -0
  757. package/.next/static/chunks/4899.0d4260af2a463837.js +1 -0
  758. package/.next/static/chunks/5113-5c4f5181388aab72.js +1 -0
  759. package/.next/static/chunks/5166-cadbdbf7d6854cf9.js +1 -0
  760. package/.next/static/chunks/5778-9d97ce04f2ac118c.js +1 -0
  761. package/.next/static/chunks/5862-f98c2f3d480b80d2.js +1 -0
  762. package/.next/static/chunks/6817-449f7a2452845c74.js +1 -0
  763. package/.next/static/chunks/6920-e2b533c1eafa9521.js +1 -0
  764. package/.next/static/chunks/7276-16ef14f7b2cd478d.js +1 -0
  765. package/.next/static/chunks/7287-b8e377303d1c5ae8.js +11 -0
  766. package/.next/static/chunks/7552-11960bc118e4e0f7.js +1 -0
  767. package/.next/static/chunks/7822.01a4d5bdd39fa0b7.js +1 -0
  768. package/.next/static/chunks/7835-c1ef8f5cdaaad483.js +1 -0
  769. package/.next/static/chunks/80d4b624.42a8767f1c8767a3.js +1 -0
  770. package/.next/static/chunks/9369-b8c9520bc2536ff2.js +1 -0
  771. package/.next/static/chunks/9590-0d0b3dd0530b2b7b.js +1 -0
  772. package/.next/static/chunks/9966-7232c138a59bdc2f.js +52 -0
  773. package/.next/static/chunks/9980-971a38c4ad288d6c.js +1 -0
  774. package/.next/static/chunks/9ce8c186-3c7d7dbc5d428052.js +1 -0
  775. package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-c074ab1b76a6c8ba.js +1 -0
  776. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/page-2ff675120416e925.js +40 -0
  777. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-654e770c4dca90e8.js +1 -0
  778. package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-55bc39e30923938a.js +1 -0
  779. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-aac9a9397d3f7f17.js +1 -0
  780. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d60651b77028b014.js +1 -0
  781. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/page-3d78f5834ef97b82.js +10 -0
  782. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/page-e41bf53886195393.js +1 -0
  783. package/.next/static/chunks/app/(dashboard)/dashboard/page-670583d9f9c104af.js +1 -0
  784. package/.next/static/chunks/app/(dashboard)/dashboard/profile/page-53158d30b5643b05.js +1 -0
  785. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fd2615fea8932fd5.js +21 -0
  786. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-7c9e30c4985582a6.js +1 -0
  787. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-7cc2c66e63fce4ab.js +1 -0
  788. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/page-5e1fb41bd7b555a6.js +4 -0
  789. package/.next/static/chunks/app/(dashboard)/dashboard/pxpipe/page-1ec35dafa18e5d24.js +1 -0
  790. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-11d5ca23d18d596e.js +1 -0
  791. package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/page-388b616d8c2aa3fc.js +1 -0
  792. package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-466f7a8f7319ad85.js +1 -0
  793. package/.next/static/chunks/app/(dashboard)/layout-e1e5bead272b5c82.js +1 -0
  794. package/.next/static/chunks/app/_global-error/page-fe947d4ab19df968.js +1 -0
  795. package/.next/static/chunks/app/_not-found/page-d66f1e17185e98d1.js +1 -0
  796. package/.next/static/chunks/app/api/auth/login/route-fe947d4ab19df968.js +1 -0
  797. package/.next/static/chunks/app/api/auth/logout/route-fe947d4ab19df968.js +1 -0
  798. package/.next/static/chunks/app/api/auth/oidc/callback/route-fe947d4ab19df968.js +1 -0
  799. package/.next/static/chunks/app/api/auth/oidc/start/route-fe947d4ab19df968.js +1 -0
  800. package/.next/static/chunks/app/api/auth/oidc/test/route-fe947d4ab19df968.js +1 -0
  801. package/.next/static/chunks/app/api/auth/reset-password/route-fe947d4ab19df968.js +1 -0
  802. package/.next/static/chunks/app/api/auth/saml/acs/route-fe947d4ab19df968.js +1 -0
  803. package/.next/static/chunks/app/api/auth/saml/metadata/route-fe947d4ab19df968.js +1 -0
  804. package/.next/static/chunks/app/api/auth/saml/start/route-fe947d4ab19df968.js +1 -0
  805. package/.next/static/chunks/app/api/auth/saml/test/route-fe947d4ab19df968.js +1 -0
  806. package/.next/static/chunks/app/api/auth/status/route-fe947d4ab19df968.js +1 -0
  807. package/.next/static/chunks/app/api/changelog/route-fe947d4ab19df968.js +1 -0
  808. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-fe947d4ab19df968.js +1 -0
  809. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-fe947d4ab19df968.js +1 -0
  810. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-fe947d4ab19df968.js +1 -0
  811. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-fe947d4ab19df968.js +1 -0
  812. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-fe947d4ab19df968.js +1 -0
  813. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-fe947d4ab19df968.js +1 -0
  814. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-fe947d4ab19df968.js +1 -0
  815. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-fe947d4ab19df968.js +1 -0
  816. package/.next/static/chunks/app/api/combos/[id]/route-fe947d4ab19df968.js +1 -0
  817. package/.next/static/chunks/app/api/combos/route-fe947d4ab19df968.js +1 -0
  818. package/.next/static/chunks/app/api/headroom/extras/route-fe947d4ab19df968.js +1 -0
  819. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-fe947d4ab19df968.js +1 -0
  820. package/.next/static/chunks/app/api/headroom/restart/route-fe947d4ab19df968.js +1 -0
  821. package/.next/static/chunks/app/api/headroom/start/route-fe947d4ab19df968.js +1 -0
  822. package/.next/static/chunks/app/api/headroom/status/route-fe947d4ab19df968.js +1 -0
  823. package/.next/static/chunks/app/api/headroom/stop/route-fe947d4ab19df968.js +1 -0
  824. package/.next/static/chunks/app/api/health/route-fe947d4ab19df968.js +1 -0
  825. package/.next/static/chunks/app/api/init/route-fe947d4ab19df968.js +1 -0
  826. package/.next/static/chunks/app/api/keys/[id]/route-fe947d4ab19df968.js +1 -0
  827. package/.next/static/chunks/app/api/keys/route-fe947d4ab19df968.js +1 -0
  828. package/.next/static/chunks/app/api/locale/route-fe947d4ab19df968.js +1 -0
  829. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-fe947d4ab19df968.js +1 -0
  830. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-fe947d4ab19df968.js +1 -0
  831. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-fe947d4ab19df968.js +1 -0
  832. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-fe947d4ab19df968.js +1 -0
  833. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-fe947d4ab19df968.js +1 -0
  834. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-fe947d4ab19df968.js +1 -0
  835. package/.next/static/chunks/app/api/media-providers/tts/voices/route-fe947d4ab19df968.js +1 -0
  836. package/.next/static/chunks/app/api/models/alias/route-fe947d4ab19df968.js +1 -0
  837. package/.next/static/chunks/app/api/models/availability/route-fe947d4ab19df968.js +1 -0
  838. package/.next/static/chunks/app/api/models/catalog-sync/route-fe947d4ab19df968.js +1 -0
  839. package/.next/static/chunks/app/api/models/custom/route-fe947d4ab19df968.js +1 -0
  840. package/.next/static/chunks/app/api/models/disabled/route-fe947d4ab19df968.js +1 -0
  841. package/.next/static/chunks/app/api/models/route-fe947d4ab19df968.js +1 -0
  842. package/.next/static/chunks/app/api/models/test/route-fe947d4ab19df968.js +1 -0
  843. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-fe947d4ab19df968.js +1 -0
  844. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-fe947d4ab19df968.js +1 -0
  845. package/.next/static/chunks/app/api/oauth/codex/import-token/route-fe947d4ab19df968.js +1 -0
  846. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-fe947d4ab19df968.js +1 -0
  847. package/.next/static/chunks/app/api/oauth/cursor/import/route-fe947d4ab19df968.js +1 -0
  848. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-fe947d4ab19df968.js +1 -0
  849. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-fe947d4ab19df968.js +1 -0
  850. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-fe947d4ab19df968.js +1 -0
  851. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-fe947d4ab19df968.js +1 -0
  852. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-fe947d4ab19df968.js +1 -0
  853. package/.next/static/chunks/app/api/pricing/route-fe947d4ab19df968.js +1 -0
  854. package/.next/static/chunks/app/api/provider-nodes/[id]/route-fe947d4ab19df968.js +1 -0
  855. package/.next/static/chunks/app/api/provider-nodes/route-fe947d4ab19df968.js +1 -0
  856. package/.next/static/chunks/app/api/provider-nodes/validate/route-fe947d4ab19df968.js +1 -0
  857. package/.next/static/chunks/app/api/providers/[id]/models/route-fe947d4ab19df968.js +1 -0
  858. package/.next/static/chunks/app/api/providers/[id]/route-fe947d4ab19df968.js +1 -0
  859. package/.next/static/chunks/app/api/providers/[id]/test/route-fe947d4ab19df968.js +1 -0
  860. package/.next/static/chunks/app/api/providers/[id]/test-models/route-fe947d4ab19df968.js +1 -0
  861. package/.next/static/chunks/app/api/providers/client/route-fe947d4ab19df968.js +1 -0
  862. package/.next/static/chunks/app/api/providers/kilo/free-models/route-fe947d4ab19df968.js +1 -0
  863. package/.next/static/chunks/app/api/providers/route-fe947d4ab19df968.js +1 -0
  864. package/.next/static/chunks/app/api/providers/suggested-models/route-fe947d4ab19df968.js +1 -0
  865. package/.next/static/chunks/app/api/providers/test-batch/route-fe947d4ab19df968.js +1 -0
  866. package/.next/static/chunks/app/api/providers/validate/route-fe947d4ab19df968.js +1 -0
  867. package/.next/static/chunks/app/api/proxy-pools/[id]/route-fe947d4ab19df968.js +1 -0
  868. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-fe947d4ab19df968.js +1 -0
  869. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-fe947d4ab19df968.js +1 -0
  870. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-fe947d4ab19df968.js +1 -0
  871. package/.next/static/chunks/app/api/proxy-pools/route-fe947d4ab19df968.js +1 -0
  872. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-fe947d4ab19df968.js +1 -0
  873. package/.next/static/chunks/app/api/pxpipe/health/route-fe947d4ab19df968.js +1 -0
  874. package/.next/static/chunks/app/api/pxpipe/install/route-fe947d4ab19df968.js +1 -0
  875. package/.next/static/chunks/app/api/pxpipe/logs/route-fe947d4ab19df968.js +1 -0
  876. package/.next/static/chunks/app/api/pxpipe/restart/route-fe947d4ab19df968.js +1 -0
  877. package/.next/static/chunks/app/api/pxpipe/start/route-fe947d4ab19df968.js +1 -0
  878. package/.next/static/chunks/app/api/pxpipe/stats/route-fe947d4ab19df968.js +1 -0
  879. package/.next/static/chunks/app/api/pxpipe/status/route-fe947d4ab19df968.js +1 -0
  880. package/.next/static/chunks/app/api/pxpipe/stop/route-fe947d4ab19df968.js +1 -0
  881. package/.next/static/chunks/app/api/settings/database/route-fe947d4ab19df968.js +1 -0
  882. package/.next/static/chunks/app/api/settings/proxy-test/route-fe947d4ab19df968.js +1 -0
  883. package/.next/static/chunks/app/api/settings/require-login/route-fe947d4ab19df968.js +1 -0
  884. package/.next/static/chunks/app/api/settings/route-fe947d4ab19df968.js +1 -0
  885. package/.next/static/chunks/app/api/shutdown/route-fe947d4ab19df968.js +1 -0
  886. package/.next/static/chunks/app/api/tags/route-fe947d4ab19df968.js +1 -0
  887. package/.next/static/chunks/app/api/translator/console-logs/route-fe947d4ab19df968.js +1 -0
  888. package/.next/static/chunks/app/api/translator/console-logs/stream/route-fe947d4ab19df968.js +1 -0
  889. package/.next/static/chunks/app/api/translator/load/route-fe947d4ab19df968.js +1 -0
  890. package/.next/static/chunks/app/api/translator/save/route-fe947d4ab19df968.js +1 -0
  891. package/.next/static/chunks/app/api/translator/send/route-fe947d4ab19df968.js +1 -0
  892. package/.next/static/chunks/app/api/translator/translate/route-fe947d4ab19df968.js +1 -0
  893. package/.next/static/chunks/app/api/tunnel/disable/route-fe947d4ab19df968.js +1 -0
  894. package/.next/static/chunks/app/api/tunnel/enable/route-fe947d4ab19df968.js +1 -0
  895. package/.next/static/chunks/app/api/tunnel/status/route-fe947d4ab19df968.js +1 -0
  896. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-fe947d4ab19df968.js +1 -0
  897. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-fe947d4ab19df968.js +1 -0
  898. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-fe947d4ab19df968.js +1 -0
  899. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-fe947d4ab19df968.js +1 -0
  900. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-fe947d4ab19df968.js +1 -0
  901. package/.next/static/chunks/app/api/usage/[connectionId]/route-fe947d4ab19df968.js +1 -0
  902. package/.next/static/chunks/app/api/usage/chart/route-fe947d4ab19df968.js +1 -0
  903. package/.next/static/chunks/app/api/usage/history/route-fe947d4ab19df968.js +1 -0
  904. package/.next/static/chunks/app/api/usage/logs/route-fe947d4ab19df968.js +1 -0
  905. package/.next/static/chunks/app/api/usage/providers/route-fe947d4ab19df968.js +1 -0
  906. package/.next/static/chunks/app/api/usage/request-details/route-fe947d4ab19df968.js +1 -0
  907. package/.next/static/chunks/app/api/usage/request-logs/route-fe947d4ab19df968.js +1 -0
  908. package/.next/static/chunks/app/api/usage/stats/route-fe947d4ab19df968.js +1 -0
  909. package/.next/static/chunks/app/api/usage/stream/route-fe947d4ab19df968.js +1 -0
  910. package/.next/static/chunks/app/api/v1/api/chat/route-fe947d4ab19df968.js +1 -0
  911. package/.next/static/chunks/app/api/v1/audio/speech/route-fe947d4ab19df968.js +1 -0
  912. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-fe947d4ab19df968.js +1 -0
  913. package/.next/static/chunks/app/api/v1/audio/voices/route-fe947d4ab19df968.js +1 -0
  914. package/.next/static/chunks/app/api/v1/chat/completions/route-fe947d4ab19df968.js +1 -0
  915. package/.next/static/chunks/app/api/v1/embeddings/route-fe947d4ab19df968.js +1 -0
  916. package/.next/static/chunks/app/api/v1/images/generations/route-fe947d4ab19df968.js +1 -0
  917. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-fe947d4ab19df968.js +1 -0
  918. package/.next/static/chunks/app/api/v1/messages/route-fe947d4ab19df968.js +1 -0
  919. package/.next/static/chunks/app/api/v1/models/[...model]/route-fe947d4ab19df968.js +1 -0
  920. package/.next/static/chunks/app/api/v1/models/info/route-fe947d4ab19df968.js +1 -0
  921. package/.next/static/chunks/app/api/v1/models/route-fe947d4ab19df968.js +1 -0
  922. package/.next/static/chunks/app/api/v1/responses/compact/route-fe947d4ab19df968.js +1 -0
  923. package/.next/static/chunks/app/api/v1/responses/route-fe947d4ab19df968.js +1 -0
  924. package/.next/static/chunks/app/api/v1/route-fe947d4ab19df968.js +1 -0
  925. package/.next/static/chunks/app/api/v1/search/route-fe947d4ab19df968.js +1 -0
  926. package/.next/static/chunks/app/api/v1/systemone/route-fe947d4ab19df968.js +1 -0
  927. package/.next/static/chunks/app/api/v1/videos/[id]/route-fe947d4ab19df968.js +1 -0
  928. package/.next/static/chunks/app/api/v1/videos/edits/route-fe947d4ab19df968.js +1 -0
  929. package/.next/static/chunks/app/api/v1/videos/extensions/route-fe947d4ab19df968.js +1 -0
  930. package/.next/static/chunks/app/api/v1/videos/generations/route-fe947d4ab19df968.js +1 -0
  931. package/.next/static/chunks/app/api/v1/web/fetch/route-fe947d4ab19df968.js +1 -0
  932. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-fe947d4ab19df968.js +1 -0
  933. package/.next/static/chunks/app/api/v1beta/models/route-fe947d4ab19df968.js +1 -0
  934. package/.next/static/chunks/app/api/version/route-fe947d4ab19df968.js +1 -0
  935. package/.next/static/chunks/app/api/version/shutdown/route-fe947d4ab19df968.js +1 -0
  936. package/.next/static/chunks/app/api/version/update/route-fe947d4ab19df968.js +1 -0
  937. package/.next/static/chunks/app/callback/page-f4019bfc06b9a21c.js +1 -0
  938. package/.next/static/chunks/app/dashboard/settings/pricing/page-b9ee16bd322c018e.js +1 -0
  939. package/.next/static/chunks/app/landing/page-a088604744d51552.js +1 -0
  940. package/.next/static/chunks/app/layout-56cb8d3773a70c00.js +1 -0
  941. package/.next/static/chunks/app/login/page-dd11fb741ed7fda4.js +1 -0
  942. package/.next/static/chunks/app/manifest.webmanifest/route-fe947d4ab19df968.js +1 -0
  943. package/.next/static/chunks/app/page-fe947d4ab19df968.js +1 -0
  944. package/.next/static/chunks/e138dfde-a5c7fa92857215f2.js +1 -0
  945. package/.next/static/chunks/framework-c33600f6d7c90335.js +1 -0
  946. package/.next/static/chunks/main-536afed42e49674c.js +5 -0
  947. package/.next/static/chunks/main-app-17abdf14ff64ab69.js +1 -0
  948. package/.next/static/chunks/next/dist/client/components/builtin/app-error-fe947d4ab19df968.js +1 -0
  949. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fe947d4ab19df968.js +1 -0
  950. package/.next/static/chunks/next/dist/client/components/builtin/global-error-21486667022bd4cf.js +1 -0
  951. package/.next/static/chunks/next/dist/client/components/builtin/not-found-fe947d4ab19df968.js +1 -0
  952. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fe947d4ab19df968.js +1 -0
  953. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  954. package/.next/static/chunks/webpack-452a2f4aec1a53ee.js +1 -0
  955. package/.next/static/css/8fbebca0759ae504.css +1 -0
  956. package/.next/static/css/e07f2bf4fa519943.css +31 -0
  957. package/.next/static/css/e9178fa7e53ec623.css +1 -0
  958. package/.next/static/media/17cf9497af825577-s.woff2 +0 -0
  959. package/.next/static/media/19cfc7226ec3afaa-s.woff2 +0 -0
  960. package/.next/static/media/1abbc144918f74fd-s.p.woff2 +0 -0
  961. package/.next/static/media/21350d82a1f187e9-s.woff2 +0 -0
  962. package/.next/static/media/8c96cc4bd2a39381-s.p.woff2 +0 -0
  963. package/.next/static/media/8e9860b6e62d6359-s.woff2 +0 -0
  964. package/.next/static/media/ba9851c3c22cd980-s.woff2 +0 -0
  965. package/.next/static/media/c5fe6dc8356a8c31-s.woff2 +0 -0
  966. package/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  967. package/.next/static/media/e4af272ccee01ff0-s.p.woff2 +0 -0
  968. package/LICENSE.md +21 -0
  969. package/README.md +67 -0
  970. package/bin/10router.mjs +301 -0
  971. package/custom-server.js +147 -0
  972. package/next.config.mjs +110 -0
  973. package/open-sse/AGENTS.md +39 -0
  974. package/open-sse/config/appConstants.js +221 -0
  975. package/open-sse/config/codexInstructions.js +119 -0
  976. package/open-sse/config/defaultThinkingSignature.js +14 -0
  977. package/open-sse/config/errorConfig.js +94 -0
  978. package/open-sse/config/googleTtsLanguages.js +62 -0
  979. package/open-sse/config/grokCli.js +10 -0
  980. package/open-sse/config/mediaConfig.js +27 -0
  981. package/open-sse/config/models.js +13 -0
  982. package/open-sse/config/ollamaModels.js +28 -0
  983. package/open-sse/config/providerModels.js +138 -0
  984. package/open-sse/config/providers.js +21 -0
  985. package/open-sse/config/runtimeConfig.js +101 -0
  986. package/open-sse/config/ttsModels.js +199 -0
  987. package/open-sse/executors/antigravity.js +706 -0
  988. package/open-sse/executors/base.js +231 -0
  989. package/open-sse/executors/codex.js +606 -0
  990. package/open-sse/executors/cursor.js +1251 -0
  991. package/open-sse/executors/default.js +352 -0
  992. package/open-sse/executors/index.js +50 -0
  993. package/open-sse/executors/opencode-go.js +216 -0
  994. package/open-sse/executors/opencode-zen.js +343 -0
  995. package/open-sse/executors/opencode.js +618 -0
  996. package/open-sse/executors/qoder.js +860 -0
  997. package/open-sse/executors/xiaomi-mimo.js +107 -0
  998. package/open-sse/executors/xiaomi-tokenplan.js +20 -0
  999. package/open-sse/executors/zed.js +330 -0
  1000. package/open-sse/handlers/chatCore/nonStreamingHandler.js +490 -0
  1001. package/open-sse/handlers/chatCore/requestDetail.js +169 -0
  1002. package/open-sse/handlers/chatCore/sseToJsonHandler.js +503 -0
  1003. package/open-sse/handlers/chatCore/streamingHandler.js +310 -0
  1004. package/open-sse/handlers/chatCore.js +740 -0
  1005. package/open-sse/handlers/embeddingProviders/_base.js +4 -0
  1006. package/open-sse/handlers/embeddingProviders/gemini.js +55 -0
  1007. package/open-sse/handlers/embeddingProviders/index.js +41 -0
  1008. package/open-sse/handlers/embeddingProviders/openai.js +31 -0
  1009. package/open-sse/handlers/embeddingProviders/openaiCompatNode.js +13 -0
  1010. package/open-sse/handlers/embeddingProviders/selfhostedEmbedding.js +49 -0
  1011. package/open-sse/handlers/embeddingsCore.js +144 -0
  1012. package/open-sse/handlers/fetch/index.js +415 -0
  1013. package/open-sse/handlers/imageGenerationCore.js +261 -0
  1014. package/open-sse/handlers/imageProviders/_base.js +31 -0
  1015. package/open-sse/handlers/imageProviders/antigravity.js +88 -0
  1016. package/open-sse/handlers/imageProviders/blackForestLabs.js +47 -0
  1017. package/open-sse/handlers/imageProviders/codex.js +235 -0
  1018. package/open-sse/handlers/imageProviders/comfyui.js +12 -0
  1019. package/open-sse/handlers/imageProviders/falAi.js +44 -0
  1020. package/open-sse/handlers/imageProviders/gemini.js +28 -0
  1021. package/open-sse/handlers/imageProviders/huggingface.js +23 -0
  1022. package/open-sse/handlers/imageProviders/index.js +41 -0
  1023. package/open-sse/handlers/imageProviders/nanobanana.js +61 -0
  1024. package/open-sse/handlers/imageProviders/openai.js +33 -0
  1025. package/open-sse/handlers/imageProviders/runwayml.js +60 -0
  1026. package/open-sse/handlers/imageProviders/sdwebui.js +22 -0
  1027. package/open-sse/handlers/imageProviders/stabilityAi.js +35 -0
  1028. package/open-sse/handlers/responsesHandler.js +107 -0
  1029. package/open-sse/handlers/search/callers.js +469 -0
  1030. package/open-sse/handlers/search/chatSearch.js +502 -0
  1031. package/open-sse/handlers/search/index.js +246 -0
  1032. package/open-sse/handlers/search/normalizers.js +414 -0
  1033. package/open-sse/handlers/sttCore.js +262 -0
  1034. package/open-sse/handlers/systemoneCore.js +89 -0
  1035. package/open-sse/handlers/ttsCore.js +88 -0
  1036. package/open-sse/handlers/ttsProviders/_base.js +51 -0
  1037. package/open-sse/handlers/ttsProviders/edgeTts.js +89 -0
  1038. package/open-sse/handlers/ttsProviders/elevenlabs.js +48 -0
  1039. package/open-sse/handlers/ttsProviders/gemini.js +136 -0
  1040. package/open-sse/handlers/ttsProviders/genericFormats.js +191 -0
  1041. package/open-sse/handlers/ttsProviders/googleTts.js +64 -0
  1042. package/open-sse/handlers/ttsProviders/index.js +56 -0
  1043. package/open-sse/handlers/ttsProviders/localDevice.js +98 -0
  1044. package/open-sse/handlers/ttsProviders/minimax.js +63 -0
  1045. package/open-sse/handlers/ttsProviders/openai.js +36 -0
  1046. package/open-sse/handlers/ttsProviders/openrouter.js +73 -0
  1047. package/open-sse/handlers/ttsProviders/selfhostedTts.js +70 -0
  1048. package/open-sse/handlers/ttsProviders/xiaomi-mimo.js +71 -0
  1049. package/open-sse/handlers/videoCore.js +242 -0
  1050. package/open-sse/handlers/videoProviders/index.js +12 -0
  1051. package/open-sse/handlers/videoProviders/openrouter.js +43 -0
  1052. package/open-sse/index.js +84 -0
  1053. package/open-sse/providers/REGISTRY_TEMPLATE.js +98 -0
  1054. package/open-sse/providers/capabilities.js +1543 -0
  1055. package/open-sse/providers/catalogOverride.js +82 -0
  1056. package/open-sse/providers/index.js +63 -0
  1057. package/open-sse/providers/models/helpers.js +27 -0
  1058. package/open-sse/providers/models/namePatterns.js +33 -0
  1059. package/open-sse/providers/models/schema.js +48 -0
  1060. package/open-sse/providers/pricing.js +1204 -0
  1061. package/open-sse/providers/registry/antigravity.js +147 -0
  1062. package/open-sse/providers/registry/claude.js +81 -0
  1063. package/open-sse/providers/registry/codex.js +210 -0
  1064. package/open-sse/providers/registry/cursor.js +58 -0
  1065. package/open-sse/providers/registry/deepseek.js +74 -0
  1066. package/open-sse/providers/registry/fish-audio.js +31 -0
  1067. package/open-sse/providers/registry/gemini.js +126 -0
  1068. package/open-sse/providers/registry/glm-cn.js +39 -0
  1069. package/open-sse/providers/registry/glm.js +75 -0
  1070. package/open-sse/providers/registry/groq.js +62 -0
  1071. package/open-sse/providers/registry/huggingface.js +40 -0
  1072. package/open-sse/providers/registry/iflow.js +52 -0
  1073. package/open-sse/providers/registry/index.js +59 -0
  1074. package/open-sse/providers/registry/mimo-free.js +25 -0
  1075. package/open-sse/providers/registry/minimax-cn.js +82 -0
  1076. package/open-sse/providers/registry/minimax.js +94 -0
  1077. package/open-sse/providers/registry/openai.js +122 -0
  1078. package/open-sse/providers/registry/opencode-go.js +115 -0
  1079. package/open-sse/providers/registry/opencode-zen.js +297 -0
  1080. package/open-sse/providers/registry/opencode.js +54 -0
  1081. package/open-sse/providers/registry/openrouter.js +128 -0
  1082. package/open-sse/providers/registry/qoder.js +61 -0
  1083. package/open-sse/providers/registry/siliconflow.js +39 -0
  1084. package/open-sse/providers/registry/vercel-ai-gateway.js +42 -0
  1085. package/open-sse/providers/registry/xai.js +59 -0
  1086. package/open-sse/providers/registry/xiaomi-mimo.js +90 -0
  1087. package/open-sse/providers/registry/xiaomi-tokenplan.js +66 -0
  1088. package/open-sse/providers/registry/xquik.js +31 -0
  1089. package/open-sse/providers/registry/zed.js +70 -0
  1090. package/open-sse/providers/schema.js +76 -0
  1091. package/open-sse/providers/shared.js +114 -0
  1092. package/open-sse/providers/thinkingLevels.js +74 -0
  1093. package/open-sse/providers/visionPatterns.js +58 -0
  1094. package/open-sse/rtk/applyFilter.js +17 -0
  1095. package/open-sse/rtk/autodetect.js +124 -0
  1096. package/open-sse/rtk/caveman.js +9 -0
  1097. package/open-sse/rtk/cavemanPrompts.js +118 -0
  1098. package/open-sse/rtk/constants.js +78 -0
  1099. package/open-sse/rtk/filters/buildOutput.js +133 -0
  1100. package/open-sse/rtk/filters/dedupLog.js +44 -0
  1101. package/open-sse/rtk/filters/find.js +50 -0
  1102. package/open-sse/rtk/filters/gitDiff.js +92 -0
  1103. package/open-sse/rtk/filters/gitLog.js +102 -0
  1104. package/open-sse/rtk/filters/gitStatus.js +129 -0
  1105. package/open-sse/rtk/filters/grep.js +48 -0
  1106. package/open-sse/rtk/filters/ls.js +83 -0
  1107. package/open-sse/rtk/filters/readNumbered.js +27 -0
  1108. package/open-sse/rtk/filters/searchList.js +52 -0
  1109. package/open-sse/rtk/filters/smartTruncate.js +19 -0
  1110. package/open-sse/rtk/filters/tree.js +32 -0
  1111. package/open-sse/rtk/headroom.js +296 -0
  1112. package/open-sse/rtk/index.js +122 -0
  1113. package/open-sse/rtk/ponytail.js +9 -0
  1114. package/open-sse/rtk/ponytailPrompt.js +58 -0
  1115. package/open-sse/rtk/pxpipe.js +113 -0
  1116. package/open-sse/rtk/registry.js +40 -0
  1117. package/open-sse/rtk/systemInject.js +301 -0
  1118. package/open-sse/services/accountFallback.js +244 -0
  1119. package/open-sse/services/capacityAdapter.js +182 -0
  1120. package/open-sse/services/combo.js +715 -0
  1121. package/open-sse/services/compact.js +70 -0
  1122. package/open-sse/services/copilotModels.js +163 -0
  1123. package/open-sse/services/cursorModels.js +209 -0
  1124. package/open-sse/services/grokCliModels.js +128 -0
  1125. package/open-sse/services/kimchiModels.js +191 -0
  1126. package/open-sse/services/model.js +141 -0
  1127. package/open-sse/services/oauthCredentialManager.js +165 -0
  1128. package/open-sse/services/projectId.js +343 -0
  1129. package/open-sse/services/provider.js +181 -0
  1130. package/open-sse/services/qoderModels.js +410 -0
  1131. package/open-sse/services/thoughtSignatureStore.js +210 -0
  1132. package/open-sse/services/tokenRefresh/dedup.js +31 -0
  1133. package/open-sse/services/tokenRefresh/providers.js +564 -0
  1134. package/open-sse/services/tokenRefresh.js +201 -0
  1135. package/open-sse/services/usage/antigravity-weekly.js +155 -0
  1136. package/open-sse/services/usage/claude.js +211 -0
  1137. package/open-sse/services/usage/codebuddy-cn.js +172 -0
  1138. package/open-sse/services/usage/codex.js +283 -0
  1139. package/open-sse/services/usage/commandcode.js +153 -0
  1140. package/open-sse/services/usage/deepseek.js +103 -0
  1141. package/open-sse/services/usage/github.js +107 -0
  1142. package/open-sse/services/usage/glm.js +88 -0
  1143. package/open-sse/services/usage/google.js +223 -0
  1144. package/open-sse/services/usage/grok-cli.js +414 -0
  1145. package/open-sse/services/usage/grokCliQuotaFrame.js +194 -0
  1146. package/open-sse/services/usage/groq.js +133 -0
  1147. package/open-sse/services/usage/minimax.js +297 -0
  1148. package/open-sse/services/usage/misc.js +275 -0
  1149. package/open-sse/services/usage/opencode-go.js +106 -0
  1150. package/open-sse/services/usage/shared.js +70 -0
  1151. package/open-sse/services/usage/xiaomi-mimo.js +129 -0
  1152. package/open-sse/services/usage/zed.js +220 -0
  1153. package/open-sse/services/usage.js +88 -0
  1154. package/open-sse/shared/machineId.js +23 -0
  1155. package/open-sse/shared/mimoAccount.js +306 -0
  1156. package/open-sse/shared/qoder/attachments.js +436 -0
  1157. package/open-sse/shared/qoder/constants.js +182 -0
  1158. package/open-sse/shared/qoder/contextTier.js +180 -0
  1159. package/open-sse/shared/qoder/cosy.js +175 -0
  1160. package/open-sse/shared/qoder/encoding.js +55 -0
  1161. package/open-sse/shared/qoder/sse.js +209 -0
  1162. package/open-sse/shared/zedAuth.js +431 -0
  1163. package/open-sse/transformer/responsesTransformer.js +438 -0
  1164. package/open-sse/transformer/streamToJsonConverter.js +113 -0
  1165. package/open-sse/translator/concerns/chunk.js +11 -0
  1166. package/open-sse/translator/concerns/finishReason.js +87 -0
  1167. package/open-sse/translator/concerns/image.js +158 -0
  1168. package/open-sse/translator/concerns/json.js +9 -0
  1169. package/open-sse/translator/concerns/message.js +8 -0
  1170. package/open-sse/translator/concerns/modality.js +182 -0
  1171. package/open-sse/translator/concerns/paramSupport.js +80 -0
  1172. package/open-sse/translator/concerns/prefetch.js +111 -0
  1173. package/open-sse/translator/concerns/reasoning.js +23 -0
  1174. package/open-sse/translator/concerns/thinking.js +53 -0
  1175. package/open-sse/translator/concerns/thinkingUnified.js +438 -0
  1176. package/open-sse/translator/concerns/toolCall.js +185 -0
  1177. package/open-sse/translator/concerns/usage.js +98 -0
  1178. package/open-sse/translator/formats/claude.js +705 -0
  1179. package/open-sse/translator/formats/gemini.js +498 -0
  1180. package/open-sse/translator/formats/maxTokens.js +33 -0
  1181. package/open-sse/translator/formats/openai.js +150 -0
  1182. package/open-sse/translator/formats/responsesApi.js +210 -0
  1183. package/open-sse/translator/formats.js +32 -0
  1184. package/open-sse/translator/index.js +297 -0
  1185. package/open-sse/translator/request/antigravity-to-openai.js +250 -0
  1186. package/open-sse/translator/request/claude-to-openai.js +297 -0
  1187. package/open-sse/translator/request/gemini-to-openai.js +152 -0
  1188. package/open-sse/translator/request/openai-responses.js +502 -0
  1189. package/open-sse/translator/request/openai-to-claude.js +413 -0
  1190. package/open-sse/translator/request/openai-to-cursor.js +185 -0
  1191. package/open-sse/translator/request/openai-to-gemini.js +477 -0
  1192. package/open-sse/translator/response/claude-to-openai.js +227 -0
  1193. package/open-sse/translator/response/cursor-to-openai.js +30 -0
  1194. package/open-sse/translator/response/gemini-to-openai.js +172 -0
  1195. package/open-sse/translator/response/openai-responses.js +652 -0
  1196. package/open-sse/translator/response/openai-to-antigravity.js +127 -0
  1197. package/open-sse/translator/response/openai-to-claude.js +276 -0
  1198. package/open-sse/translator/schema/blocks.js +57 -0
  1199. package/open-sse/translator/schema/defaults.js +7 -0
  1200. package/open-sse/translator/schema/finishReasons.js +28 -0
  1201. package/open-sse/translator/schema/index.js +11 -0
  1202. package/open-sse/translator/schema/roles.js +16 -0
  1203. package/open-sse/utils/bypassHandler.js +327 -0
  1204. package/open-sse/utils/claudeCloaking.js +274 -0
  1205. package/open-sse/utils/claudeSignature.js +41 -0
  1206. package/open-sse/utils/claudeToolTypeSelfCheck.mjs +121 -0
  1207. package/open-sse/utils/clientDetector.js +70 -0
  1208. package/open-sse/utils/codexToolSchema.js +80 -0
  1209. package/open-sse/utils/cursorChecksum.js +151 -0
  1210. package/open-sse/utils/cursorProtobuf.js +999 -0
  1211. package/open-sse/utils/debugLog.js +19 -0
  1212. package/open-sse/utils/error.js +159 -0
  1213. package/open-sse/utils/modelMarkers.js +23 -0
  1214. package/open-sse/utils/ollamaTransform.js +102 -0
  1215. package/open-sse/utils/opencodeFreeUsage.js +115 -0
  1216. package/open-sse/utils/proxyFetch.js +258 -0
  1217. package/open-sse/utils/reasoningContentInjector.js +77 -0
  1218. package/open-sse/utils/requestLogger.js +271 -0
  1219. package/open-sse/utils/responsesStreamHelpers.js +53 -0
  1220. package/open-sse/utils/sessionManager.js +286 -0
  1221. package/open-sse/utils/sse.js +14 -0
  1222. package/open-sse/utils/sseConstants.js +23 -0
  1223. package/open-sse/utils/stream.js +612 -0
  1224. package/open-sse/utils/streamHandler.js +329 -0
  1225. package/open-sse/utils/streamHelpers.js +155 -0
  1226. package/open-sse/utils/toolDeduper.js +49 -0
  1227. package/open-sse/utils/usageTracking.js +473 -0
  1228. package/package.json +118 -0
  1229. package/public/favicon.svg +72 -0
  1230. package/public/i18n/literals/fa.json +1380 -0
  1231. package/public/icons/icon-192.svg +22 -0
  1232. package/public/icons/icon-512.svg +22 -0
  1233. package/public/icons/icon.svg +72 -0
  1234. package/public/providers/agentrouter.png +0 -0
  1235. package/public/providers/alicode-intl.png +0 -0
  1236. package/public/providers/alicode.png +0 -0
  1237. package/public/providers/alims-intl.png +0 -0
  1238. package/public/providers/alitp-intl.png +0 -0
  1239. package/public/providers/amp.png +0 -0
  1240. package/public/providers/anthropic.png +0 -0
  1241. package/public/providers/api-airforce.png +0 -0
  1242. package/public/providers/assemblyai.png +0 -0
  1243. package/public/providers/aws-polly.png +0 -0
  1244. package/public/providers/azure.png +0 -0
  1245. package/public/providers/baidu.png +0 -0
  1246. package/public/providers/bazaarlink.png +0 -0
  1247. package/public/providers/black-forest-labs.png +0 -0
  1248. package/public/providers/blackbox.png +0 -0
  1249. package/public/providers/bluesminds.png +0 -0
  1250. package/public/providers/brave-search.png +0 -0
  1251. package/public/providers/byteplus.png +0 -0
  1252. package/public/providers/cartesia.png +0 -0
  1253. package/public/providers/cerebras.png +0 -0
  1254. package/public/providers/chutes.png +0 -0
  1255. package/public/providers/claude.png +0 -0
  1256. package/public/providers/clinepass.png +0 -0
  1257. package/public/providers/codebuddy-cn.png +0 -0
  1258. package/public/providers/codebuddy-intl.png +0 -0
  1259. package/public/providers/codex.png +0 -0
  1260. package/public/providers/cohere.png +0 -0
  1261. package/public/providers/comfyui.png +0 -0
  1262. package/public/providers/commandcode.png +0 -0
  1263. package/public/providers/continue.png +0 -0
  1264. package/public/providers/coqui.png +0 -0
  1265. package/public/providers/cursor.png +0 -0
  1266. package/public/providers/deepgram.png +0 -0
  1267. package/public/providers/deepseek-tui.png +0 -0
  1268. package/public/providers/deepseek.png +0 -0
  1269. package/public/providers/devin-cli.png +0 -0
  1270. package/public/providers/droid.png +0 -0
  1271. package/public/providers/edge-tts.png +0 -0
  1272. package/public/providers/elevenlabs.png +0 -0
  1273. package/public/providers/exa.png +0 -0
  1274. package/public/providers/fal-ai.png +0 -0
  1275. package/public/providers/featherless.png +0 -0
  1276. package/public/providers/firecrawl.png +0 -0
  1277. package/public/providers/fireworks.png +0 -0
  1278. package/public/providers/fish-audio.png +0 -0
  1279. package/public/providers/gemini.png +0 -0
  1280. package/public/providers/github.png +0 -0
  1281. package/public/providers/gitlab.png +0 -0
  1282. package/public/providers/glm-cn.png +0 -0
  1283. package/public/providers/glm.png +0 -0
  1284. package/public/providers/google-pse.png +0 -0
  1285. package/public/providers/google-tts.png +0 -0
  1286. package/public/providers/grok-cli.png +0 -0
  1287. package/public/providers/grok-web.png +0 -0
  1288. package/public/providers/groq.png +0 -0
  1289. package/public/providers/hermes.png +0 -0
  1290. package/public/providers/huggingface.png +0 -0
  1291. package/public/providers/hyperbolic.png +0 -0
  1292. package/public/providers/iflow.png +0 -0
  1293. package/public/providers/inworld.png +0 -0
  1294. package/public/providers/jcode.png +0 -0
  1295. package/public/providers/jina-ai.png +0 -0
  1296. package/public/providers/jina-reader.png +0 -0
  1297. package/public/providers/kilo-gateway.png +0 -0
  1298. package/public/providers/kilocode.png +0 -0
  1299. package/public/providers/kimchi.png +0 -0
  1300. package/public/providers/kimchi.svg +4 -0
  1301. package/public/providers/linkup.png +0 -0
  1302. package/public/providers/llm7.png +0 -0
  1303. package/public/providers/local-device.png +0 -0
  1304. package/public/providers/longcat.png +0 -0
  1305. package/public/providers/mimo-free.png +0 -0
  1306. package/public/providers/minimax-cn.png +0 -0
  1307. package/public/providers/minimax.png +0 -0
  1308. package/public/providers/mistral.png +0 -0
  1309. package/public/providers/mmf.png +0 -0
  1310. package/public/providers/morph.png +0 -0
  1311. package/public/providers/nanobanana.png +0 -0
  1312. package/public/providers/nebius.png +0 -0
  1313. package/public/providers/novita.png +0 -0
  1314. package/public/providers/nvidia.png +0 -0
  1315. package/public/providers/ollama-local.png +0 -0
  1316. package/public/providers/ollama.png +0 -0
  1317. package/public/providers/openai.png +0 -0
  1318. package/public/providers/openclaw.png +0 -0
  1319. package/public/providers/opencode-go.png +0 -0
  1320. package/public/providers/opencode.png +0 -0
  1321. package/public/providers/opendesign.png +0 -0
  1322. package/public/providers/openrouter.png +0 -0
  1323. package/public/providers/perplexity-agent.png +0 -0
  1324. package/public/providers/perplexity-web.png +0 -0
  1325. package/public/providers/perplexity.png +0 -0
  1326. package/public/providers/playht.png +0 -0
  1327. package/public/providers/poolside.png +0 -0
  1328. package/public/providers/qoder.png +0 -0
  1329. package/public/providers/qwen.png +0 -0
  1330. package/public/providers/recraft.png +0 -0
  1331. package/public/providers/reka.png +0 -0
  1332. package/public/providers/roo.png +0 -0
  1333. package/public/providers/runwayml.png +0 -0
  1334. package/public/providers/sambanova.png +0 -0
  1335. package/public/providers/sdwebui.png +0 -0
  1336. package/public/providers/searchapi.png +0 -0
  1337. package/public/providers/searxng.png +0 -0
  1338. package/public/providers/selfhosted-embedding.png +0 -0
  1339. package/public/providers/selfhosted-stt.png +0 -0
  1340. package/public/providers/selfhosted-tts.png +0 -0
  1341. package/public/providers/serper.png +0 -0
  1342. package/public/providers/siliconflow.png +0 -0
  1343. package/public/providers/stability-ai.png +0 -0
  1344. package/public/providers/tavily.png +0 -0
  1345. package/public/providers/tencent.png +0 -0
  1346. package/public/providers/together.png +0 -0
  1347. package/public/providers/tokenrouter.png +0 -0
  1348. package/public/providers/topaz.png +0 -0
  1349. package/public/providers/tortoise.png +0 -0
  1350. package/public/providers/trae.png +0 -0
  1351. package/public/providers/venice.png +0 -0
  1352. package/public/providers/vercel-ai-gateway.png +0 -0
  1353. package/public/providers/vercel.png +0 -0
  1354. package/public/providers/volcengine-ark.png +0 -0
  1355. package/public/providers/voyage-ai.png +0 -0
  1356. package/public/providers/windsurf.png +0 -0
  1357. package/public/providers/workbuddy.png +0 -0
  1358. package/public/providers/xai.png +0 -0
  1359. package/public/providers/xiaomi-mimo.png +0 -0
  1360. package/public/providers/xiaomi-tokenplan.png +0 -0
  1361. package/public/providers/xquik.png +0 -0
  1362. package/public/providers/youcom.png +0 -0
  1363. package/public/providers/zed.png +0 -0
  1364. package/public/sw.js +22 -0
  1365. package/scripts/dev-local.mjs +67 -0
  1366. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +1140 -0
  1367. package/src/app/(dashboard)/dashboard/basic-chat/page.tsx +5 -0
  1368. package/src/app/(dashboard)/dashboard/cli-tools/CLIToolsPageClient.tsx +69 -0
  1369. package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx +279 -0
  1370. package/src/app/(dashboard)/dashboard/cli-tools/[toolId]/page.tsx +11 -0
  1371. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +705 -0
  1372. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/CodexToolCard.tsx +596 -0
  1373. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/CoworkToolCard.tsx +835 -0
  1374. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/DefaultToolCard.tsx +318 -0
  1375. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/DshToolCard.tsx +537 -0
  1376. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/OpenCodeToolCard.tsx +661 -0
  1377. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ToolSummaryCard.tsx +49 -0
  1378. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/index.ts +7 -0
  1379. package/src/app/(dashboard)/dashboard/cli-tools/components/index.ts +11 -0
  1380. package/src/app/(dashboard)/dashboard/cli-tools/components/shared/ApiKeySelect.tsx +155 -0
  1381. package/src/app/(dashboard)/dashboard/cli-tools/components/shared/BaseUrlSelect.tsx +241 -0
  1382. package/src/app/(dashboard)/dashboard/cli-tools/components/shared/cliEndpointMatch.ts +13 -0
  1383. package/src/app/(dashboard)/dashboard/cli-tools/components/shared/cliEndpointPresets.ts +106 -0
  1384. package/src/app/(dashboard)/dashboard/cli-tools/components/shared/index.ts +4 -0
  1385. package/src/app/(dashboard)/dashboard/cli-tools/page.tsx +7 -0
  1386. package/src/app/(dashboard)/dashboard/combos/page.tsx +901 -0
  1387. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +414 -0
  1388. package/src/app/(dashboard)/dashboard/console-log/page.tsx +8 -0
  1389. package/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +434 -0
  1390. package/src/app/(dashboard)/dashboard/endpoint/components/EndpointRow.tsx +35 -0
  1391. package/src/app/(dashboard)/dashboard/endpoint/components/SecurityWarning.tsx +30 -0
  1392. package/src/app/(dashboard)/dashboard/endpoint/components/StatusAlert.tsx +33 -0
  1393. package/src/app/(dashboard)/dashboard/endpoint/endpointConstants.ts +37 -0
  1394. package/src/app/(dashboard)/dashboard/endpoint/endpointPing.ts +33 -0
  1395. package/src/app/(dashboard)/dashboard/endpoint/page.tsx +7 -0
  1396. package/src/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.tsx +350 -0
  1397. package/src/app/(dashboard)/dashboard/media-providers/systemone/page.tsx +124 -0
  1398. package/src/app/(dashboard)/dashboard/page.tsx +7 -0
  1399. package/src/app/(dashboard)/dashboard/profile/page.tsx +905 -0
  1400. package/src/app/(dashboard)/dashboard/providers/[id]/AddApiKeyModal.tsx +380 -0
  1401. package/src/app/(dashboard)/dashboard/providers/[id]/AddCustomModelModal.tsx +171 -0
  1402. package/src/app/(dashboard)/dashboard/providers/[id]/BulkImportCodexModal.tsx +147 -0
  1403. package/src/app/(dashboard)/dashboard/providers/[id]/BulkImportGrokCliModal.tsx +289 -0
  1404. package/src/app/(dashboard)/dashboard/providers/[id]/CompatibleModelsSection.tsx +259 -0
  1405. package/src/app/(dashboard)/dashboard/providers/[id]/ConnectionRow.tsx +362 -0
  1406. package/src/app/(dashboard)/dashboard/providers/[id]/CooldownTimer.tsx +32 -0
  1407. package/src/app/(dashboard)/dashboard/providers/[id]/EditCompatibleNodeModal.tsx +163 -0
  1408. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +116 -0
  1409. package/src/app/(dashboard)/dashboard/providers/[id]/PassthroughModelsSection.tsx +183 -0
  1410. package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +1918 -0
  1411. package/src/app/(dashboard)/dashboard/providers/[id]/useOneByOneTest.ts +102 -0
  1412. package/src/app/(dashboard)/dashboard/providers/components/AddCompatibleModal.tsx +185 -0
  1413. package/src/app/(dashboard)/dashboard/providers/components/ConnectionsCard.tsx +476 -0
  1414. package/src/app/(dashboard)/dashboard/providers/components/ModelAvailabilityBadge.tsx +192 -0
  1415. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +344 -0
  1416. package/src/app/(dashboard)/dashboard/providers/new/page.tsx +275 -0
  1417. package/src/app/(dashboard)/dashboard/providers/page.tsx +614 -0
  1418. package/src/app/(dashboard)/dashboard/providers/utils.ts +19 -0
  1419. package/src/app/(dashboard)/dashboard/proxy-pools/page.tsx +1305 -0
  1420. package/src/app/(dashboard)/dashboard/pxpipe/PxpipeClient.tsx +404 -0
  1421. package/src/app/(dashboard)/dashboard/pxpipe/page.tsx +5 -0
  1422. package/src/app/(dashboard)/dashboard/quota/page.tsx +11 -0
  1423. package/src/app/(dashboard)/dashboard/token-saver/TokenSaverClient.tsx +1096 -0
  1424. package/src/app/(dashboard)/dashboard/token-saver/page.tsx +5 -0
  1425. package/src/app/(dashboard)/dashboard/usage/components/OverviewCards.tsx +53 -0
  1426. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/ProviderLimitCard.tsx +175 -0
  1427. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaProgressBar.tsx +131 -0
  1428. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/QuotaTable.tsx +314 -0
  1429. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/index.tsx +1507 -0
  1430. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +698 -0
  1431. package/src/app/(dashboard)/dashboard/usage/components/ProviderTopology.tsx +550 -0
  1432. package/src/app/(dashboard)/dashboard/usage/components/UsageChart.tsx +152 -0
  1433. package/src/app/(dashboard)/dashboard/usage/components/UsageTable.tsx +249 -0
  1434. package/src/app/(dashboard)/dashboard/usage/page.tsx +70 -0
  1435. package/src/app/(dashboard)/layout.tsx +5 -0
  1436. package/src/app/api/auth/login/route.js +146 -0
  1437. package/src/app/api/auth/logout/route.js +12 -0
  1438. package/src/app/api/auth/oidc/callback/route.js +100 -0
  1439. package/src/app/api/auth/oidc/start/route.js +59 -0
  1440. package/src/app/api/auth/oidc/test/route.js +86 -0
  1441. package/src/app/api/auth/reset-password/route.js +13 -0
  1442. package/src/app/api/auth/saml/acs/route.js +74 -0
  1443. package/src/app/api/auth/saml/metadata/route.js +28 -0
  1444. package/src/app/api/auth/saml/start/route.js +32 -0
  1445. package/src/app/api/auth/saml/test/route.js +84 -0
  1446. package/src/app/api/auth/status/route.js +72 -0
  1447. package/src/app/api/changelog/route.js +28 -0
  1448. package/src/app/api/cli-tools/all-statuses/route.js +32 -0
  1449. package/src/app/api/cli-tools/claude-settings/route.js +266 -0
  1450. package/src/app/api/cli-tools/codex-settings/profiles.js +109 -0
  1451. package/src/app/api/cli-tools/codex-settings/route.js +411 -0
  1452. package/src/app/api/cli-tools/cowork-mcp-registry/route.js +77 -0
  1453. package/src/app/api/cli-tools/cowork-mcp-tools/route.js +116 -0
  1454. package/src/app/api/cli-tools/cowork-settings/route.js +487 -0
  1455. package/src/app/api/cli-tools/dsh-settings/route.ts +254 -0
  1456. package/src/app/api/cli-tools/opencode-settings/route.js +334 -0
  1457. package/src/app/api/combos/[id]/route.js +84 -0
  1458. package/src/app/api/combos/route.js +51 -0
  1459. package/src/app/api/headroom/extras/route.js +54 -0
  1460. package/src/app/api/headroom/proxy/[...path]/route.js +104 -0
  1461. package/src/app/api/headroom/restart/route.js +43 -0
  1462. package/src/app/api/headroom/start/route.js +43 -0
  1463. package/src/app/api/headroom/status/route.js +18 -0
  1464. package/src/app/api/headroom/stop/route.js +14 -0
  1465. package/src/app/api/health/route.js +15 -0
  1466. package/src/app/api/init/route.js +4 -0
  1467. package/src/app/api/keys/[id]/route.js +58 -0
  1468. package/src/app/api/keys/route.js +45 -0
  1469. package/src/app/api/locale/route.js +24 -0
  1470. package/src/app/api/mcp/[plugin]/message/route.js +19 -0
  1471. package/src/app/api/mcp/[plugin]/sse/route.js +35 -0
  1472. package/src/app/api/media-providers/tts/deepgram/voices/route.js +76 -0
  1473. package/src/app/api/media-providers/tts/elevenlabs/voices/route.js +77 -0
  1474. package/src/app/api/media-providers/tts/inworld/voices/route.js +71 -0
  1475. package/src/app/api/media-providers/tts/minimax/voices/route.js +126 -0
  1476. package/src/app/api/media-providers/tts/voices/route.js +110 -0
  1477. package/src/app/api/models/alias/route.js +53 -0
  1478. package/src/app/api/models/availability/route.js +94 -0
  1479. package/src/app/api/models/catalog-sync/route.js +34 -0
  1480. package/src/app/api/models/custom/route.js +66 -0
  1481. package/src/app/api/models/disabled/route.js +50 -0
  1482. package/src/app/api/models/route.js +101 -0
  1483. package/src/app/api/models/test/ping.js +318 -0
  1484. package/src/app/api/models/test/route.js +14 -0
  1485. package/src/app/api/oauth/[provider]/[action]/route.js +604 -0
  1486. package/src/app/api/oauth/codex/bulk-import/route.js +115 -0
  1487. package/src/app/api/oauth/codex/import-token/route.js +93 -0
  1488. package/src/app/api/oauth/cursor/auto-import/route.js +238 -0
  1489. package/src/app/api/oauth/cursor/import/route.js +91 -0
  1490. package/src/app/api/oauth/gitlab/pat/route.js +65 -0
  1491. package/src/app/api/oauth/grok-cli/bulk-import/route.js +107 -0
  1492. package/src/app/api/oauth/iflow/cookie/route.js +139 -0
  1493. package/src/app/api/oauth/xiaomi-mimo/api-key/route.js +129 -0
  1494. package/src/app/api/oauth/xiaomi-mimo/auto-import/route.js +135 -0
  1495. package/src/app/api/pricing/route.js +121 -0
  1496. package/src/app/api/provider-nodes/[id]/route.js +113 -0
  1497. package/src/app/api/provider-nodes/route.js +112 -0
  1498. package/src/app/api/provider-nodes/validate/route.js +222 -0
  1499. package/src/app/api/providers/[id]/models/route.js +579 -0
  1500. package/src/app/api/providers/[id]/route.js +189 -0
  1501. package/src/app/api/providers/[id]/test/route.js +23 -0
  1502. package/src/app/api/providers/[id]/test/testUtils.js +1107 -0
  1503. package/src/app/api/providers/[id]/test-models/route.js +79 -0
  1504. package/src/app/api/providers/client/route.js +163 -0
  1505. package/src/app/api/providers/kilo/free-models/route.js +55 -0
  1506. package/src/app/api/providers/route.js +218 -0
  1507. package/src/app/api/providers/suggested-models/filters.js +42 -0
  1508. package/src/app/api/providers/suggested-models/route.js +32 -0
  1509. package/src/app/api/providers/test-batch/route.js +133 -0
  1510. package/src/app/api/providers/validate/route.js +700 -0
  1511. package/src/app/api/proxy-pools/[id]/route.js +152 -0
  1512. package/src/app/api/proxy-pools/[id]/test/route.js +72 -0
  1513. package/src/app/api/proxy-pools/cloudflare-deploy/route.js +167 -0
  1514. package/src/app/api/proxy-pools/deno-deploy/route.js +172 -0
  1515. package/src/app/api/proxy-pools/route.js +93 -0
  1516. package/src/app/api/proxy-pools/vercel-deploy/route.js +142 -0
  1517. package/src/app/api/pxpipe/health/route.js +16 -0
  1518. package/src/app/api/pxpipe/install/route.js +20 -0
  1519. package/src/app/api/pxpipe/logs/route.js +18 -0
  1520. package/src/app/api/pxpipe/restart/route.js +16 -0
  1521. package/src/app/api/pxpipe/start/route.js +29 -0
  1522. package/src/app/api/pxpipe/stats/route.js +14 -0
  1523. package/src/app/api/pxpipe/status/route.js +21 -0
  1524. package/src/app/api/pxpipe/stop/route.js +16 -0
  1525. package/src/app/api/settings/database/route.js +54 -0
  1526. package/src/app/api/settings/proxy-test/route.js +27 -0
  1527. package/src/app/api/settings/require-login/route.js +15 -0
  1528. package/src/app/api/settings/route.js +149 -0
  1529. package/src/app/api/shutdown/route.js +26 -0
  1530. package/src/app/api/tags/route.js +17 -0
  1531. package/src/app/api/translator/console-logs/route.js +24 -0
  1532. package/src/app/api/translator/console-logs/stream/route.js +98 -0
  1533. package/src/app/api/translator/load/route.js +48 -0
  1534. package/src/app/api/translator/save/route.js +47 -0
  1535. package/src/app/api/translator/send/route.js +105 -0
  1536. package/src/app/api/translator/translate/route.js +118 -0
  1537. package/src/app/api/tunnel/disable/route.js +17 -0
  1538. package/src/app/api/tunnel/enable/route.js +21 -0
  1539. package/src/app/api/tunnel/status/route.js +25 -0
  1540. package/src/app/api/tunnel/tailscale-check/route.js +77 -0
  1541. package/src/app/api/tunnel/tailscale-disable/route.js +17 -0
  1542. package/src/app/api/tunnel/tailscale-enable/route.js +17 -0
  1543. package/src/app/api/tunnel/tailscale-install/route.js +98 -0
  1544. package/src/app/api/usage/[connectionId]/codex-reset-credits/route.js +196 -0
  1545. package/src/app/api/usage/[connectionId]/route.js +192 -0
  1546. package/src/app/api/usage/chart/route.js +21 -0
  1547. package/src/app/api/usage/history/route.js +12 -0
  1548. package/src/app/api/usage/logs/route.js +12 -0
  1549. package/src/app/api/usage/providers/route.js +38 -0
  1550. package/src/app/api/usage/request-details/route.js +65 -0
  1551. package/src/app/api/usage/request-logs/route.js +13 -0
  1552. package/src/app/api/usage/stats/route.js +23 -0
  1553. package/src/app/api/usage/stream/route.js +93 -0
  1554. package/src/app/api/v1/api/chat/route.js +36 -0
  1555. package/src/app/api/v1/audio/speech/route.js +16 -0
  1556. package/src/app/api/v1/audio/transcriptions/route.js +19 -0
  1557. package/src/app/api/v1/audio/voices/route.js +78 -0
  1558. package/src/app/api/v1/chat/completions/route.js +34 -0
  1559. package/src/app/api/v1/embeddings/route.js +21 -0
  1560. package/src/app/api/v1/images/generations/route.js +16 -0
  1561. package/src/app/api/v1/messages/count_tokens/route.js +96 -0
  1562. package/src/app/api/v1/messages/route.js +35 -0
  1563. package/src/app/api/v1/models/[...model]/route.js +75 -0
  1564. package/src/app/api/v1/models/info/route.js +131 -0
  1565. package/src/app/api/v1/models/route.js +586 -0
  1566. package/src/app/api/v1/responses/compact/route.js +37 -0
  1567. package/src/app/api/v1/responses/route.js +30 -0
  1568. package/src/app/api/v1/route.js +1 -0
  1569. package/src/app/api/v1/search/route.js +21 -0
  1570. package/src/app/api/v1/systemone/route.js +21 -0
  1571. package/src/app/api/v1/videos/[id]/route.js +17 -0
  1572. package/src/app/api/v1/videos/edits/route.js +16 -0
  1573. package/src/app/api/v1/videos/extensions/route.js +16 -0
  1574. package/src/app/api/v1/videos/generations/route.js +16 -0
  1575. package/src/app/api/v1/web/fetch/route.js +21 -0
  1576. package/src/app/api/v1beta/models/[...path]/route.js +599 -0
  1577. package/src/app/api/v1beta/models/route.js +62 -0
  1578. package/src/app/api/version/route.js +15 -0
  1579. package/src/app/api/version/shutdown/route.js +38 -0
  1580. package/src/app/api/version/update/route.js +11 -0
  1581. package/src/app/callback/page.tsx +162 -0
  1582. package/src/app/dashboard/settings/pricing/page.tsx +192 -0
  1583. package/src/app/globals.css +356 -0
  1584. package/src/app/landing/components/AnimatedBackground.tsx +58 -0
  1585. package/src/app/landing/components/Features.tsx +137 -0
  1586. package/src/app/landing/components/FlowAnimation.tsx +168 -0
  1587. package/src/app/landing/components/Footer.tsx +110 -0
  1588. package/src/app/landing/components/GetStarted.tsx +105 -0
  1589. package/src/app/landing/components/HeroSection.tsx +48 -0
  1590. package/src/app/landing/components/HowItWorks.tsx +69 -0
  1591. package/src/app/landing/components/Navigation.tsx +120 -0
  1592. package/src/app/landing/page.tsx +131 -0
  1593. package/src/app/layout.tsx +60 -0
  1594. package/src/app/login/page.tsx +277 -0
  1595. package/src/app/manifest.ts +33 -0
  1596. package/src/app/page.tsx +5 -0
  1597. package/src/components/app-sidebar.tsx +140 -0
  1598. package/src/components/ui/alert.tsx +72 -0
  1599. package/src/components/ui/avatar.tsx +93 -0
  1600. package/src/components/ui/badge.tsx +44 -0
  1601. package/src/components/ui/breadcrumb.tsx +103 -0
  1602. package/src/components/ui/button.tsx +66 -0
  1603. package/src/components/ui/card.tsx +91 -0
  1604. package/src/components/ui/chart.tsx +338 -0
  1605. package/src/components/ui/checkbox.tsx +26 -0
  1606. package/src/components/ui/dialog.tsx +152 -0
  1607. package/src/components/ui/dropdown-menu.tsx +249 -0
  1608. package/src/components/ui/input.tsx +18 -0
  1609. package/src/components/ui/label.tsx +18 -0
  1610. package/src/components/ui/pagination.tsx +112 -0
  1611. package/src/components/ui/select.tsx +184 -0
  1612. package/src/components/ui/separator.tsx +25 -0
  1613. package/src/components/ui/sheet.tsx +128 -0
  1614. package/src/components/ui/sidebar.tsx +671 -0
  1615. package/src/components/ui/skeleton.tsx +13 -0
  1616. package/src/components/ui/switch.tsx +32 -0
  1617. package/src/components/ui/table.tsx +86 -0
  1618. package/src/components/ui/tabs.tsx +79 -0
  1619. package/src/components/ui/tooltip.tsx +50 -0
  1620. package/src/dashboardGuard.ts +298 -0
  1621. package/src/hooks/use-mobile.ts +19 -0
  1622. package/src/i18n/RuntimeI18nProvider.tsx +28 -0
  1623. package/src/i18n/config.ts +19 -0
  1624. package/src/i18n/runtime.ts +177 -0
  1625. package/src/instrumentation.ts +14 -0
  1626. package/src/lib/auth/dashboardSession.js +112 -0
  1627. package/src/lib/auth/loginLimiter.js +70 -0
  1628. package/src/lib/auth/oidc.js +242 -0
  1629. package/src/lib/auth/saml.js +273 -0
  1630. package/src/lib/auth/trustedPeer.js +7 -0
  1631. package/src/lib/consoleLogBuffer.js +114 -0
  1632. package/src/lib/dataDir.js +78 -0
  1633. package/src/lib/db/adapters/betterSqliteAdapter.js +83 -0
  1634. package/src/lib/db/adapters/bunSqliteAdapter.js +83 -0
  1635. package/src/lib/db/adapters/nodeSqliteAdapter.js +111 -0
  1636. package/src/lib/db/adapters/sqljsAdapter.js +128 -0
  1637. package/src/lib/db/backup.js +88 -0
  1638. package/src/lib/db/driver.js +94 -0
  1639. package/src/lib/db/helpers/jsonCol.js +13 -0
  1640. package/src/lib/db/helpers/kvStore.js +45 -0
  1641. package/src/lib/db/helpers/metaStore.js +28 -0
  1642. package/src/lib/db/index.js +312 -0
  1643. package/src/lib/db/migrate.js +427 -0
  1644. package/src/lib/db/migrations/001-initial.js +14 -0
  1645. package/src/lib/db/migrations/index.js +10 -0
  1646. package/src/lib/db/paths.js +18 -0
  1647. package/src/lib/db/repos/aliasRepo.js +63 -0
  1648. package/src/lib/db/repos/apiKeysRepo.js +78 -0
  1649. package/src/lib/db/repos/combosRepo.js +83 -0
  1650. package/src/lib/db/repos/connectionsRepo.js +347 -0
  1651. package/src/lib/db/repos/disabledModelsRepo.js +56 -0
  1652. package/src/lib/db/repos/nodesRepo.js +98 -0
  1653. package/src/lib/db/repos/pricingRepo.js +108 -0
  1654. package/src/lib/db/repos/proxyPoolsRepo.js +109 -0
  1655. package/src/lib/db/repos/requestDetailsRepo.js +287 -0
  1656. package/src/lib/db/repos/settingsRepo.js +123 -0
  1657. package/src/lib/db/repos/usageRepo.js +1043 -0
  1658. package/src/lib/db/schema.js +161 -0
  1659. package/src/lib/db/version.js +21 -0
  1660. package/src/lib/grokBuildConfig.js +228 -0
  1661. package/src/lib/headroom/detect.js +212 -0
  1662. package/src/lib/headroom/process.js +307 -0
  1663. package/src/lib/isContainer.js +62 -0
  1664. package/src/lib/localDb.js +51 -0
  1665. package/src/lib/logLine.js +204 -0
  1666. package/src/lib/mcp/stdioSseBridge.js +223 -0
  1667. package/src/lib/modelCatalog/sync.js +292 -0
  1668. package/src/lib/network/connectionProxy.js +172 -0
  1669. package/src/lib/network/initOutboundProxy.js +25 -0
  1670. package/src/lib/network/outboundProxy.js +87 -0
  1671. package/src/lib/network/proxyTest.js +88 -0
  1672. package/src/lib/network/resolveOutboundProxy.js +45 -0
  1673. package/src/lib/oauth/constants/oauth.js +213 -0
  1674. package/src/lib/oauth/constants/xai.js +62 -0
  1675. package/src/lib/oauth/providerHelpers.js +74 -0
  1676. package/src/lib/oauth/providers/_shared.js +17 -0
  1677. package/src/lib/oauth/providers/antigravity.js +119 -0
  1678. package/src/lib/oauth/providers/claude.js +60 -0
  1679. package/src/lib/oauth/providers/codebuddy-cn.js +80 -0
  1680. package/src/lib/oauth/providers/codebuddy-intl.js +75 -0
  1681. package/src/lib/oauth/providers/codex.js +69 -0
  1682. package/src/lib/oauth/providers/cursor.js +19 -0
  1683. package/src/lib/oauth/providers/github.js +98 -0
  1684. package/src/lib/oauth/providers/gitlab.js +64 -0
  1685. package/src/lib/oauth/providers/grok-cli.js +123 -0
  1686. package/src/lib/oauth/providers/iflow.js +89 -0
  1687. package/src/lib/oauth/providers/index.js +243 -0
  1688. package/src/lib/oauth/providers/kilocode.js +75 -0
  1689. package/src/lib/oauth/providers/kimchi.js +76 -0
  1690. package/src/lib/oauth/providers/qoder.js +111 -0
  1691. package/src/lib/oauth/providers/trae.js +337 -0
  1692. package/src/lib/oauth/providers/windsurf.js +172 -0
  1693. package/src/lib/oauth/providers/xai.js +101 -0
  1694. package/src/lib/oauth/providers/xiaomi-mimo.js +120 -0
  1695. package/src/lib/oauth/providers/zed.js +68 -0
  1696. package/src/lib/oauth/providers.js +1 -0
  1697. package/src/lib/oauth/services/antigravity.js +322 -0
  1698. package/src/lib/oauth/services/claude.js +135 -0
  1699. package/src/lib/oauth/services/codex.js +149 -0
  1700. package/src/lib/oauth/services/cursor.js +179 -0
  1701. package/src/lib/oauth/services/github.js +227 -0
  1702. package/src/lib/oauth/services/iflow.js +201 -0
  1703. package/src/lib/oauth/services/index.js +13 -0
  1704. package/src/lib/oauth/services/kimchi.js +139 -0
  1705. package/src/lib/oauth/services/oauth.js +161 -0
  1706. package/src/lib/oauth/services/openai.js +122 -0
  1707. package/src/lib/oauth/services/qoder.js +237 -0
  1708. package/src/lib/oauth/services/xai.js +241 -0
  1709. package/src/lib/oauth/utils/banner.js +62 -0
  1710. package/src/lib/oauth/utils/ideDetect.js +64 -0
  1711. package/src/lib/oauth/utils/pkce.js +39 -0
  1712. package/src/lib/oauth/utils/server.js +1056 -0
  1713. package/src/lib/oauth/utils/ui.js +47 -0
  1714. package/src/lib/providerNormalization.js +49 -0
  1715. package/src/lib/pxpipe/events.js +146 -0
  1716. package/src/lib/pxpipe/install.js +143 -0
  1717. package/src/lib/pxpipe/loader.js +76 -0
  1718. package/src/lib/pxpipe/service.js +69 -0
  1719. package/src/lib/qoder/constants.js +2 -0
  1720. package/src/lib/qoder/cosy.js +2 -0
  1721. package/src/lib/qoder/encoding.js +2 -0
  1722. package/src/lib/tunnel/cloudflare/cloudflared.js +513 -0
  1723. package/src/lib/tunnel/cloudflare/config.js +9 -0
  1724. package/src/lib/tunnel/cloudflare/healthCheck.js +33 -0
  1725. package/src/lib/tunnel/cloudflare/manager.js +174 -0
  1726. package/src/lib/tunnel/cloudflare/pid.js +31 -0
  1727. package/src/lib/tunnel/index.js +53 -0
  1728. package/src/lib/tunnel/shared/dnsResolver.js +20 -0
  1729. package/src/lib/tunnel/shared/internetCheck.js +33 -0
  1730. package/src/lib/tunnel/shared/state.js +45 -0
  1731. package/src/lib/tunnel/shared/watchdogConfig.js +9 -0
  1732. package/src/lib/tunnel/sudoExec.js +49 -0
  1733. package/src/lib/tunnel/sudoPassword.js +90 -0
  1734. package/src/lib/tunnel/tailscale/config.js +7 -0
  1735. package/src/lib/tunnel/tailscale/healthCheck.js +33 -0
  1736. package/src/lib/tunnel/tailscale/manager.js +151 -0
  1737. package/src/lib/tunnel/tailscale/tailscale.js +1013 -0
  1738. package/src/lib/usageDb.js +15 -0
  1739. package/src/lib/versionCheck.js +67 -0
  1740. package/src/models/index.ts +38 -0
  1741. package/src/proxy.ts +10 -0
  1742. package/src/shared/components/AddCustomEmbeddingModal.tsx +220 -0
  1743. package/src/shared/components/CapacityBadges.tsx +47 -0
  1744. package/src/shared/components/ChangelogModal.tsx +82 -0
  1745. package/src/shared/components/ComboFormModal.tsx +321 -0
  1746. package/src/shared/components/CursorAuthModal.tsx +213 -0
  1747. package/src/shared/components/EditConnectionModal.tsx +369 -0
  1748. package/src/shared/components/EntityCard.tsx +106 -0
  1749. package/src/shared/components/EntityCardSkeleton.tsx +69 -0
  1750. package/src/shared/components/Footer.tsx +133 -0
  1751. package/src/shared/components/GitLabAuthModal.tsx +294 -0
  1752. package/src/shared/components/Header.tsx +370 -0
  1753. package/src/shared/components/HeaderLanguage.tsx +53 -0
  1754. package/src/shared/components/HeaderMenu.tsx +75 -0
  1755. package/src/shared/components/IFlowCookieModal.tsx +140 -0
  1756. package/src/shared/components/Icon.tsx +237 -0
  1757. package/src/shared/components/LanguageSwitcher.tsx +139 -0
  1758. package/src/shared/components/Loading.tsx +102 -0
  1759. package/src/shared/components/ManualConfigModal.tsx +55 -0
  1760. package/src/shared/components/McpMarketplaceModal.tsx +320 -0
  1761. package/src/shared/components/Modal.tsx +130 -0
  1762. package/src/shared/components/ModelSelectModal.tsx +755 -0
  1763. package/src/shared/components/NineRemoteButton.tsx +28 -0
  1764. package/src/shared/components/NineRemotePromoModal.tsx +91 -0
  1765. package/src/shared/components/NoAuthProxyCard.tsx +178 -0
  1766. package/src/shared/components/OAuthModal.tsx +1055 -0
  1767. package/src/shared/components/PricingModal.tsx +202 -0
  1768. package/src/shared/components/ProviderIcon.tsx +80 -0
  1769. package/src/shared/components/ProviderInfoCard.tsx +98 -0
  1770. package/src/shared/components/RequestLogger.tsx +149 -0
  1771. package/src/shared/components/SegmentedControl.tsx +45 -0
  1772. package/src/shared/components/ShutdownModal.tsx +65 -0
  1773. package/src/shared/components/ThemeProvider.tsx +15 -0
  1774. package/src/shared/components/ThemeToggle.tsx +52 -0
  1775. package/src/shared/components/UpdateDialog.tsx +248 -0
  1776. package/src/shared/components/UsageStats.tsx +714 -0
  1777. package/src/shared/components/VersionLabel.tsx +122 -0
  1778. package/src/shared/components/XiaomiMimoAuthModal.tsx +277 -0
  1779. package/src/shared/components/index.ts +32 -0
  1780. package/src/shared/components/layouts/AuthLayout.tsx +22 -0
  1781. package/src/shared/components/layouts/DashboardLayout.tsx +105 -0
  1782. package/src/shared/components/layouts/Page.tsx +158 -0
  1783. package/src/shared/components/layouts/index.ts +4 -0
  1784. package/src/shared/constants/cliTools.js +123 -0
  1785. package/src/shared/constants/colors.ts +92 -0
  1786. package/src/shared/constants/config.ts +100 -0
  1787. package/src/shared/constants/coworkPlugins.ts +113 -0
  1788. package/src/shared/constants/index.ts +3 -0
  1789. package/src/shared/constants/locales.ts +5 -0
  1790. package/src/shared/constants/models.ts +65 -0
  1791. package/src/shared/constants/providers.js +236 -0
  1792. package/src/shared/constants/providersDisplay.ts +15 -0
  1793. package/src/shared/constants/ttsProviders.ts +166 -0
  1794. package/src/shared/hooks/index.js +3 -0
  1795. package/src/shared/hooks/useCopyToClipboard.js +45 -0
  1796. package/src/shared/hooks/useModelCaps.js +91 -0
  1797. package/src/shared/hooks/useShutdown.ts +68 -0
  1798. package/src/shared/hooks/useTheme.js +59 -0
  1799. package/src/shared/services/bootstrap.ts +13 -0
  1800. package/src/shared/services/initializeApp.ts +323 -0
  1801. package/src/shared/services/quotaAutoPing.ts +400 -0
  1802. package/src/shared/utils/api.ts +100 -0
  1803. package/src/shared/utils/apiKey.ts +92 -0
  1804. package/src/shared/utils/bulkAdd.ts +87 -0
  1805. package/src/shared/utils/cn.ts +7 -0
  1806. package/src/shared/utils/connectionStatus.ts +14 -0
  1807. package/src/shared/utils/index.ts +40 -0
  1808. package/src/shared/utils/machine.ts +6 -0
  1809. package/src/shared/utils/machineId.ts +70 -0
  1810. package/src/shared/utils/providerCustomModels.ts +80 -0
  1811. package/src/shared/utils/providerIcon.ts +248 -0
  1812. package/src/shared/utils/providerModelsFetcher.ts +33 -0
  1813. package/src/shared/utils/ssrfGuard.ts +223 -0
  1814. package/src/shared/utils/utils.js +1 -0
  1815. package/src/sse/handlers/chat.js +430 -0
  1816. package/src/sse/handlers/embeddings.js +192 -0
  1817. package/src/sse/handlers/fetch.js +255 -0
  1818. package/src/sse/handlers/imageGeneration.js +175 -0
  1819. package/src/sse/handlers/search.js +260 -0
  1820. package/src/sse/handlers/stt.js +120 -0
  1821. package/src/sse/handlers/systemone.js +173 -0
  1822. package/src/sse/handlers/tts.js +157 -0
  1823. package/src/sse/handlers/videoGeneration.js +274 -0
  1824. package/src/sse/services/antigravityQuota.ts +220 -0
  1825. package/src/sse/services/auth.ts +485 -0
  1826. package/src/sse/services/backgroundTokenRefresh.ts +190 -0
  1827. package/src/sse/services/model.ts +102 -0
  1828. package/src/sse/services/tokenRefresh.ts +328 -0
  1829. package/src/sse/services/zedQuota.ts +233 -0
  1830. package/src/sse/utils/logger.ts +140 -0
  1831. package/src/store/headerSearchStore.ts +27 -0
  1832. package/src/store/index.ts +5 -0
  1833. package/src/store/notificationStore.ts +75 -0
  1834. package/src/store/providerStore.ts +75 -0
  1835. package/src/store/settingsStore.ts +63 -0
  1836. package/src/store/themeStore.ts +48 -0
  1837. package/src/store/userStore.ts +35 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4465],{11461:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},14748:(e,t,r)=>{"use strict";function a(){for(var e,t,r=0,a="",i=arguments.length;r<i;r++)(e=arguments[r])&&(t=function e(t){var r,a,i="";if("string"==typeof t||"number"==typeof t)i+=t;else if("object"==typeof t)if(Array.isArray(t)){var n=t.length;for(r=0;r<n;r++)t[r]&&(a=e(t[r]))&&(i&&(i+=" "),i+=a)}else for(a in t)t[a]&&(i&&(i+=" "),i+=a);return i}(e))&&(a&&(a+=" "),a+=t);return a}r.d(t,{$:()=>a})},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>l});var a=r(29798);r(15814);var i=r(54366),n=r(5471),s=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?s.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(o({variant:t,size:r,className:e})),...d})}},23928:(e,t,r)=>{"use strict";r.d(t,{default:()=>b});var a=r(29798),i=r(58913),n=r(15814),s=r(53784),o=r(18055),l=r(80159),d=r(13794);let c="basic-chat.sessions",u="basic-chat.activeSessionId",m="basic-chat.activeProviderId",p="basic-chat.draft";function h(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`chat_${Date.now()}_${Math.random().toString(16).slice(2)}`}function f(e){if("string"==typeof e)return e;if(null==e)return"";if(Array.isArray(e))return e.map(f).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 x(e=""){let t=f(e).replace(/\s+/g," ").trim();return t?t.length>52?`${t.slice(0,52).trimEnd()}…`:t:"New chat"}async function g(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 v(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 b(){let[e,t]=(0,n.useState)([]),[r,b]=(0,n.useState)(!0),[w,y]=(0,n.useState)(""),[N,j]=(0,n.useState)(()=>{try{let e=function(e,t){try{return JSON.parse(e)}catch{return t}}(globalThis.localStorage.getItem(c),[]);return Array.isArray(e)?e.map(e=>({...e,messages:Array.isArray(e.messages)?e.messages:[]})):[]}catch{return[]}}),[_,k]=(0,n.useState)(()=>globalThis.localStorage.getItem(u)||""),[S,C]=(0,n.useState)(()=>globalThis.localStorage.getItem(m)||""),[A,I]=(0,n.useState)(""),[O,M]=(0,n.useState)(()=>globalThis.localStorage.getItem(p)||""),[D,E]=(0,n.useState)([]),[L,U]=(0,n.useState)(!1),[$,T]=(0,n.useState)(""),[z,R]=(0,n.useState)(""),[P,B]=(0,n.useState)(!1),[q,F]=(0,n.useState)(!1),[V,W]=(0,n.useState)(!1),X=(0,n.useRef)(null),H=(0,n.useRef)(null),J=(0,n.useRef)(!1),K=(0,n.useRef)(null),G=(0,n.useRef)(null);(0,n.useEffect)(()=>{B(!0)},[]),(0,n.useEffect)(()=>{let e=!1;return async function(){b(!0),y("");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([]),y("No providers connected yet."));return}let n=new Map;for(let e of i){let t=e.provider||e.id,r=v(e),a=(0,d.mq)(t)?"openai-compatible":(0,d.gb)(t)?"anthropic-compatible":t;n.has(t)||n.set(t,{providerId:t,providerName:r,providerType:a,connections:[],models:[]});let i=n.get(t);i.providerName=i.providerName||r,i.providerType=i.providerType||a,i.connections.push(e);let s=(0,l.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:v(e),source:"static"}:null).filter(Boolean);i.models.push(...s)}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,d.mq)(t.provider)||(0,d.gb)(t.provider))&&!r.includes("/")&&(i=`${t.provider}/${r}`),{id:i,requestModel:i,name:a,providerId:t.provider,providerName:v(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=n.get(t);r&&r.models.push(...e.models)}let s=Array.from(n.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(s),0===s.length&&y("Providers connected but no models available."))}catch(r){e||(y(f(r?.message)||"Failed to load providers/models."),t([]))}finally{e||b(!1)}}(),()=>{e=!0}},[]),(0,n.useEffect)(()=>{let e=e=>{K.current&&!K.current.contains(e.target)&&F(!1),G.current&&!G.current.contains(e.target)&&W(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let Z=(0,n.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]),Q=(0,n.useMemo)(()=>e.find(e=>e.providerId===S)||e[0]||null,[e,S]),Y=(0,n.useMemo)(()=>{if(A&&Z.has(A))return Z.get(A);if(_){let e=N.find(e=>e.id===_);if(e?.modelId&&Z.has(e.modelId))return Z.get(e.modelId)}return Q?.models?.[0]||null},[A,Z,Q,N,_]),ee=(0,n.useMemo)(()=>N.find(e=>e.id===_)||null,[N,_]),et=ee?.messages||[],er=(0,n.useMemo)(()=>[...N].sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),[N]),ea=!L&&!!Y&&(O.trim().length>0||D.length>0);(0,n.useEffect)(()=>{if(P)try{globalThis.localStorage.setItem(c,JSON.stringify(N)),globalThis.localStorage.setItem(u,_),globalThis.localStorage.setItem(m,S),globalThis.localStorage.setItem(p,O)}catch{}},[P,N,_,S,O]),(0,n.useEffect)(()=>{if(!P||r||J.current||0===e.length)return;let t=e.find(e=>e.providerId===S)||e[0],a=A&&Z.has(A)?Z.get(A):t.models[0];if(N.length>0){let e=N.find(e=>e.id===_)||N[0],r=e?.modelId&&Z.has(e.modelId)?Z.get(e.modelId):a;J.current=!0,k(e.id),C(r?.providerId||t.providerId),I(r?.id||a.id);return}let i={id:h(),title:"New chat",providerId:t.providerId,providerName:t.providerName,modelId:a.id,modelName:a.name,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),messages:[]};J.current=!0,j([i]),k(i.id),C(t.providerId),I(a.id)},[P,r,e,Z,N,_,S,A]);let ei=(e,t)=>{j(r=>r.map(r=>r.id===e?t({...r,messages:Array.isArray(r.messages)?r.messages.map(e=>({...e})):[]}):r))},en=e=>e?{id:h(),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,es=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:h(),name:e.name,type:e.type,size:e.size,dataUrl:await g(e)})));E(e=>[...e,...a]),e.target.value=""},eo=async()=>{let e=Y||Q?.models?.[0]||null;if(!e)return;let t=O.trim();if(!t&&0===D.length)return;let r=_,a=N.find(e=>e.id===r);if(!a){if(!(a=en(e)))return;r=a.id,j(e=>[a,...e]),k(r)}let i={id:h(),role:"user",content:t,attachments:D.map(e=>({id:e.id,name:e.name,type:e.type,dataUrl:e.dataUrl})),createdAt:new Date().toISOString()},n=h(),s={id:n,role:"assistant",content:"",createdAt:new Date().toISOString(),status:"streaming"},o=[...a.messages||[],i,s];j(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?x(t):a.title}:a)),M(""),E([]),U(!0),T(n),R(""),H.current?.abort(),H.current=new AbortController;let l=o.filter(e=>"assistant"!==e.role||e.id!==n).map(e=>({role:e.role,content:"user"===e.role?function(e){let t=f(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:H.current.signal});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(f(e.error||e.message||`Request failed (${i.status})`))}let s=i.body?.getReader();if(!s){let e=await i.json().catch(()=>({})),t=f(e?.choices?.[0]?.message?.content||e?.output_text||e?.error||e?.message||"");ei(r,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,content:t,status:"done"}:e),updatedAt:new Date().toISOString()}));return}let o=new TextDecoder,c="",u="";for(;;){let{value:e,done:t}=await s.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=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(f).filter(Boolean)[0]||""}(e);if(!t)continue;u+=t,R(u),ei(r,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,content:u,status:"streaming"}:e),updatedAt:new Date().toISOString()}))}catch{}}}ei(r,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,content:u||e.content,status:"done"}:e),updatedAt:new Date().toISOString()})),d=r,a=x(t),ei(d,e=>({...e,title:"New chat"===e.title?a:e.title,updatedAt:new Date().toISOString()}))}catch(e){if("AbortError"!==e.name){let t=f(e?.message||e);ei(r,e=>({...e,messages:e.messages.map(e=>e.id===n?{...e,content:e.content||`Error: ${t}`,status:"error"}:e),updatedAt:new Date().toISOString()})),y(t||"Failed to send message.")}}finally{U(!1),T(""),R(""),H.current=null}},el=Y?`${Y.name}`:"Select model",ed=Y?Y.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:K,className:"relative",children:[(0,a.jsx)("button",{type:"button",onClick:()=>F(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:el}),(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:ed})]})}),q?(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)(s.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=Z.get(e);if(!t)return;let r=N.find(e=>e.id===_);if(r&&r.messages.length>0){let e=en(t);if(!e)return;j(t=>[e,...t]),k(e.id)}else if(r)j(e=>e.map(e=>e.id===r.id?{...e,providerId:t.providerId,providerName:t.providerName,modelId:t.id,modelName:t.name}:e)),k(r.id);else{let e=en(t);if(!e)return;j(t=>[e,...t]),k(e.id)}C(t.providerId),I(t.id),F(!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:()=>W(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)(o.$,{variant:"ghost",size:"sm",onClick:()=>{if(!_)return;let e=N.filter(e=>e.id!==_),t=e[0]||null;j(e),t?(k(t.id),C(t.providerId),I(t.modelId)):(k(""),C(""),I(""))},disabled:!_||0===N.length,children:[(0,a.jsx)(i.default,{name:"delete"}),"Clear"]})]})]}),V?(0,a.jsxs)("div",{ref:G,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===er.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."}):er.map(e=>{let t=e.id===_,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=N.find(e=>e.id===t))&&(k(t),C(r.providerId||S),I(r.modelId||A),W(!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:f(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,w?(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:w})]})}):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===et.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:et.map(e=>{let t="user"===e.role,r="assistant"===e.role,i=r&&e.id===$&&"streaming"===e.status,n=f(e.content)||(r?z:"");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":Y?.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:"whitespace-pre-wrap break-words text-[15px] leading-7",children:[n,r&&i&&!z?(0,a.jsx)("span",{className:"inline-block animate-pulse",children:"▋"}):null]})]})},e.id)})})]}),(0,a.jsxs)("div",{className:"shrink-0 pt-2",children:[D.length>0?(0,a.jsx)("div",{className:"mx-auto mb-3 flex w-full max-w-3xl flex-wrap gap-2 px-4",children:D.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 E(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:O,onChange:e=>M(e.target.value),onKeyDown:e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),ea&&eo())},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:()=>X.current?.click(),disabled:!Y||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:X,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:es}),(0,a.jsx)("span",{className:"text-xs font-medium text-white/30 truncate max-w-[120px]",children:Y?Y.name:"No model"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[L?(0,a.jsx)("button",{type:"button",onClick:()=>{H.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:eo,disabled:!ea,className:`h-8 w-8 rounded-full flex items-center justify-center transition ${ea?"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."})]})]})})}},35060:(e,t,r)=>{Promise.resolve().then(r.bind(r,23928))},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>l});var a=r(29798);r(15814);var i=r(54366),n=r(5471),s=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?s.bL:"span";return(0,a.jsx)(d,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(o({variant:t}),e),...i})}},54366:(e,t,r)=>{"use strict";r.d(t,{F:()=>s});var a=r(14748);let i=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,n=a.$,s=(e,t)=>r=>{var a;if((null==t?void 0:t.variants)==null)return n(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:s,defaultVariants:o}=t,l=Object.keys(s).map(e=>{let t=null==r?void 0:r[e],a=null==o?void 0:o[e];if(null===t)return null;let n=i(t)||i(a);return s[e][n]}),d=r&&Object.entries(r).reduce((e,t)=>{let[r,a]=t;return void 0===a||(e[r]=a),e},{});return n(e,l,null==t||null==(a=t.compoundVariants)?void 0:a.reduce((e,t)=>{let{class:r,className:a,...i}=t;return Object.entries(i).every(e=>{let[t,r]=e;return Array.isArray(r)?r.includes({...o,...d}[t]):({...o,...d})[t]===r})?[...e,r,a]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}},58913:(e,t,r)=>{"use strict";r.d(t,{default:()=>l});var a=r(29798);r(15814);var i=r(36256);let n={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 s(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[n[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?s(r.width)??s(r.height)??s(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})}}},e=>{e.O(0,[6766,5166,1471,159,427,9966,7358],()=>e(e.s=35060)),_N_E=e.O()}]);
@@ -0,0 +1,40 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3554],{2032:(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(4165);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
2
+ # Default model/provider stay on your ChatGPT account — only the provider
3
+ # definition below is added. Selected models are merged into
4
+ # model_catalog_json (~/.codex/10router-model-catalog.json) so they show in
5
+ # /model, and into profile files launched via: codex --profile <name>
6
+ model_catalog_json = "10router-model-catalog.json"
7
+
8
+ [model_providers.10router]
9
+ name = "10Router"
10
+ base_url = "${en()}"
11
+ wire_api = "responses"
12
+
13
+ [model_providers.10router.http_headers]
14
+ Authorization = "Bearer ${N}"
15
+ `}],(D.length>0?D:["provider/model-id"]).forEach(e=>{let s,t=(s=String(e??"").trim().replace(/[^A-Za-z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,""),`10router-${s||"model"}`);w.push({filename:`~/.codex/${t}.config.toml`,content:`# Launch with: codex --profile ${t}
16
+ model = "${e}"
17
+ model_provider = "10router"
18
+ model_catalog_json = "10router-model-catalog.json"
19
+ ${F?`
20
+ [agents]
21
+ default_subagent_model = "${F}"
22
+ `:""}`})}),w)})]})})}var Y=t(63729),J=t(63523);function V({toolId:e,tool:s,isExpanded:t,onToggle:n,baseUrl:o,apiKeys:d,activeProviders:c=[],cloudEnabled:m=!1,tunnelEnabled:x=!1}){let[p,g]=(0,a.useState)(null),[f,b]=(0,a.useState)(!1),[y,v]=(0,a.useState)(""),[N,w]=(0,a.useState)(()=>d?.length>0?d[0].key:""),k=e=>{let s=N&&N.trim()?N:m?"your-api-key":"sk_10router",t=o||"http://localhost:20128",l=t.endsWith("/v1")?t:`${t}/v1`;return e.replace(/\{\{baseUrl\}\}/g,l).replace(/\{\{apiKey\}\}/g,s).replace(/\{\{model\}\}/g,y||"provider/model-id")},{copy:C}=(0,J.C)(),_=async(e,s)=>{await C(k(e),`toolcard-${s}`),g(s),setTimeout(()=>g(null),2e3)},S=()=>(!s.requiresExternalUrl||!!m||!!x)&&(!s.requiresCloud||!!m);return(0,l.jsx)(u.Zp,{size:"sm",className:"overflow-hidden overflow-x-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:n,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:(()=>{if(s.image)return(0,l.jsx)(j.default,{src:s.image,alt:s.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"});if(s.icon)return(0,l.jsx)(r.default,{name:s.icon,className:"text-xl",style:{color:s.color}});let t=(0,Y.HY)(e);return t?(0,l.jsx)(j.default,{src:t,alt:s.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:s=>{(0,Y.Kw)(e),s.target.style.display="none"},loading:"lazy",decoding:"async"}):(0,l.jsx)("span",{className:"text-xs font-bold",style:{color:s.color},children:(e||"?").slice(0,2).toUpperCase()})})()}),(0,l.jsxs)("div",{className:"min-w-0",children:[(0,l.jsx)("h3",{className:"font-medium text-sm",children:s.name}),(0,l.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:s.description})]})]})}),t&&(0,l.jsx)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:s.guideSteps?(0,l.jsxs)("div",{className:"flex flex-col gap-4",children:[s.notes&&0!==s.notes.length?(0,l.jsx)("div",{className:"flex flex-col gap-2 mb-4",children:s.notes.map((e,s)=>{if("cloudCheck"===e.type&&(m||x))return null;let t="warning"===e.type,a="cloudCheck"===e.type&&!m&&!x,n="bg-blue-500/10 border-blue-500/30",o="text-blue-600 dark:text-blue-400",i="text-blue-500",d="info";return t?(n="bg-yellow-500/10 border-yellow-500/30",o="text-yellow-600 dark:text-yellow-400",i="text-yellow-500",d="warning"):a&&(n="bg-red-500/10 border-red-500/30",o="text-red-600 dark:text-red-400",i="text-red-500",d="error"),(0,l.jsxs)("div",{className:`flex items-start gap-3 p-3 rounded-lg border ${n}`,children:[(0,l.jsx)(r.default,{name:d,className:`text-lg ${i}`}),(0,l.jsx)("p",{className:`text-sm ${o}`,children:e.text})]},s)})}):null,S()&&s.guideSteps.map(e=>(0,l.jsxs)("div",{className:"flex items-start gap-4",children:[(0,l.jsx)("div",{className:"size-8 rounded-full flex items-center justify-center shrink-0 text-sm font-semibold text-white",style:{backgroundColor:s.color},children:e.step}),(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("p",{className:"font-medium text-foreground",children:e.title}),e.desc&&(0,l.jsx)("p",{className:"text-sm text-muted-foreground mt-0.5",children:e.desc}),"apiKeySelector"===e.type&&(0,l.jsx)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:(0,l.jsx)(K,{value:N,onChange:w,apiKeys:d,cloudEnabled:m,className:"flex-1"})}),"modelSelector"===e.type&&(0,l.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,l.jsx)("input",{type:"text",value:y,onChange:e=>v(e.target.value),placeholder:"provider/model-id",className:"w-full sm:w-auto flex-1 px-3 py-2 bg-muted rounded-lg text-sm border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,l.jsx)("button",{onClick:()=>b(!0),className:"shrink-0 px-3 py-2 rounded-lg border text-sm transition-colors bg-muted border-border text-foreground hover:border-primary cursor-pointer",children:"Select Model"}),y&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{onClick:()=>_(y,"model"),className:"shrink-0 px-3 py-2 bg-muted hover:bg-muted rounded-lg border border-border transition-colors",children:(0,l.jsx)(r.default,{name:"model"===p?"check":"content_copy",className:"text-lg"})}),(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>v(""),className:"p-2 text-muted-foreground hover:text-red-500 rounded transition-colors",children:(0,l.jsx)(r.default,{name:"close",className:"text-lg"})})}),(0,l.jsx)(h.ZI,{children:"Clear"})]})]})]}),e.value&&(0,l.jsxs)("div",{className:"mt-2 flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,l.jsx)("code",{className:"w-full sm:w-auto flex-1 px-3 py-2 bg-muted rounded-lg text-sm font-mono border border-border truncate",children:k(e.value)}),e.copyable&&(0,l.jsx)("button",{onClick:()=>_(e.value,`${e.step}-${e.title}`),className:"shrink-0 px-3 py-2 bg-muted hover:bg-muted rounded-lg border border-border transition-colors",children:(0,l.jsx)(r.default,{name:p===`${e.step}-${e.title}`?"check":"content_copy",className:"text-lg"})})]})]})]},e.step)),S()&&s.codeBlock&&(0,l.jsxs)("div",{className:"mt-2",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,l.jsx)("span",{className:"text-xs text-muted-foreground uppercase tracking-wide",children:s.codeBlock.language}),(0,l.jsxs)("button",{onClick:()=>_(s.codeBlock.code,"codeblock"),className:"flex items-center gap-1 px-2 py-1 text-xs bg-muted hover:bg-muted rounded border border-border transition-colors",children:[(0,l.jsx)(r.default,{name:"codeblock"===p?"check":"content_copy",className:"text-sm"}),"codeblock"===p?"Copied!":"Copy"]})]}),(0,l.jsx)("pre",{className:"p-4 bg-muted rounded-lg border border-border overflow-x-auto",children:(0,l.jsx)("code",{className:"text-sm font-mono whitespace-pre",children:k(s.codeBlock.code)})})]})]}):(0,l.jsx)("p",{className:"text-muted-foreground text-sm",children:"Coming soon..."})}),f&&(0,l.jsx)(i.rq,{isOpen:f,onClose:()=>b(!1),onSelect:e=>{v(e.value)},selectedModel:y,activeProviders:c,title:"Select Model"})]})})}function G({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,[_,S]=(0,a.useState)(x||null),[E,A]=(0,a.useState)(!1),[$,M]=(0,a.useState)(!1),[O,P]=(0,a.useState)(!1),[R,z]=(0,a.useState)(null),[T,L]=(0,a.useState)(!1),[D,H]=(0,a.useState)(""),[F,q]=(0,a.useState)(""),[B,Z]=(0,a.useState)(""),[Y,J]=(0,a.useState)(!1),[V,X]=(0,a.useState)(!1),[Q,ee]=(0,a.useState)({}),[es,et]=(0,a.useState)(!1),[el,er]=(0,a.useState)(""),[ea,en]=(0,a.useState)([]),[eo,ei]=(0,a.useState)(""),ed=(0,a.useRef)([]);(0,a.useEffect)(()=>{ed.current=ea},[ea]),(0,a.useEffect)(()=>{o?.length>0&&!D&&H(o[0].key)},[o,D]),(0,a.useEffect)(()=>{x&&S(x)},[x]),(0,a.useEffect)(()=>{s&&(_||eh(),ec())},[s]),(0,a.useEffect)(()=>{_?.opencode?.models&&en(_.opencode.models),_?.opencode?.activeModel&&ei(_.opencode.activeModel),_?.config?.agent?.explorer?.model?.startsWith("10router/")&&Z(_.config.agent.explorer.model.replace("10router/",""))},[_]);let ec=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&ee(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}},em=async e=>{try{let s=D&&D.trim()||m?D:"sk_10router",t=e.includes(eo)?eo:e[0]||"";await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:ep(),apiKey:s,models:e,activeModel:t,subagentModel:B})})}catch(e){console.log("Error saving models:",e)}},ex=_?.config?.provider?.["10router"]?.options?.baseURL||"",eu=_?.installed?_.config&&_.has10Router?W(_.config?.provider?.["10router"]?.options?.baseURL||"",{tunnelPublicUrl:f,tailscaleUrl:y})?"configured":"other":"not_configured":null,ep=()=>{let e=el||n;return e.endsWith("/v1")?e:`${e}/v1`},eh=async()=>{A(!0);try{let e=await fetch("/api/cli-tools/opencode-settings"),s=await e.json();S(s)}catch(e){S({installed:!1,error:e.message})}finally{A(!1)}},eg=async()=>{M(!0),z(null);try{let e=D&&D.trim()||m?D:"sk_10router",s=await fetch("/api/cli-tools/opencode-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:ep(),apiKey:e,models:ea,activeModel:""===eo?"":eo||ea[0],subagentModel:B})}),t=await s.json();s.ok?(U(ep(),{tunnelPublicUrl:f,tailscaleUrl:y}),z({type:"success",text:"Settings applied successfully!"}),eh()):z({type:"error",text:t.error||"Failed to apply settings"})}catch(e){z({type:"error",text:e.message})}finally{M(!1)}},ef=async()=>{P(!0),z(null);try{let e=await fetch("/api/cli-tools/opencode-settings",{method:"DELETE"}),s=await e.json();e.ok?(z({type:"success",text:"Settings reset successfully!"}),q(""),Z(""),en([]),ei(""),eh()):z({type:"error",text:s.error||"Failed to reset settings"})}catch(e){z({type:"error",text:e.message})}finally{P(!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/opencode.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"===eu&&(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"===eu&&(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"===eu&&(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:[E&&(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 OpenCode CLI..."})]}),!E&&_&&!_.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:_.container?"10Router runs in a container":"OpenCode CLI not detected locally"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:_.container?"The CLI lives on your host, not inside the container. Copy the manual config below into your host's opencode.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:()=>et(!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:()=>L(!T),children:[(0,l.jsx)(r.default,{name:T?"expand_less":"help",className:"text-[18px] mr-1"}),T?"Hide":"How to Install"]})]})]}),T&&(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:"}),(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 opencode-ai"})]}),(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:"opencode"})," to verify."]})]})]})]}),!E&&_?.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:el||el||`${n}/v1`,onChange:er,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:p,tunnelPublicUrl:f,tailscaleEnabled:b,tailscaleUrl:y,currentUrl:ex})]}),_?.config?.provider?.["10router"]?.options?.baseURL&&(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:_.config.provider["10router"].options.baseURL})]}),(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:D,onChange:H,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===ea.length?(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models selected"}):ea.map(e=>(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsxs)("span",{onClick:async()=>{if(e===eo)try{(await fetch("/api/cli-tools/opencode-settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({clearActiveModel:!0})})).ok&&(ei(""),eh())}catch(e){console.log("Error clearing active model:",e)}else ei(e)},className:`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs cursor-pointer transition-colors ${e===eo?"bg-primary/10 text-primary border border-primary":"bg-black/5 dark:bg-white/5 text-muted-foreground border border-transparent hover:border-border"}`,children:[e===eo&&(0,l.jsx)(r.default,{name:"star",className:"text-[10px]"}),e,(0,l.jsx)("button",{onClick:async s=>{s.stopPropagation();try{if((await fetch(`/api/cli-tools/opencode-settings?model=${encodeURIComponent(e)}`,{method:"DELETE"})).ok){let s=ea.filter(s=>s!==e);en(s),eo===e&&ei(""),eh()}}catch(e){console.log("Error removing model:",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:e===eo?"Click to clear active model":"Click to set as active"})]},e))}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("button",{onClick:()=>J(!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.jsx)("span",{className:"text-xs text-muted-foreground",children:ea.length>0&&eo?(0,l.jsxs)(l.Fragment,{children:["Active: ",(0,l.jsx)("span",{className:"text-primary",children:eo})]}):ea.length>0?(0,l.jsx)("span",{className:"text-yellow-500",children:"Click a model to set/clear active"}):"Select models to add"})]})]})]}),(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:B,onChange:e=>Z(e.target.value),placeholder:ea[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"}),B&&(0,l.jsxs)(h.m_,{children:[(0,l.jsx)(h.k$,{asChild:!0,children:(0,l.jsx)("button",{onClick:()=>Z(""),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:()=>X(!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"})]})]}),R&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===R.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===R.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:R.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:eg,disabled:0===ea.length||$,children:[$&&(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:ef,disabled:!_.has10Router||O,children:[O&&(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:()=>et(!0),children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),Y&&(0,l.jsx)(i.rq,{isOpen:Y,onClose:()=>{J(!1),em(ed.current)},onSelect:e=>{!ea.includes(e.value)&&(en([...ea,e.value]),eo||ei(e.value))},onDeselect:e=>{let s=ea.filter(s=>s!==e.value);en(s),eo===e.value&&ei(s[0]||"")},selectedModel:null,activeProviders:c,modelAliases:Q,addedModelValues:ea,closeOnSelect:!1,title:"Add Model for OpenCode"}),V&&(0,l.jsx)(i.rq,{isOpen:V,onClose:()=>X(!1),onSelect:e=>{Z(e.value),X(!1)},selectedModel:B,activeProviders:c,modelAliases:Q,title:"Select Subagent Model for OpenCode"}),(0,l.jsx)(i.uR,{isOpen:es,onClose:()=>et(!1),title:"OpenCode - Manual Configuration",configs:(v=D&&D.trim()?D:m?"<API_KEY_FROM_DASHBOARD>":"sk_10router",N=ea.length>0?ea:["provider/model-id"],w=eo||ea[0]||N[0],k=B||w,C={},N.forEach(e=>{C[e]={name:e,modalities:{input:["text","image"],output:["text"]}}}),[{filename:"~/.config/opencode/opencode.json",content:JSON.stringify({provider:{"10router":{npm:"@ai-sdk/openai-compatible",options:{baseURL:ep(),apiKey:v},models:C}},model:`10router/${w}`,agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:`10router/${k}`}}},null,2)}])})]})})}var X=t(49787);let Q="/api/cli-tools/cowork-settings",ee=e=>(e||"").replace(/\/v1\/?$/,"");function es({tool:e,isExpanded:s,onToggle:t,baseUrl:n,apiKeys:o,activeProviders:c,hasActiveProviders:m,cloudEnabled:x,cloudUrl:p,tunnelEnabled:h,tunnelPublicUrl:b,tailscaleEnabled:v,tailscaleUrl:N,initialStatus:w}){let k,C,_,S,[E,A]=(0,a.useState)(w||null),[$,M]=(0,a.useState)(!1),[O,P]=(0,a.useState)(!1),[R,z]=(0,a.useState)(!1),[T,L]=(0,a.useState)(null),[D,W]=(0,a.useState)(""),[H,F]=(0,a.useState)([]),[q,B]=(0,a.useState)(!1),[Z,Y]=(0,a.useState)(""),[J,V]=(0,a.useState)([]),[G,et]=(0,a.useState)([]),[el,er]=(0,a.useState)([]),[ea,en]=(0,a.useState)({}),[eo,ei]=(0,a.useState)(!1),[ed,ec]=(0,a.useState)(!1),[em,ex]=(0,a.useState)(!1),[eu,ep]=(0,a.useState)(!1),[eh,eg]=(0,a.useState)({name:"",url:""});(0,a.useEffect)(()=>{o?.length>0&&!D&&W(o[0].key)},[o,D]),(0,a.useEffect)(()=>{w&&A(w)},[w]),(0,a.useEffect)(()=>{s&&!E&&ef()},[s]),(0,a.useEffect)(()=>{s&&fetch("/api/models/alias").then(e=>e.ok?e.json():null).then(e=>{e&&en(e.aliases||{})}).catch(()=>{})},[s]),(0,a.useEffect)(()=>{E?.cowork?.models?.length&&F(E.cowork.models),E?.cowork?.baseUrl&&!Z&&Y(ee(E.cowork.baseUrl)),Array.isArray(E?.cowork?.plugins)&&E.cowork.plugins.length>0?V(E.cowork.plugins):0===J.length&&Array.isArray(E?.defaultPlugins)&&V(E.defaultPlugins),Array.isArray(E?.cowork?.localPlugins)&&et(E.cowork.localPlugins),Array.isArray(E?.cowork?.customPlugins)&&E.cowork.customPlugins.length>0&&er(E.cowork.customPlugins)},[E]);let ef=async()=>{M(!0);try{let e=await fetch(Q),s=await e.json();A(s)}catch(e){A({installed:!1,error:e.message})}finally{M(!1)}},ej=()=>{let e;return(e=(Z||"").replace(/\/+$/,""))?/\/v1$/.test(e)?e:`${e}/v1`:""},eb=E?.cowork?.baseUrl||"",ey=E?.installed?E?.cowork?.baseUrl?E.has10Router?"configured":"other":"not_configured":null,ev=async()=>{L(null);let e=ej();if(0===H.length)return void L({type:"error",text:"Please select at least one model"});P(!0);try{let s=D?.trim()||(o?.length>0?o[0].key:null)||(x?null:"sk_10router"),t=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:e,apiKey:s,models:H,plugins:J,localPlugins:G,customPlugins:el})}),l=await t.json();t.ok?(U(ej(),{tunnelPublicUrl:b,tailscaleUrl:N}),L({type:"success",text:"Settings applied. Quit & reopen Claude Desktop to load."}),ef()):L({type:"error",text:l.error||"Failed to apply settings"})}catch(e){L({type:"error",text:e.message})}finally{P(!1)}},eN=async({name:e,models:s})=>{try{let t=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e,models:s})});if(!t.ok){let e=await t.json();L({type:"error",text:e.error||"Failed to create combo"});return}H.includes(e)||F([...H,e]),ei(!1),L({type:"success",text:`Combo "${e}" created and added.`})}catch(e){L({type:"error",text:e.message})}},ew=e=>{let s=e?.value||e?.name||e;F(e=>e.filter(e=>e!==s))},ek=async()=>{z(!0),L(null);try{let e=await fetch(Q,{method:"DELETE"}),s=await e.json();e.ok?(L({type:"success",text:"Settings reset successfully"}),F([]),V(E?.defaultPlugins||[]),et([]),er([]),ef()):L({type:"error",text:s.error||"Failed to reset"})}catch(e){L({type:"error",text:e.message})}finally{z(!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:e.image,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"===ey&&(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"===ey&&(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"===ey&&(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 Claude Cowork..."})]}),!$&&E&&!E.installed&&(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:E.container?"10Router runs in a container":"Claude Desktop (Cowork mode) not detected"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:E.container?"The app lives on your host, not inside the container. Copy the manual config below into the host app config.":"Open Claude Desktop → Help → Troubleshooting → Enable Developer mode → Configure third-party inference, then return here."})]})]}),(0,l.jsx)("div",{className:"pl-9",children:(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>B(!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"]})})]}),!$&&E?.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:ej(),onChange:e=>Y(ee(e)),tunnelEnabled:h,tunnelPublicUrl:b,tailscaleEnabled:v,tailscaleUrl:N,cloudEnabled:x,cloudUrl:p,currentUrl:eb})]}),E?.cowork?.baseUrl&&(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:E.cowork.baseUrl})]}),(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:D,onChange:W,apiKeys:o,cloudEnabled:x})]}),(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===H.length?(0,l.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models selected"}):H.map(e=>(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-muted-foreground border border-transparent hover:border-border",children:[e,(0,l.jsx)("button",{onClick:()=>ew(e),className:"ml-0.5 hover:text-red-500",children:(0,l.jsx)(r.default,{name:"close",className:"text-[12px]"})})]},e))}),(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,l.jsx)("button",{onClick:()=>ec(!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.jsx)("button",{onClick:()=>ei(!0),className:"shrink-0 cursor-pointer whitespace-nowrap rounded border border-primary/40 bg-primary/10 px-2 py-1 text-xs text-primary transition-colors hover:bg-primary/20",children:"+ Combo"})]})]})]}),(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:"MCP"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[J.filter(e=>"exa"!==e.name).map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1 bg-card rounded border border-border",children:[(0,l.jsx)("span",{className:"text-xs font-medium min-w-0 truncate flex-shrink-0",children:e.title||e.name}),e.oauth&&(0,l.jsx)("span",{className:"text-[8px] text-amber-600 shrink-0",children:"OAuth"}),(0,l.jsxs)("div",{className:"flex-1 flex flex-wrap gap-1 overflow-hidden",style:{maxHeight:"1.5rem"},children:[Array.isArray(e.toolNames)&&e.toolNames.slice(0,6).map(e=>(0,l.jsx)("span",{className:"text-[9px] px-1 py-0.5 rounded bg-black/5 dark:bg-white/5 text-muted-foreground whitespace-nowrap",children:e},e)),Array.isArray(e.toolNames)&&e.toolNames.length>6&&(0,l.jsxs)("span",{className:"text-[9px] px-1 py-0.5 rounded bg-black/5 dark:bg-white/5 text-muted-foreground whitespace-nowrap",children:["+",e.toolNames.length-6]})]}),(0,l.jsx)("button",{onClick:()=>{var s;return s=e.name,void V(J.filter(e=>e.name!==s))},className:"shrink-0 hover:text-red-500 ml-auto",children:(0,l.jsx)(r.default,{name:"close",className:"text-[12px]"})})]},e.name)),el.map(e=>(0,l.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1 bg-card rounded border border-border",children:[(0,l.jsx)("span",{className:"text-xs font-medium min-w-0 truncate flex-shrink-0",children:e.name}),(0,l.jsx)("span",{className:"text-[8px] px-1 py-0.5 rounded bg-blue-500/10 text-blue-500 shrink-0",children:"custom"}),(0,l.jsx)("span",{className:"flex-1 text-[9px] text-muted-foreground truncate",children:e.url}),(0,l.jsx)("button",{onClick:()=>er(el.filter(s=>s.name!==e.name)),className:"shrink-0 hover:text-red-500 ml-auto",children:(0,l.jsx)(r.default,{name:"close",className:"text-[12px]"})})]},e.name)),0===J.filter(e=>"exa"!==e.name).length&&0===el.length&&(0,l.jsx)("div",{className:"px-2 py-1.5 bg-card rounded border border-border text-xs text-muted-foreground",children:"No MCPs added"}),(0,l.jsxs)("div",{className:"flex items-center gap-2 mt-0.5",children:[(0,l.jsx)("button",{onClick:()=>ex(!0),className:"px-2 py-1 rounded border text-xs bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer whitespace-nowrap",children:"+ Browse"}),(0,l.jsx)("button",{onClick:()=>{eg({name:"",url:""}),ep(!0)},className:"px-2 py-1 rounded border text-xs bg-card border-border text-muted-foreground hover:border-primary hover:text-primary cursor-pointer whitespace-nowrap",children:"+ Custom"}),(0,l.jsx)("a",{href:"https://mcp.so",target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-muted-foreground hover:text-primary underline ml-auto",children:"Find MCPs →"})]})]})]}),(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:"Tools"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1.5",children:[(k=J.some(e=>"exa"===e.name),C=(E?.defaultPlugins||[]).find(e=>"exa"===e.name),(0,l.jsxs)("label",{className:"flex items-start gap-2 cursor-pointer px-2 py-1.5 bg-card rounded border border-border",children:[(0,l.jsx)(f.S,{checked:k,onCheckedChange:e=>{!0===e&&C?V([...J.filter(e=>"exa"!==e.name),C]):V(J.filter(e=>"exa"!==e.name))},className:"mt-0.5"}),(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("div",{className:"text-xs font-medium",children:"Web Search & Fetch (Exa)"}),(0,l.jsx)("p",{className:"text-[10px] text-muted-foreground leading-snug",children:"Replaces built-in WebSearch/WebFetch. Auto-strips duplicates from tool list."})]})]})),(()=>{let e=(E?.localStdioPlugins||[]).find(e=>"browsermcp"===e.name);if(!e)return null;let s=G.includes("browsermcp");return(0,l.jsxs)("label",{className:"flex items-start gap-2 cursor-pointer px-2 py-1.5 bg-card rounded border border-border",children:[(0,l.jsx)(f.S,{checked:s,onCheckedChange:e=>et(!0===e?[...G,"browsermcp"]:G.filter(e=>"browsermcp"!==e)),className:"mt-0.5"}),(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsx)("div",{className:"text-xs font-medium",children:"Browser Control (Browser MCP)"}),(0,l.jsxs)("p",{className:"text-[10px] text-muted-foreground leading-snug",children:["Controls your running Chrome. Auto-strips Cowork's built-in browser tools."," ",(0,l.jsx)("a",{href:e.extensionUrl,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:"Install Chrome extension"})]})]})]})})()]})]}),Array.isArray(E?.localStdioPlugins)&&E.localStdioPlugins.filter(e=>"browsermcp"!==e.name).length>0&&(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:"Local Plugins"}),(0,l.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,l.jsx)("div",{className:"flex flex-col gap-1.5 px-2 py-1.5 bg-card rounded border border-border",children:E.localStdioPlugins.filter(e=>"browsermcp"!==e.name).map(e=>{let s=G.includes(e.name);return(0,l.jsxs)("label",{className:"flex items-start gap-2 cursor-pointer",children:[(0,l.jsx)(f.S,{checked:s,onCheckedChange:s=>et(!0===s?[...G,e.name]:G.filter(s=>s!==e.name)),className:"mt-0.5"}),(0,l.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,l.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,l.jsx)("span",{className:"text-xs font-medium",children:e.title}),(0,l.jsx)("span",{className:"text-[8px] text-amber-600",children:"stdio"})]}),(0,l.jsx)("p",{className:"text-[10px] text-muted-foreground leading-snug",children:e.description}),e.extensionUrl&&(0,l.jsx)("a",{href:e.extensionUrl,target:"_blank",rel:"noopener noreferrer",className:"text-[10px] text-primary underline",children:"Install Chrome extension"})]})]},e.name)})}),(0,l.jsxs)("p",{className:"text-[10px] text-muted-foreground leading-snug",children:["⚠️ Local plugins run as subprocess via"," ",(0,l.jsx)("code",{className:"px-1 py-0.5 rounded bg-black/5 dark:bg-white/5",children:"npx"}),". Requires Node.js installed."]})]})]})]}),T&&(0,l.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===T.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,l.jsx)(r.default,{name:"success"===T.type?"check_circle":"error",className:"text-[14px]"}),(0,l.jsx)("span",{children:T.text})]}),(0,l.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2",children:[(0,l.jsxs)(d.$,{size:"sm",onClick:ev,disabled:0===H.length||O,className:"w-full sm:w-auto",children:[O&&(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:ek,disabled:!E.has10Router||R,className:"w-full sm:w-auto",children:[R&&(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:()=>B(!0),className:"w-full sm:w-auto",children:[(0,l.jsx)(r.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),(0,l.jsx)(i.uR,{isOpen:q,onClose:()=>B(!1),title:"Claude Cowork - Manual Configuration",configs:(_=D&&D.trim()?D:x?"<API_KEY_FROM_DASHBOARD>":"sk_10router",S=H.length>0?H:["provider/model-id"],[{filename:"~/Library/Application Support/Claude-3p/configLibrary/<appliedId>.json",content:JSON.stringify({inferenceProvider:"gateway",inferenceGatewayBaseUrl:ej()||"https://your-public-host/v1",inferenceGatewayApiKey:_,inferenceModels:S.map(e=>({name:e}))},null,2)}])}),eo&&(0,l.jsx)(i.CK,{isOpen:eo,combo:null,onClose:()=>ei(!1),onSave:eN,activeProviders:c,forcePrefix:"claude-",title:"Create Cowork Combo"}),ed&&(0,l.jsx)(i.rq,{isOpen:ed,onClose:()=>ec(!1),onSelect:e=>{let s=e?.value||e?.name||e;!s||H.includes(s)||F(e=>[...e,s])},onDeselect:ew,activeProviders:c,modelAliases:ea,title:"Select Cowork Model",addedModelValues:H,closeOnSelect:!1}),(0,l.jsx)(i.Nf,{isOpen:em,onClose:()=>ex(!1),onAdd:e=>{J.some(s=>s.name===e.name)||V([...J,e])},addedNames:J.map(e=>e.name)}),(0,l.jsx)(X.lG,{open:eu,onOpenChange:ep,children:(0,l.jsxs)(X.Cf,{className:"sm:max-w-sm",children:[(0,l.jsx)(X.c7,{children:(0,l.jsx)(X.L3,{children:"Add Custom MCP"})}),(0,l.jsxs)("div",{className:"flex flex-col gap-2 p-4",children:[(0,l.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,l.jsx)("label",{className:"text-[11px] text-muted-foreground font-medium",children:"Name"}),(0,l.jsx)(y.p,{type:"text",placeholder:"my-mcp",value:eh.name,onChange:e=>eg(s=>({...s,name:e.target.value.replace(/\s+/g,"-").toLowerCase()})),className:"h-8 text-xs"})]}),(0,l.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,l.jsx)("label",{className:"text-[11px] text-muted-foreground font-medium",children:"SSE URL"}),(0,l.jsx)(y.p,{type:"text",placeholder:"https://your-mcp-server.com/sse",value:eh.url,onChange:e=>eg(s=>({...s,url:e.target.value})),className:"h-8 text-xs"})]})]}),(0,l.jsx)(X.Es,{children:(0,l.jsx)(d.$,{onClick:()=>{let e=eh.name.trim();e&&eh.url.trim()&&(er(s=>[...s.filter(s=>s.name!==e),{name:e,url:eh.url.trim(),transport:"sse",custom:!0}]),ep(!1))},children:"Add"})})]})})]})})}let et="/api/cli-tools/dsh-settings",el=e=>(e||"").replace(/\/v1\/?$/,"");function er({tool:e,isExpanded:s,onToggle:t,baseUrl:n,apiKeys:o,activeProviders:c,cloudEnabled:m,initialStatus:x,tunnelEnabled:f,tunnelPublicUrl:b,tailscaleEnabled:y,tailscaleUrl:v}){let 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,Z]=(0,a.useState)(!1),[Y,J]=(0,a.useState)({}),[V,G]=(0,a.useState)(!1),[X,Q]=(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(),ee())},[s]),(0,a.useEffect)(()=>{k?.dsh?.models?.length&&H(k.dsh.models),k?.dsh?.defaultModel&&q(k.dsh.defaultModel),k?.dsh?.baseURL&&!X&&Q(el(k.dsh.baseURL))},[k]);let ee=async()=>{try{let e=await fetch("/api/models/alias"),s=await e.json();e.ok&&J(s.aliases||{})}catch(e){console.log("Error fetching model aliases:",e)}},es=k?.dsh?.baseURL||"",ea=k?.installed?k?.dsh?W(es,{tunnelPublicUrl:b,tailscaleUrl:v})?"configured":"other":"not_configured":null,en=()=>{let e;return(e=(X||el(n)||"").replace(/\/+$/,""))?/\/v1$/.test(e)?e:`${e}/v1`:""},eo=async()=>{S(!0);try{let e=await fetch(et),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(et,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:en(),apiKey:e,models:D,defaultModel:F||D[0]})}),t=await s.json();s.ok?(U(en(),{tunnelPublicUrl:b,tailscaleUrl:v}),P({type:"success",text:"Applied — restart `dsh web` to pick up the 10Router provider."}),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(et,{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:e.image||"/providers/deepseek.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 DSH config..."})]}),!_&&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":"DSH home not found"}),(0,l.jsx)("p",{className:"text-sm text-muted-foreground",children:k.container?"DSH lives on your host, not inside the container. Copy the manual config below into your host's ~/.dsh.":"No ~/.dsh directory found. Launch `dsh web` once first, then come back — manual configuration is still available."})]})]}),(0,l.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,l.jsxs)(d.$,{variant:"secondary",size:"sm",onClick:()=>G(!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:"Run from npm (Node.js required):"}),(0,l.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npx @deepseek-ai/dsh web"})]}),(0,l.jsxs)("p",{className:"text-muted-foreground",children:["The Web UI starts at"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"http://127.0.0.1:3080"})," ","and creates"," ",(0,l.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.dsh"}),' on first launch. Click "Apply" to auto-configure.']})]})]})]}),!_&&k?.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:X||`${X||el(n)}/v1`,onChange:Q,requiresExternalUrl:e.requiresExternalUrl,tunnelEnabled:f,tunnelPublicUrl:b,tailscaleEnabled:y,tailscaleUrl:v,currentUrl:es})]}),es?(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:es})]}):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:()=>{let s=D.filter(s=>s!==e);H(s),F===e&&q(s[0]||"")},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:()=>Z(!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:["Written to"," ",(0,l.jsx)("code",{className:"rounded bg-black/5 px-1 dark:bg-white/5",children:"cordis.patch.yml"})," ","— restart dsh to apply."]})]})]})]}),(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:"Default Model"}),(0,l.jsxs)(p.l6,{value:F,onValueChange:q,children:[(0,l.jsx)(p.bq,{className:"w-full",children:(0,l.jsx)(p.yv,{placeholder:"Select default model"})}),(0,l.jsx)(p.gC,{children:D.map(e=>(0,l.jsx)(p.eb,{value:e,children:e},e))})]})]})]}),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:()=>G(!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:()=>Z(!1),onSelect:e=>{!D.includes(e.value)&&(H([...D,e.value]),F||q(e.value))},onDeselect:e=>{let s=D.filter(s=>s!==e.value);H(s),F===e.value&&q(s[0]||"")},selectedModel:null,addedModelValues:D,closeOnSelect:!1,title:"Add Models for DSH",activeProviders:c,modelAliases:Y}),(0,l.jsx)(i.uR,{isOpen:V,onClose:()=>G(!1),title:"DSH - Manual Configuration",configs:(N=T&&T.trim()?T:m?"<API_KEY_FROM_DASHBOARD>":"sk_10router",w=(D.length>0?D:["provider/model-id"]).map(e=>` - id: ${e}
23
+ name: ${e}`).join("\n"),[{filename:"~/.dsh/profiles/web/cordis.patch.yml (append)",content:`# 10Router provider for DeepSeek Harness — restart \`dsh web\` after editing
24
+ - id: llm-pi-ai
25
+ name: "@deepseek-ai/dsh-llm-pi-ai"
26
+ config:
27
+ providers:
28
+ 10router:
29
+ displayName: 10Router
30
+ apiKeyEnv: TEN_ROUTER_API_KEY
31
+ api: openai-completions
32
+ baseURL: ${en()}
33
+ models:
34
+ ${w}
35
+ - id: agent-default-model
36
+ name: "@deepseek-ai/dsh-agent-default-model"
37
+ config:
38
+ provider: 10router
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,3153,7276,1722,159,4489,1278,1830,208,427,9966,7358],()=>e(e.s=2032)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{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(4165);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]})})}},60487:(e,t,a)=>{Promise.resolve().then(a.bind(a,24324))},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,3153,7276,1722,159,4489,1278,1830,208,427,9966,7358],()=>e(e.s=60487)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{15764:(e,s,t)=>{"use strict";t.d(s,{CK:()=>i.default,G9:()=>m.default,Iz:()=>p.default,KX:()=>g.PanelSkeleton,LF:()=>a.default,LH:()=>x.default,Mu:()=>g.StatCardSkeleton,Nf:()=>d.default,Qv:()=>l.CardSkeleton,YW:()=>v.YW,gw:()=>f.default,jK:()=>c.default,nh:()=>b.default,pV:()=>v.pV,rq:()=>o.default,uR:()=>n.default,uo:()=>r.ConfirmModal,vE:()=>u.default,vj:()=>h.default,wI:()=>j.default,wn:()=>v.wn,zY:()=>v.zY}),t(58913);var r=t(3537),l=t(58350);t(30872),t(33526),t(42535),t(1279);var a=t(92802),o=t(25908),n=t(58729),i=t(24873),d=t(5258),c=t(4165);t(949),t(56776),t(53599),t(88336),t(69561);var m=t(37753),x=t(23444),u=t(93624),h=t(86920),j=t(65461);t(14580);var f=t(14670),p=t(70296);t(57779),t(22205);var g=t(43276),b=t(75862),v=t(92412)},29982:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>A});var r=t(29798),l=t(15814),a=t(31872),o=t(59732),n=t(7155),i=t(70684),d=t(75669),c=t(18055),m=t(77345),x=t(1352),u=t(49787),h=t(45111),j=t(36395),f=t(10205),p=t(15054),g=t(6403),b=t(63587),v=t(76260),y=t(3308),k=t(75877),N=t(50860),w=t(1280),C=t(26339),S=t(15764),$=t(63523),z=t(90619);let E=/^[a-zA-Z0-9_.\-]+$/;function A(){let[e,s]=(0,l.useState)([]),[t,a]=(0,l.useState)(!0),[o,n]=(0,l.useState)(!1),[i,m]=(0,l.useState)(null),[x,h]=(0,l.useState)([]),[p,g]=(0,l.useState)({}),{getCaps:b}=(0,z.y)(),[v,y]=(0,l.useState)(null),{copied:k,copy:N}=(0,$.C)(),w=async()=>{try{let[e,t,r]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings")]),l=await e.json(),a=await t.json(),o=r.ok?await r.json():{};e.ok&&s((l.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),t.ok&&h(a.connections||[]),g(o.comboStrategies||{})}catch(e){console.log("Error fetching data:",e)}finally{a(!1)}};(0,l.useEffect)(()=>{w()},[]);let C=async e=>{try{let s=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(s.ok)await w(),n(!1);else{let e=await s.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},E=async(e,s)=>{try{let t=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(t.ok)await w(),m(null);else{let e=await t.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},A=async(e,s)=>{try{let t={...p},r={...t[e]||{},...s};r.fallbackStrategy&&"fallback"!==r.fallbackStrategy?t[e]=r:delete t[e],await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:t})}),g(t)}catch(e){console.log("Error updating combo strategy:",e)}};return t?(0,r.jsxs)(S.YW,{children:[(0,r.jsx)(S.KX,{}),(0,r.jsx)(S.KX,{})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(S.YW,{children:[(0,r.jsx)(S.zY,{title:"Combos",description:"Group models under one name, then pick a strategy per combo:",actions:(0,r.jsxs)(c.$,{onClick:()=>n(!0),className:"w-full whitespace-nowrap sm:w-auto",children:[(0,r.jsx)(j.A,{}),"Create Combo"]})}),(0,r.jsx)(S.wn,{children:(0,r.jsx)("div",{className:"min-w-0",children:(0,r.jsxs)("ul",{className:"text-sm text-muted-foreground flex flex-col gap-1",children:[(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Fallback"})," — tries models in order (next on failure)"]}),(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Round Robin"})," — rotates models across requests to spread load"]}),(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Fusion"})," — queries all models in parallel, then a judge synthesizes one answer. Best quality, but costs the most: every request bills all panel models + the judge (N+1 calls)"]})]})})}),(0,r.jsx)(S.wn,{children:0===e.length?(0,r.jsx)(d.Zp,{children:(0,r.jsxs)("div",{className:"py-12 text-center",children:[(0,r.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,r.jsx)(f.A,{className:"size-8"})}),(0,r.jsx)("p",{className:"text-foreground font-medium mb-1",children:"No combos yet"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Create model combos with fallback support"}),(0,r.jsxs)(c.$,{onClick:()=>n(!0),className:"w-full sm:w-auto",children:[(0,r.jsx)(j.A,{}),"Create Combo"]})]})}):(0,r.jsx)("div",{className:"flex flex-col gap-4",children:e.map(t=>(0,r.jsx)(_,{combo:t,getCaps:b,activeProviders:x,copied:k,onCopy:N,onEdit:()=>m(t),onDelete:()=>{var r;return r=t.id,void y({title:"Delete Combo",message:"Delete this combo?",onConfirm:async()=>{y(null);try{(await fetch(`/api/combos/${r}`,{method:"DELETE"})).ok&&s(e.filter(e=>e.id!==r))}catch(e){console.log("Error deleting combo:",e)}}})},strategy:p[t.name]||{},onSetStrategy:e=>A(t.name,e)},t.id))})})]}),o&&(0,r.jsx)(F,{isOpen:o,onClose:()=>n(!1),onSave:C,activeProviders:x},"create"),i&&(0,r.jsx)(F,{isOpen:!!i,combo:i,onClose:()=>m(null),onSave:e=>E(i.id,e),activeProviders:x},i.id),v&&(0,r.jsx)(u.lG,{open:!0,onOpenChange:e=>{e||y(null)},children:(0,r.jsxs)(u.Cf,{className:"max-w-sm",children:[(0,r.jsx)(u.c7,{children:(0,r.jsx)(u.L3,{children:v.title})}),(0,r.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:v.message}),(0,r.jsxs)(u.Es,{children:[(0,r.jsx)(c.$,{variant:"ghost",onClick:()=>y(null),children:"Cancel"}),(0,r.jsx)(c.$,{variant:"destructive",onClick:v.onConfirm,children:v.confirmText||"Confirm"})]})]})})]})}let M=[{value:"fallback",label:"Fallback — try in order"},{value:"round-robin",label:"Round Robin — rotate"},{value:"fusion",label:"Fusion — panel + judge"}];function _({combo:e,getCaps:s,activeProviders:t=[],copied:a,onCopy:o,onEdit:n,onDelete:i,strategy:m={},onSetStrategy:u}){let[j,N]=(0,l.useState)(!1),w=m.fallbackStrategy||"fallback",C=m.judgeModel||"";return(0,r.jsxs)(d.Zp,{size:"sm",className:"group",children:[(0,r.jsx)(d.Wu,{className:"min-w-0",children:(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-3 sm:items-center",children:[(0,r.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,r.jsx)(f.A,{className:"size-4 text-primary"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("code",{className:"block truncate font-mono text-sm font-medium",children:e.name}),(0,r.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===e.models.length?(0,r.jsx)("span",{className:"text-xs text-muted-foreground italic",children:"No models"}):e.models.slice(0,3).map((e,t)=>(0,r.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-muted-foreground dark:bg-white/5",children:[(0,r.jsx)("span",{children:e}),(0,r.jsx)(S.nh,{caps:s?.(e)})]},t)),e.models.length>3&&(0,r.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:["+",e.models.length-3," more"]})]}),"fusion"===w&&(0,r.jsxs)("div",{className:"mt-2 flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,r.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground",children:"Judge"}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsxs)("button",{onClick:()=>N(!0),className:"inline-flex max-w-full items-center gap-1 rounded border border-dashed border-primary/40 px-1.5 py-0.5 font-mono text-[11px] text-primary hover:border-primary hover:bg-primary/5 transition-colors",children:[(0,r.jsx)(p.A,{className:"size-3.5"}),(0,r.jsx)("span",{className:"truncate",children:C||`Auto — ${e.models[0]||"first model"}`})]})}),(0,r.jsx)(x.ZI,{children:"Pick the model that fuses panel answers"})]}),C&&(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:()=>u({judgeModel:""}),className:"p-0.5 rounded text-muted-foreground hover:text-red-500 hover:bg-red-500/10 transition-colors",children:(0,r.jsx)(g.A,{className:"size-3.5"})})}),(0,r.jsx)(x.ZI,{children:"Reset judge to Auto"})]})]})]})]}),(0,r.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,r.jsx)("div",{className:"w-full sm:w-[200px]",children:(0,r.jsxs)(h.l6,{value:w,onValueChange:e=>u({fallbackStrategy:e}),children:[(0,r.jsx)(h.bq,{className:"py-1.5 text-xs",children:(0,r.jsx)(h.yv,{})}),(0,r.jsx)(h.gC,{children:M.map(e=>(0,r.jsx)(h.eb,{value:e.value,children:e.label},e.value))})]})}),(0,r.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:s=>{s.stopPropagation(),o(e.name,`combo-${e.id}`)},"aria-label":"Copy combo name",children:a===`combo-${e.id}`?(0,r.jsx)(b.A,{}):(0,r.jsx)(v.A,{})})}),(0,r.jsx)(x.ZI,{children:"Copy combo name"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:n,"aria-label":"Edit",children:(0,r.jsx)(y.A,{})})}),(0,r.jsx)(x.ZI,{children:"Edit"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:i,"aria-label":"Delete",className:"text-red-500 hover:bg-red-500/10 hover:text-red-500",children:(0,r.jsx)(k.A,{})})}),(0,r.jsx)(x.ZI,{children:"Delete"})]})]})]})]})}),j&&(0,r.jsx)(S.rq,{isOpen:j,onClose:()=>N(!1),onSelect:e=>{u({judgeModel:e?.value||""}),N(!1)},activeProviders:t,title:"Select Judge Model",addedModelValues:C?[C]:[],closeOnSelect:!0})]})}function P({id:e,index:s,model:t,isFirst:a,isLast:i,onEdit:d,onMoveUp:c,onMoveDown:m,onRemove:u}){let{attributes:h,listeners:j,setNodeRef:f,transform:p,isDragging:b}=(0,o.gl)({id:e}),v={transform:n.Ks.Transform.toString(p),opacity:b?.4:1,zIndex:b?999:void 0},[y,k]=(0,l.useState)(!1),[S,$]=(0,l.useState)(t),z=()=>{let e=S.trim();e&&e!==t?d(e):$(t),k(!1)};return(0,r.jsxs)("div",{ref:f,style:v,className:`group flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 bg-black/[0.02] hover:bg-black/[0.04] dark:bg-white/[0.02] dark:hover:bg-white/[0.04] transition-colors ${b?"shadow-md ring-1 ring-primary/30":""}`,children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{...h,...j,type:"button",className:"cursor-grab touch-none p-0.5 rounded text-muted-foreground hover:text-primary active:cursor-grabbing shrink-0",children:(0,r.jsx)(N.A,{className:"size-4"})})}),(0,r.jsx)(x.ZI,{children:"Drag to reorder"})]}),(0,r.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground w-3 text-center shrink-0",children:s+1}),y?(0,r.jsx)("input",{autoFocus:!0,value:S,onChange:e=>$(e.target.value),onBlur:z,onKeyDown:e=>{"Enter"===e.key&&z(),"Escape"===e.key&&($(t),k(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-white px-1.5 py-0.5 font-mono text-xs text-foreground outline-none dark:bg-black/20"}):(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("div",{className:"min-w-0 flex-1 cursor-text truncate rounded px-1.5 py-0.5 font-mono text-xs text-foreground hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>k(!0),children:t})}),(0,r.jsx)(x.ZI,{children:"Click to edit"})]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:c,disabled:a,className:`p-0.5 rounded ${a?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(w.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move up"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:m,disabled:i,className:`p-0.5 rounded ${i?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(C.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move down"})]})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:u,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 transition-all",children:(0,r.jsx)(g.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Remove"})]})]})}function F({isOpen:e,combo:s,onClose:t,onSave:n,activeProviders:d,kindFilter:x=null}){let[h,p]=(0,l.useState)(s?.name||""),[g,b]=(0,l.useState)(s?.models||[]),[v,y]=(0,l.useState)(!1),[k,N]=(0,l.useState)(!1),[w,C]=(0,l.useState)(""),[$,z]=(0,l.useState)({}),A=(0,a.FR)((0,a.MS)(a.AN,{activationConstraint:{distance:5}}),(0,a.MS)(a.uN,{coordinateGetter:o.JR})),M=g.map((e,s)=>({uid:`item-${s}`,model:e})),_=async()=>{try{let e=await fetch("/api/models/alias");if(!e.ok)return;let s=await e.json();z(s.aliases||{})}catch(e){console.error("Error fetching modal data:",e)}};(0,l.useEffect)(()=>{e&&_()},[e]);let O=e=>e.trim()?E.test(e)?(C(""),!0):(C("Only letters, numbers, -, _ and . allowed"),!1):(C("Name is required"),!1),I=async()=>{O(h)&&(N(!0),await n({name:h.trim(),models:g}),N(!1))},Z=!!s;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(u.lG,{open:e,onOpenChange:e=>{e||t()},children:(0,r.jsxs)(u.Cf,{className:"max-w-md",children:[(0,r.jsx)(u.c7,{children:(0,r.jsx)(u.L3,{children:Z?"Edit Combo":"Create Combo"})}),(0,r.jsxs)("div",{className:"flex flex-col gap-3 p-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground mb-1.5 block",children:"Combo Name"}),(0,r.jsx)(m.p,{value:h,onChange:e=>{let s=e.target.value;p(s),s?O(s):C("")},placeholder:"my-combo","aria-invalid":!!w,className:w?"ring-1 ring-red-500 border-red-500/40":""}),w&&(0,r.jsx)("p",{className:"mt-1 text-xs text-red-500",children:w}),(0,r.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:"Only letters, numbers, -, _ and . allowed"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Models"}),0===g.length?(0,r.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,r.jsx)(f.A,{className:"mb-1 mx-auto size-6 text-muted-foreground"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"No models added yet"})]}):(0,r.jsx)(a.Mp,{sensors:A,collisionDetection:a.fp,onDragEnd:e=>{let{active:s,over:t}=e;if(t&&s.id!==t.id){let e=M.findIndex(e=>e.uid===s.id),r=M.findIndex(e=>e.uid===t.id);-1!==e&&-1!==r&&b(s=>(0,o.be)(s,e,r))}},modifiers:[i.FN,i.gj],children:(0,r.jsx)(o.gB,{items:M.map(e=>e.uid),strategy:o._G,children:(0,r.jsx)("div",{className:"flex max-h-[55vh] min-w-0 flex-col gap-1 overflow-y-auto sm:max-h-[350px]",children:M.map(({uid:e,model:s},t)=>(0,r.jsx)(P,{id:e,index:t,model:s,isFirst:0===t,isLast:t===M.length-1,onEdit:e=>{let s=[...g];s[t]=e,b(s)},onMoveUp:()=>(e=>{if(0===e)return;let s=[...g];[s[e-1],s[e]]=[s[e],s[e-1]],b(s)})(t),onMoveDown:()=>(e=>{if(e===g.length-1)return;let s=[...g];[s[e],s[e+1]]=[s[e+1],s[e]],b(s)})(t),onRemove:()=>{b(g.filter((e,s)=>s!==t))}},e))})})}),(0,r.jsxs)("button",{onClick:()=>y(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-primary font-medium hover:text-primary hover:border-primary/50 transition-colors flex items-center justify-center gap-1",children:[(0,r.jsx)(j.A,{className:"size-4"}),"Add Model"]})]})]}),(0,r.jsx)(u.Es,{children:(0,r.jsx)("div",{className:"flex w-full flex-col gap-2 pt-1 sm:flex-row",children:(0,r.jsx)(c.$,{onClick:I,size:"sm",className:"flex-1",disabled:!h.trim()||!!w||k,children:k?"Saving...":Z?"Save":"Create"})})})]})}),v&&(0,r.jsx)(S.rq,{isOpen:v,onClose:()=>y(!1),onSelect:e=>{g.includes(e.value)||b([...g,e.value])},onDeselect:e=>{b(g.filter(s=>s!==e.value))},activeProviders:d,modelAliases:$,title:"Add Model to Combo",kindFilter:x,addedModelValues:g,closeOnSelect:!1})]})}},31659:(e,s,t)=>{Promise.resolve().then(t.bind(t,29982))},92412:(e,s,t)=>{"use strict";t.d(s,{YW:()=>r.Page,pV:()=>r.CardGrid,wn:()=>r.Section,zY:()=>r.PageHeader}),t(16675),t(72778);var r=t(29575)},99656:(e,s,t)=>{"use strict";t.d(s,{PM:()=>r.PM,Sj:()=>r.Sj,Vy:()=>r.Vy,fF:()=>r.fF,sl:()=>r.sl,vL:()=>r.vL,y$:()=>r.y$,zM:()=>r.zM});var r=t(31872)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,3153,7276,1722,1078,159,4489,1278,1830,208,427,9966,7358],()=>e(e.s=31659)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1352:(e,t,r)=>{"use strict";r.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>d,m_:()=>o});var a=r(29798);r(15814);var s=r(5471),n=r(44484);function i({delayDuration:e=0,...t}){return(0,a.jsx)(n.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function o({...e}){return(0,a.jsx)(n.bL,{"data-slot":"tooltip",...e})}function d({...e}){return(0,a.jsx)(n.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:r,...i}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,s.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[r,(0,a.jsx)(n.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},1836:(e,t,r)=>{Promise.resolve().then(r.bind(r,13189))},4836:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15814);let s=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};var i=r(28145);let o=(0,a.forwardRef)(({color:e,size:t,width:r,height:o,strokeWidth:d,absoluteStrokeWidth:l,nonScalingStroke:c,className:u="",children:g,iconNode:p=[],icon:h={node:p,aliases:[],size:24},...m},f)=>{let{size:x=24,strokeWidth:v=2,absoluteStrokeWidth:b=!1,nonScalingStroke:k=!1,color:y="currentColor",className:j=""}=(0,i.T)()??{},w=!!g||(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(m),[N,z,A=[]]=function(e,t={}){return function(e,t={}){let r=t.attributeNames??{},a=e=>r[e]??e,i=e.size??e.width??n.width,o=e.size??e.height??n.height,d=e.aliases?.filter(e=>"string"==typeof e&&""!==e.trim()).map(e=>`lucide-${e}`)??[],l=[...e.name?[`lucide-${e.name}`]:[],...d],c=t.className?.split(" ").filter(Boolean)??[],u=!1===t.includeDefaultClasses?s(...c):s("lucide",...l,...c),g=t.absoluteStrokeWidth?Number(t.strokeWidth??n["stroke-width"])*Number(e.size??e.width??n.width)/Number(t.size??t.width??n.width):t.strokeWidth??n["stroke-width"];return["svg",{...Object.entries(n).reduce((e,[t,r])=>(e[a(t)]=r,e),{}),..."color"in t&&t.color&&{[a("stroke")]:t.color},..."size"in t&&null!=t.size&&{[a("width")]:t.size,[a("height")]:t.size},..."width"in t&&null!=t.width&&{[a("width")]:t.width},..."height"in t&&null!=t.height&&{[a("height")]:t.height},[a("stroke-width")]:g,...u&&{[a("class")]:u},[a("viewBox")]:`0 0 ${i} ${o}`,...!1===t.hasA11yProp?{[a("aria-hidden")]:"true"}:{},..."attributes"in t&&t.attributes},e.node.map(e=>{let[r,s,n]=e,i=t.nonScalingStroke?{[a("vector-effect")]:"non-scaling-stroke",...s}:s;return n?[r,i,n]:[r,i]})]}(e,{...t,attributeNames:{...t.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}(h,{color:e??y,width:r??t??x,height:o??t??x,strokeWidth:d??v,absoluteStrokeWidth:l??b,nonScalingStroke:c??k,className:s(j,u),hasA11yProp:w,attributes:m});return(0,a.createElement)(N,{ref:f,...z},[...A.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(g)?g:[g]])})},13189:(e,t,r)=>{"use strict";r.d(t,{default:()=>_});var a=r(29798),s=r(15814),n=r(75669),i=r(18055),o=r(53784),d=r(77345),l=r(1352),c=r(45111),u=r(74719),g=r(66685),p=r(24477),h=r(26339),m=r(75877),f=r(51660);let x={USAGE:"usage",STREAM:"stream","STREAM USAGE":"usage",COMBO:"combo",FUSION:"combo",TOKEN:"token",RTK:"rtk",HEADROOM:"rtk",REQUEST:"request",PROXY:"proxy",AUTH:"auth",AG_QUOTA:"auth",DB:"db",TUNNEL:"tunnel",PROJECTID:"other"},v={debug:"debug",info:"info",log:"info",warn:"warn",error:"error"},b={debug:0,info:1,warn:2,error:3};function k(e,t){return b[t]>b[e]?t:e}function y(e,t){let r=v[e]??"info",a="other";if(/\[DBG:[^\]]+\]/.test(t)||t.includes("\uD83D\uDC1B"))return{level:"debug",category:"debug"};let s=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+(DEBUG|INFO|WARN|ERROR)\b/);if(s){let e=s[2].toLowerCase();b[e]>b[r]&&(r=e)}let n=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[[0-9a-f]{4}\]\s+([A-Z]+)\b/);if(n){let e=n[2];"REQ"===e?a="request":"DONE"===e?a="done":"SAVERS"===e?a="rtk":"REFRESH"===e?a="token":"BLOCKED"===e||"ABORT"===e?a="stream":"ERROR"===e&&(r=k(r,"error"),"other"===a&&(a="request"))}if("other"===a&&/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i.test(t)){let e=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i)[2].toLowerCase();a="http"===e?"request":e}let i=t.match(/\[([A-Z][A-Z _-]*)\]/g);if(i)for(let e of i){let t=e.slice(1,-1).trim();if(x[t]){a=x[t];break}if("DBG"===t||t.startsWith("DBG:"))return{level:"debug",category:"debug"}}return t.includes("✗")||t.includes("❌")?(r=k(r,"error"),"other"===a&&(a="request")):t.includes("\uD83D\uDCCA")?t.includes("DONE")?a="done":"other"===a&&(a="usage"):t.includes("⚠️")?r=k(r,"warn"):t.includes("\uD83C\uDF0A")?"other"===a&&(a="stream"):t.includes("\uD83D\uDD11")||t.includes("TOKEN REFRESHED")?"other"===a&&(a="token"):t.includes("ℹ️")||t.includes("\uD83D\uDD0D")?t.includes("\uD83D\uDD0D")&&(r=k(r,"debug")):t.includes("\uD83D\uDCE5")&&"other"===a&&(a="request"),"other"===a&&/\b(POST|GET|PUT|DELETE|PATCH)\b/.test(t)&&(a="request"),/\bERROR \d{3}\b/.test(t)||/\bFAILED\b/.test(t)||/\bBLOCKED\b/.test(t)?r=k(r,"error"):/\b(falling back|fallback|unavailable|skipped|retry)\b/i.test(t)&&(r=k(r,"warn")),"other"===a&&(t.includes("[RTK]")||t.includes("HEADROOM")||t.includes("PXPIPE")?a="rtk":t.includes("[ProjectId]")?a="other":t.includes("[ProxyFetch]")?a="proxy":t.includes("[Tunnel]")?a="tunnel":t.includes("[DB]")?a="db":t.includes("[RequestDetail]")?a="request":t.includes("[STREAM]")?a="stream":t.includes("[TOKEN]")?a="token":t.includes("[COMBO]")||t.includes("[FUSION]")?a="combo":t.includes("[CHAT]")&&(a="request")),{level:r,category:a}}function j(e,t="log"){if("string"==typeof e){let{level:r,category:a}=y(t,e);return{ts:Date.now(),level:r,category:a,text:e}}if(e&&"object"==typeof e&&"string"==typeof e.text){if("number"==typeof e.ts&&e.level&&e.category)return e;let{level:r,category:a}=y(t,e.text);return{ts:"number"==typeof e.ts?e.ts:Date.now(),level:e.level??r,category:e.category??a,text:e.text}}let r=String(e??""),{level:a,category:s}=y(t,r);return{ts:Date.now(),level:a,category:s,text:r}}let w={debug:"default",info:"secondary",warn:"secondary",error:"destructive"},N={debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR"},z=["debug","info","warn","error"],A={all:"All categories",request:"Request",done:"Done",usage:"Usage",combo:"Combo",token:"Token",rtk:"RTK",stream:"Stream",debug:"Debug",auth:"Auth",proxy:"Proxy",db:"DB",tunnel:"Tunnel",other:"Other"},E=["request","done","usage","combo","token","rtk","stream","debug","auth","proxy","db","tunnel","other"],C=/^\[\d{1,2}:\d{2}(:\d{2})?(\s?[AP]M)?\]\s*/,R=/\b(IN|OUT) \d[\d,]*( \(CACHE [^)]*\))?|\b\d[\d,]*ms\b|\b[A-Za-z_][\w.-]*=[^\s·|,]+/g;function O({text:e,isError:t}){let[r,n]=(0,s.useMemo)(()=>{let t;return -1===(t=e.indexOf("\n"))?[e,null]:[e.slice(0,t),e.slice(t+1)]},[e]),i=(0,s.useMemo)(()=>(function(e){let t=[],r=0;for(let a of e.matchAll(R)){let s=a[0],n=a.index??0;if(n>r&&t.push({kind:"plain",text:e.slice(r,n)}),/^(IN|OUT) /.test(s))t.push({kind:"tokens",text:s});else if(/ms$/.test(s))t.push({kind:"duration",text:s});else{let e=s.indexOf("=");t.push({kind:"kv",key:s.slice(0,e+1),value:s.slice(e+1)})}r=n+s.length}return r<e.length&&t.push({kind:"plain",text:e.slice(r)}),0===t.length&&t.push({kind:"plain",text:e}),t})(r.replace(C,"")),[r]);return(0,a.jsxs)("span",{className:"break-words",children:[i.map((e,t)=>"duration"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-amber-700",children:e.text},t):"tokens"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-emerald-700",children:e.text},t):"kv"===e.kind?(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:e.key}),(0,a.jsx)("span",{className:"font-medium text-sky-700",children:e.value})]},t):(0,a.jsx)("span",{children:e.text},t)),n&&(0,a.jsxs)("details",{className:"mt-1",children:[(0,a.jsx)("summary",{className:`cursor-pointer text-[11px] font-medium ${t?"text-red-600":"text-muted-foreground"} hover:underline`,children:"Stack trace"}),(0,a.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-muted p-2 text-[11px] whitespace-pre-wrap text-muted-foreground",children:n})]})]})}function S({entry:e}){let t="error"===e.level,r="done"===e.category;return(0,a.jsxs)("div",{className:`flex items-start gap-2 px-3 py-1.5 leading-relaxed ${t?"border-l-2 border-red-500 bg-red-500/5":r?"border-l-2 border-green-500 bg-green-500/5":"border-l-2 border-transparent hover:bg-muted/50"}`,children:[(0,a.jsx)("span",{className:"shrink-0 pt-0.5 text-[11px] text-muted-foreground tabular-nums",children:new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1})}),(0,a.jsx)(o.E,{variant:w[e.level],className:"shrink-0",children:N[e.level]}),(0,a.jsx)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground uppercase",children:A[e.category]}),(0,a.jsx)("span",{className:"min-w-0 flex-1 text-foreground",children:(0,a.jsx)(O,{text:e.text,isError:t})})]})}function T(e){return e.map(e=>j(e))}function _(){let[e,t]=(0,s.useState)([]),[r,x]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[k,y]=(0,s.useState)(!0),[C,R]=(0,s.useState)(""),[O,_]=(0,s.useState)(new Set(z)),[D,L]=(0,s.useState)("all"),M=(0,s.useRef)(null),U=(0,s.useRef)(v);(0,s.useEffect)(()=>{U.current=v},[v]);let B=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};(0,s.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>x(!0),e.onmessage=e=>{if(U.current)return;let r=JSON.parse(e.data);if("init"===r.type)t(T(r.logs).slice(-f.UY.maxLines));else if("line"===r.type){let e=j(r.line);t(t=>{let r=[...t,e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else if("lines"===r.type){let e=T(r.lines);t(t=>{let r=[...t,...e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else"clear"===r.type&&t([])},e.onerror=()=>x(!1),()=>e.close()},[]),(0,s.useEffect)(()=>{k&&M.current&&(M.current.scrollTop=M.current.scrollHeight)},[e,k]);let q=(0,s.useMemo)(()=>{let t=C.trim().toLowerCase();return e.filter(e=>!!O.has(e.level)&&("all"===D||e.category===D)&&(!t||!!e.text.toLowerCase().includes(t)))},[e,O,D,C]),P=(0,s.useMemo)(()=>e.filter(e=>"error"===e.level).length,[e]),$=(0,s.useMemo)(()=>e.filter(e=>"warn"===e.level).length,[e]);return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsx)(n.ZB,{className:"sr-only",children:"Console logs"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("span",{className:r?"size-2 rounded-full bg-green-500":"size-2 rounded-full bg-red-500"})}),(0,a.jsx)(l.ZI,{children:r?"Connected":"Disconnected"})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:[q.length,"/",e.length," lines",P>0&&(0,a.jsxs)("span",{className:"font-semibold text-red-600",children:[" \xb7 ",P," errors"]}),$>0&&(0,a.jsxs)("span",{className:"font-semibold text-yellow-600",children:[" \xb7 ",$," warnings"]})]}),(0,a.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(u.A,{className:"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(d.p,{value:C,onChange:e=>R(e.target.value),placeholder:"Search logs…",className:"h-7 w-44 pl-8 text-xs"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1",children:z.map(e=>(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("button",{type:"button",onClick:()=>{_(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:`cursor-pointer transition-opacity ${O.has(e)?"opacity-100":"opacity-30 grayscale"}`,children:(0,a.jsx)(o.E,{variant:w[e],children:N[e]})})}),(0,a.jsx)(l.ZI,{children:`Toggle ${N[e]}`})]},e))}),(0,a.jsxs)(c.l6,{value:D,onValueChange:e=>L(e),children:[(0,a.jsx)(c.bq,{className:"h-7 w-32 text-xs",children:(0,a.jsx)(c.yv,{})}),(0,a.jsxs)(c.gC,{children:[(0,a.jsx)(c.eb,{value:"all",children:A.all}),E.map(e=>(0,a.jsx)(c.eb,{value:e,children:A[e]},e))]})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:()=>b(e=>!e),children:[v?(0,a.jsx)(g.A,{}):(0,a.jsx)(p.A,{}),v?"Resume":"Pause"]}),(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsxs)(i.$,{size:"sm",variant:k?"secondary":"outline",onClick:()=>y(e=>!e),children:[(0,a.jsx)(h.A,{}),"Follow"]})}),(0,a.jsx)(l.ZI,{children:"Auto-scroll to newest"})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:B,children:[(0,a.jsx)(m.A,{}),"Clear"]})]})]})]}),(0,a.jsx)(n.Wu,{className:"pt-0",children:(0,a.jsx)("div",{ref:M,className:"h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs",children:0===e.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No console logs yet."}):0===q.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No logs match the current filters."}):(0,a.jsx)("div",{className:"divide-y divide-border/50",children:q.map((e,t)=>(0,a.jsx)(S,{entry:e},t))})})})]})}},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.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 d({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?i.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(o({variant:t,size:r,className:e})),...l})}},24477:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};s.node;let n=(0,a.A)(s)},26339:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"arrow-down",size:24,node:[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]};s.node;let n=(0,a.A)(s)},28145:(e,t,r)=>{"use strict";r.d(t,{T:()=>i,a:()=>n});var a=r(15814);let s=(0,a.createContext)({});function n({children:e,size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}){let c=(0,a.useMemo)(()=>({size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}),[t,r,i,o,d,l]);return(0,a.createElement)(s.Provider,{value:c},e)}let i=()=>(0,a.useContext)(s)},28830:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};s.node;let n=(0,a.A)(s)},45111:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,eb:()=>p,gC:()=>g,l6:()=>l,yv:()=>c});var a=r(29798);r(15814);var s=r(5471),n=r(95862),i=r(58765),o=r(63587),d=r(28830);function l({...e}){return(0,a.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,a.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:r,...o}){return(0,a.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":t,className:(0,s.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 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",e),...o,children:[r,(0,a.jsx)(n.In,{asChild:!0,children:(0,a.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function g({className:e,children:t,position:r="popper",align:i="center",...o}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,s.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...o,children:[(0,a.jsx)(h,{}),(0,a.jsx)(n.LM,{"data-position":r,className:(0,s.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:t}),(0,a.jsx)(m,{})]})})}function p({className:e,children:t,...r}){return(0,a.jsxs)(n.q7,{"data-slot":"select-item",className:(0,s.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,a.jsx)(n.VF,{children:(0,a.jsx)(o.A,{className:"pointer-events-none"})})}),(0,a.jsx)(n.p4,{children:t})]})}function h({className:e,...t}){return(0,a.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(d.A,{})})}function m({className:e,...t}){return(0,a.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(i.A,{})})}},50009:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(15814),s=r(4836);function n(e,t=[],r=[]){let i,o="string"==typeof e?function(e,t,r=[]){if(null==t)throw Error("[lucide]: iconNode is required when icon name is used");return{name:e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),size:24,node:t,...r.length>0?{aliases:r}:{}}}(e,t,r):e,d=(0,a.forwardRef)(({className:e,...t},r)=>(0,a.createElement)(s.A,{ref:r,icon:o,className:e,...t}));return o.name&&(d.displayName=(i=(e=>{let t="",r=!1;for(let a of e){if("-"===a||"_"===a||a<=" "){r=t.length>0;continue}0===t.length?t+=a.toLowerCase():t+=r?a.toUpperCase():a,r=!1}return t})(o.name)).charAt(0).toUpperCase()+i.slice(1)),d}},51660:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>a.Q2,fg:()=>a.fg,vQ:()=>s,_$:()=>i,MA:()=>a.MA,UY:()=>d,Nu:()=>n,zN:()=>a.zN,B2:()=>o});var a=r(13794);r(80159);let s={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.0"},n={changelogUrl:"/api/changelog"},i=20128,o={storageKey:"theme",defaultTheme:"light"},d={maxLines:500,pollIntervalMs:1e3}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.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 d({className:e,variant:t="default",asChild:r=!1,...s}){let l=r?i.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(o({variant:t}),e),...s})}},58765:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};s.node;let n=(0,a.A)(s)},63587:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};s.node;let n=(0,a.A)(s)},66685:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"play",size:24,node:[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]};s.node;let n=(0,a.A)(s)},74719:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};s.node;let n=(0,a.A)(s)},75669:(e,t,r)=>{"use strict";r.d(t,{BT:()=>d,Wu:()=>c,X9:()=>l,ZB:()=>o,Zp:()=>n,aR:()=>i});var a=r(29798);r(15814);var s=r(5471);function n({className:e,size:t="default",...r}){return(0,a.jsx)("div",{"data-slot":"card","data-size":t,className:(0,s.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function i({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,s.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...t})}function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,s.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...t})}function d({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,s.cn)("text-sm text-muted-foreground",e),...t})}function l({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,s.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function c({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,s.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...t})}},75877:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};s.node;let n=(0,a.A)(s)},77345:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var a=r(29798);r(15814);var s=r(5471);function n({className:e,type:t,...r}){return(0,a.jsx)("input",{type:t,"data-slot":"input",className:(0,s.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[5166,7552,9980,5778,4484,3577,5862,159,427,9966,7358],()=>e(e.s=1836)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099],{},_=>{_.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,3153,7276,1722,159,4489,1278,1830,208,9590,427,9966,7358],()=>_(_.s=49590)),_N_E=_.O()}]);