@amir83nasr/10router 0.1.11 → 0.1.14

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 (396) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +22 -50
  5. package/.next/routes-manifest.json +0 -6
  6. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  7. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  17. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  25. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  27. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  33. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  37. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_global-error/page.js +2 -2
  41. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/_global-error.html +1 -1
  43. package/.next/server/app/_global-error.rsc +1 -1
  44. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  46. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/.next/server/app/_not-found/page.js +1 -1
  48. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/_not-found.html +1 -1
  50. package/.next/server/app/_not-found.rsc +6 -6
  51. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  52. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  53. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  54. package/.next/server/app/api/auth/login/route.js +1 -1
  55. package/.next/server/app/api/auth/logout/route.js +1 -1
  56. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  57. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  58. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  59. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  60. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  61. package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
  62. package/.next/server/app/api/auth/saml/start/route.js +2 -2
  63. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  64. package/.next/server/app/api/auth/status/route.js +1 -1
  65. package/.next/server/app/api/changelog/route.js +1 -1
  66. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  67. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  68. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  69. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  70. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  71. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  72. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  73. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  74. package/.next/server/app/api/combos/[id]/route.js +1 -1
  75. package/.next/server/app/api/combos/route.js +1 -1
  76. package/.next/server/app/api/headroom/extras/route.js +1 -1
  77. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  78. package/.next/server/app/api/headroom/restart/route.js +1 -1
  79. package/.next/server/app/api/headroom/start/route.js +1 -1
  80. package/.next/server/app/api/headroom/status/route.js +1 -1
  81. package/.next/server/app/api/headroom/stop/route.js +1 -1
  82. package/.next/server/app/api/health/route.js +1 -1
  83. package/.next/server/app/api/init/route.js +1 -1
  84. package/.next/server/app/api/keys/[id]/route.js +1 -1
  85. package/.next/server/app/api/keys/route.js +1 -1
  86. package/.next/server/app/api/locale/route.js +1 -1
  87. package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  88. package/.next/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  89. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  90. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  91. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  92. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  93. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  94. package/.next/server/app/api/models/alias/route.js +1 -1
  95. package/.next/server/app/api/models/availability/route.js +1 -1
  96. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  97. package/.next/server/app/api/models/custom/route.js +1 -1
  98. package/.next/server/app/api/models/disabled/route.js +1 -1
  99. package/.next/server/app/api/models/route.js +1 -1
  100. package/.next/server/app/api/models/test/route.js +1 -1
  101. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  102. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  103. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  104. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  105. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  106. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  107. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  108. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  109. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  110. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  111. package/.next/server/app/api/pricing/route.js +1 -1
  112. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  113. package/.next/server/app/api/provider-nodes/route.js +1 -1
  114. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  115. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  116. package/.next/server/app/api/providers/[id]/route.js +1 -1
  117. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  118. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  119. package/.next/server/app/api/providers/client/route.js +1 -1
  120. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  121. package/.next/server/app/api/providers/route.js +1 -1
  122. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  123. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  124. package/.next/server/app/api/providers/validate/route.js +1 -1
  125. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  126. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  127. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  128. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  129. package/.next/server/app/api/proxy-pools/route.js +1 -1
  130. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  131. package/.next/server/app/api/pxpipe/health/route.js +2 -2
  132. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  133. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  134. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  135. package/.next/server/app/api/pxpipe/start/route.js +1 -1
  136. package/.next/server/app/api/pxpipe/stats/route.js +1 -1
  137. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  138. package/.next/server/app/api/pxpipe/stop/route.js +1 -1
  139. package/.next/server/app/api/settings/database/route.js +1 -1
  140. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  141. package/.next/server/app/api/settings/require-login/route.js +1 -1
  142. package/.next/server/app/api/settings/route.js +1 -1
  143. package/.next/server/app/api/shutdown/route.js +1 -1
  144. package/.next/server/app/api/tags/route.js +1 -1
  145. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  146. package/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  147. package/.next/server/app/api/translator/load/route.js +1 -1
  148. package/.next/server/app/api/translator/save/route.js +1 -1
  149. package/.next/server/app/api/translator/send/route.js +1 -1
  150. package/.next/server/app/api/translator/translate/route.js +1 -1
  151. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  152. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  153. package/.next/server/app/api/tunnel/status/route.js +1 -1
  154. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  155. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  156. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  157. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  158. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  159. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  160. package/.next/server/app/api/usage/chart/route.js +1 -1
  161. package/.next/server/app/api/usage/health/route.js +1 -1
  162. package/.next/server/app/api/usage/history/route.js +1 -1
  163. package/.next/server/app/api/usage/logs/route.js +1 -1
  164. package/.next/server/app/api/usage/providers/route.js +1 -1
  165. package/.next/server/app/api/usage/request-details/route.js +1 -1
  166. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  167. package/.next/server/app/api/usage/stats/route.js +1 -1
  168. package/.next/server/app/api/usage/stream/route.js +2 -2
  169. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  170. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  171. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  172. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  173. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  174. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  175. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  176. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  177. package/.next/server/app/api/v1/messages/route.js +1 -1
  178. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  179. package/.next/server/app/api/v1/models/info/route.js +1 -1
  180. package/.next/server/app/api/v1/models/route.js +1 -1
  181. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  182. package/.next/server/app/api/v1/responses/route.js +1 -1
  183. package/.next/server/app/api/v1/route.js +1 -1
  184. package/.next/server/app/api/v1/search/route.js +1 -1
  185. package/.next/server/app/api/v1/systemone/route.js +1 -1
  186. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  187. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  188. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  189. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  190. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  191. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  192. package/.next/server/app/api/v1beta/models/route.js +1 -1
  193. package/.next/server/app/api/version/route.js +1 -1
  194. package/.next/server/app/api/version/shutdown/route.js +1 -1
  195. package/.next/server/app/api/version/update/route.js +1 -1
  196. package/.next/server/app/callback/page.js +1 -1
  197. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/callback.html +1 -1
  199. package/.next/server/app/callback.rsc +7 -7
  200. package/.next/server/app/callback.segments/_full.segment.rsc +7 -7
  201. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  202. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +7 -7
  203. package/.next/server/app/dashboard/cli-tools.html +1 -1
  204. package/.next/server/app/dashboard/cli-tools.rsc +9 -9
  205. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  206. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
  207. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/dashboard/combos.html +1 -1
  209. package/.next/server/app/dashboard/combos.rsc +8 -8
  210. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  211. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  212. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  213. package/.next/server/app/dashboard/endpoint.html +1 -1
  214. package/.next/server/app/dashboard/endpoint.rsc +9 -9
  215. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  216. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  217. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  219. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  220. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  221. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  222. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  223. package/.next/server/app/dashboard/profile.html +1 -1
  224. package/.next/server/app/dashboard/profile.rsc +8 -8
  225. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  226. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  227. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  228. package/.next/server/app/dashboard/providers/new.html +1 -1
  229. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  230. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  231. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  232. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  233. package/.next/server/app/dashboard/providers.html +1 -1
  234. package/.next/server/app/dashboard/providers.rsc +8 -8
  235. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  236. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  237. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  238. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  239. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  240. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  241. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  242. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  243. package/.next/server/app/dashboard/pxpipe.html +1 -1
  244. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  245. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  246. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  247. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  248. package/.next/server/app/dashboard/quota.html +2 -2
  249. package/.next/server/app/dashboard/quota.rsc +9 -9
  250. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  251. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  252. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  253. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  254. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  255. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  256. package/.next/server/app/dashboard/settings/pricing.rsc +7 -7
  257. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +7 -7
  258. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  259. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +7 -7
  260. package/.next/server/app/dashboard/token-saver.html +1 -1
  261. package/.next/server/app/dashboard/token-saver.rsc +8 -8
  262. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
  263. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  264. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  265. package/.next/server/app/dashboard/usage.html +2 -2
  266. package/.next/server/app/dashboard/usage.rsc +8 -8
  267. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  268. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  269. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  270. package/.next/server/app/dashboard.html +1 -1
  271. package/.next/server/app/dashboard.rsc +9 -9
  272. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  273. package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
  274. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  275. package/.next/server/app/index.html +1 -1
  276. package/.next/server/app/index.rsc +6 -6
  277. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  278. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  279. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  280. package/.next/server/app/landing/page.js +1 -1
  281. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  282. package/.next/server/app/landing.html +1 -1
  283. package/.next/server/app/landing.rsc +7 -7
  284. package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
  285. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  286. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
  287. package/.next/server/app/login/page.js +1 -1
  288. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  289. package/.next/server/app/login.html +1 -1
  290. package/.next/server/app/login.rsc +6 -6
  291. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  292. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  293. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  294. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  295. package/.next/server/app/page.js +1 -1
  296. package/.next/server/app/page_client-reference-manifest.js +1 -1
  297. package/.next/server/app-paths-manifest.json +5 -6
  298. package/.next/server/chunks/1011.js +1 -1
  299. package/.next/server/chunks/1194.js +1 -1
  300. package/.next/server/chunks/1289.js +1 -1
  301. package/.next/server/chunks/1633.js +1 -1
  302. package/.next/server/chunks/2282.js +7 -7
  303. package/.next/server/chunks/2339.js +1 -1
  304. package/.next/server/chunks/2706.js +1 -1
  305. package/.next/server/chunks/2801.js +1 -1
  306. package/.next/server/chunks/3425.js +1 -1
  307. package/.next/server/chunks/4129.js +1 -1
  308. package/.next/server/chunks/6056.js +1 -1
  309. package/.next/server/chunks/7816.js +1 -1
  310. package/.next/server/chunks/9429.js +1 -1
  311. package/.next/server/middleware-build-manifest.js +1 -1
  312. package/.next/server/pages/404.html +1 -1
  313. package/.next/server/pages/500.html +1 -1
  314. package/.next/server/prefetch-hints.json +0 -24
  315. package/.next/server/server-reference-manifest.js +1 -1
  316. package/.next/server/server-reference-manifest.json +1 -1
  317. package/.next/static/chunks/1278-1bef1ffb32ea7f41.js +1 -0
  318. package/.next/static/chunks/1660-25564899e7912146.js +1 -0
  319. package/.next/static/chunks/{1699-13ee6864a8a31a96.js → 1699-49be310981e2759e.js} +2 -2
  320. package/.next/static/chunks/{3577-cd98d40e3099e1b0.js → 3577-1f02993330d7fba7.js} +1 -1
  321. package/.next/static/chunks/5148-7d67073becfaf162.js +1 -0
  322. package/.next/static/chunks/{5862-f98c2f3d480b80d2.js → 5862-6f3a3a6d4c00100d.js} +1 -1
  323. package/.next/static/chunks/6428-5a5f71440049a4e6.js +1 -0
  324. package/.next/static/chunks/7128-78b41798c1177008.js +1 -0
  325. package/.next/static/chunks/7835-06b436358f3395f6.js +1 -0
  326. package/.next/static/chunks/9150-32b4247b1af5e206.js +1 -0
  327. package/.next/static/chunks/{9ce8c186-3c7d7dbc5d428052.js → 9ce8c186-6cd204e9c27ecee1.js} +1 -1
  328. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-e8bceccb95695755.js → page-c913b130003c1672.js} +3 -3
  329. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-adee408d9de02423.js → page-3bab0c661f222ea3.js} +1 -1
  330. package/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-d4c1e29e8d038f09.js → page-76cc2c386af12738.js} +1 -1
  331. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +1 -0
  332. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-d5f693c646ae044b.js +1 -0
  333. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-b751d9603cb82e62.js → page-7340dad2b87640cf.js} +1 -1
  334. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/{page-49b3b4867d06cbe0.js → page-32e3e07a8f54ec11.js} +1 -1
  335. package/.next/static/chunks/app/(dashboard)/dashboard/page-a7f59da8c0db5cf1.js +1 -0
  336. package/.next/static/chunks/app/(dashboard)/dashboard/profile/{page-65b2c7989dbe2663.js → page-7123127fd841cfa5.js} +1 -1
  337. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-d5d480e209fdc55a.js → page-fab6f4b4cccc1a6f.js} +1 -1
  338. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-9b68243ab9555702.js → page-819e98f53bf2f4f7.js} +1 -1
  339. package/.next/static/chunks/app/(dashboard)/dashboard/providers/{page-2396571281d02804.js → page-9054f870a5e0f5c6.js} +1 -1
  340. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-cfd6bcb7e55d7d18.js → page-3e4657b108582404.js} +1 -1
  341. package/.next/static/chunks/app/(dashboard)/dashboard/quota/{page-fef6edb7aafd8bd0.js → page-61780f0a2b494680.js} +1 -1
  342. package/.next/static/chunks/app/(dashboard)/dashboard/token-saver/{page-bcc37fc2b4089f2f.js → page-4e366abb76514be7.js} +1 -1
  343. package/.next/static/chunks/app/(dashboard)/dashboard/usage/{page-697f46461825d7fc.js → page-2d71fa2936b16f45.js} +1 -1
  344. package/.next/static/chunks/app/(dashboard)/{layout-5039502fc12707c9.js → layout-91f41c68685ed739.js} +1 -1
  345. package/.next/static/chunks/app/callback/page-8b6862b2e58a129e.js +1 -0
  346. package/.next/static/chunks/app/dashboard/settings/pricing/page-c1dfa7608ff710d1.js +1 -0
  347. package/.next/static/chunks/app/landing/page-a76ba2642bd02bf5.js +1 -0
  348. package/.next/static/chunks/app/layout-cc98f6c7473b86a3.js +1 -0
  349. package/.next/static/css/efaf98e3b295f727.css +1 -0
  350. package/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +1 -0
  351. package/CHANGELOG.md +19 -0
  352. package/open-sse/providers/registry/opencode-go.js +4 -0
  353. package/open-sse/providers/registry/opencode-zen.js +4 -0
  354. package/open-sse/providers/registry/opencode.js +3 -0
  355. package/open-sse/translator/concerns/thinkingUnified.js +16 -1
  356. package/open-sse/translator/concerns/toolCall.js +2 -1
  357. package/open-sse/translator/formats/openai.js +10 -2
  358. package/open-sse/translator/request/claude-to-openai.js +9 -5
  359. package/open-sse/translator/response/openai-to-claude.js +66 -32
  360. package/open-sse/translator/schema/defaults.js +6 -0
  361. package/open-sse/translator/schema/index.js +1 -1
  362. package/package.json +1 -1
  363. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +10 -0
  364. package/src/app/api/cli-tools/claude-settings/route.js +10 -0
  365. package/src/app/globals.css +21 -1
  366. package/src/shared/components/layouts/DashboardLayout.tsx +2 -8
  367. package/src/shared/constants/cliTools.js +5 -0
  368. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +0 -1
  369. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +0 -1
  370. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +0 -1
  371. package/.next/server/app/dashboard/basic-chat.html +0 -1
  372. package/.next/server/app/dashboard/basic-chat.meta +0 -36
  373. package/.next/server/app/dashboard/basic-chat.rsc +0 -26
  374. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +0 -31
  375. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +0 -26
  376. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +0 -6
  377. package/.next/static/Xxof6vr5MvX0-6oReU23d/_buildManifest.js +0 -1
  378. package/.next/static/chunks/1278-f11c7d84c52342fc.js +0 -1
  379. package/.next/static/chunks/1471-10f225f62f7469cc.js +0 -1
  380. package/.next/static/chunks/159-ec207a220d7d5c16.js +0 -1
  381. package/.next/static/chunks/5113-5c4f5181388aab72.js +0 -1
  382. package/.next/static/chunks/5778-9d97ce04f2ac118c.js +0 -1
  383. package/.next/static/chunks/6920-e2b533c1eafa9521.js +0 -1
  384. package/.next/static/chunks/7835-c1ef8f5cdaaad483.js +0 -1
  385. package/.next/static/chunks/app/(dashboard)/dashboard/basic-chat/page-ce1364b2b9589785.js +0 -1
  386. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-3cc58622294c8c8a.js +0 -1
  387. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-67516b120adbc4d7.js +0 -1
  388. package/.next/static/chunks/app/(dashboard)/dashboard/page-315c9f52c472a700.js +0 -1
  389. package/.next/static/chunks/app/callback/page-f714c2306a1e9004.js +0 -1
  390. package/.next/static/chunks/app/dashboard/settings/pricing/page-86197107690a0580.js +0 -1
  391. package/.next/static/chunks/app/landing/page-7a83d1be493ddc8c.js +0 -1
  392. package/.next/static/chunks/app/layout-dc929483cad9f77f.js +0 -1
  393. package/.next/static/css/c66cbd684164cacf.css +0 -1
  394. package/src/app/(dashboard)/dashboard/basic-chat/BasicChatPageClient.tsx +0 -1140
  395. package/src/app/(dashboard)/dashboard/basic-chat/page.tsx +0 -5
  396. /package/.next/static/{Xxof6vr5MvX0-6oReU23d → wBARQPScPhD6SLn7WQvI9}/_ssgManifest.js +0 -0
package/.next/BUILD_ID CHANGED
@@ -1 +1 @@
1
- Xxof6vr5MvX0-6oReU23d
1
+ wBARQPScPhD6SLn7WQvI9
@@ -101,8 +101,8 @@
101
101
  "/manifest.webmanifest/route": "/manifest.webmanifest",
102
102
  "/api/combos/route": "/api/combos",
103
103
  "/api/headroom/extras/route": "/api/headroom/extras",
104
- "/api/headroom/restart/route": "/api/headroom/restart",
105
104
  "/api/headroom/proxy/[...path]/route": "/api/headroom/proxy/[...path]",
105
+ "/api/headroom/restart/route": "/api/headroom/restart",
106
106
  "/api/headroom/start/route": "/api/headroom/start",
107
107
  "/api/headroom/status/route": "/api/headroom/status",
108
108
  "/api/headroom/stop/route": "/api/headroom/stop",
@@ -117,8 +117,8 @@
117
117
  "/api/providers/[id]/route": "/api/providers/[id]",
118
118
  "/api/providers/client/route": "/api/providers/client",
119
119
  "/api/providers/suggested-models/route": "/api/providers/suggested-models",
120
- "/api/providers/route": "/api/providers",
121
120
  "/api/providers/[id]/models/route": "/api/providers/[id]/models",
121
+ "/api/providers/route": "/api/providers",
122
122
  "/api/proxy-pools/[id]/test/route": "/api/proxy-pools/[id]/test",
123
123
  "/api/proxy-pools/[id]/route": "/api/proxy-pools/[id]",
124
124
  "/api/proxy-pools/cloudflare-deploy/route": "/api/proxy-pools/cloudflare-deploy",
@@ -149,7 +149,6 @@
149
149
  "/landing/page": "/landing",
150
150
  "/login/page": "/login",
151
151
  "/page": "/",
152
- "/(dashboard)/dashboard/basic-chat/page": "/dashboard/basic-chat",
153
152
  "/(dashboard)/dashboard/cli-tools/[toolId]/page": "/dashboard/cli-tools/[toolId]",
154
153
  "/(dashboard)/dashboard/cli-tools/page": "/dashboard/cli-tools",
155
154
  "/(dashboard)/dashboard/combos/page": "/dashboard/combos",
@@ -163,8 +162,8 @@
163
162
  "/(dashboard)/dashboard/token-saver/page": "/dashboard/token-saver",
164
163
  "/(dashboard)/dashboard/usage/page": "/dashboard/usage",
165
164
  "/(dashboard)/dashboard/console-log/page": "/dashboard/console-log",
166
- "/(dashboard)/dashboard/profile/page": "/dashboard/profile",
167
165
  "/(dashboard)/dashboard/providers/page": "/dashboard/providers",
168
- "/(dashboard)/dashboard/proxy-pools/page": "/dashboard/proxy-pools",
169
- "/(dashboard)/dashboard/providers/[id]/page": "/dashboard/providers/[id]"
166
+ "/(dashboard)/dashboard/profile/page": "/dashboard/profile",
167
+ "/(dashboard)/dashboard/providers/[id]/page": "/dashboard/providers/[id]",
168
+ "/(dashboard)/dashboard/proxy-pools/page": "/dashboard/proxy-pools"
170
169
  }
@@ -4,8 +4,8 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/Xxof6vr5MvX0-6oReU23d/_buildManifest.js",
8
- "static/Xxof6vr5MvX0-6oReU23d/_ssgManifest.js"
7
+ "static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js",
8
+ "static/wBARQPScPhD6SLn7WQvI9/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
11
  "static/chunks/webpack-cb89101193742e2b.js",
@@ -5,7 +5,7 @@
5
5
  "routeType": "page",
6
6
  "response": "complete",
7
7
  "compute": "static",
8
- "htmlSize": 8414,
8
+ "htmlSize": 8422,
9
9
  "experimentalBypassFor": [
10
10
  {
11
11
  "type": "header",
@@ -62,7 +62,7 @@
62
62
  "routeType": "page",
63
63
  "response": "complete",
64
64
  "compute": "static",
65
- "htmlSize": 12520,
65
+ "htmlSize": 12529,
66
66
  "experimentalBypassFor": [
67
67
  {
68
68
  "type": "header",
@@ -90,7 +90,7 @@
90
90
  "routeType": "page",
91
91
  "response": "complete",
92
92
  "compute": "static",
93
- "htmlSize": 12816,
93
+ "htmlSize": 12825,
94
94
  "experimentalBypassFor": [
95
95
  {
96
96
  "type": "header",
@@ -118,7 +118,7 @@
118
118
  "routeType": "page",
119
119
  "response": "complete",
120
120
  "compute": "static",
121
- "htmlSize": 41033,
121
+ "htmlSize": 41045,
122
122
  "experimentalBypassFor": [
123
123
  {
124
124
  "type": "header",
@@ -142,39 +142,11 @@
142
142
  "x-next-revalidate-tag-token"
143
143
  ]
144
144
  },
145
- "/dashboard/basic-chat": {
146
- "routeType": "page",
147
- "response": "complete",
148
- "compute": "static",
149
- "htmlSize": 43084,
150
- "experimentalBypassFor": [
151
- {
152
- "type": "header",
153
- "key": "next-action"
154
- },
155
- {
156
- "type": "header",
157
- "key": "content-type",
158
- "value": "multipart/form-data;.*"
159
- }
160
- ],
161
- "initialRevalidateSeconds": false,
162
- "srcRoute": "/dashboard/basic-chat",
163
- "dataRoute": "/dashboard/basic-chat.rsc",
164
- "allowHeader": [
165
- "host",
166
- "x-matched-path",
167
- "x-prerender-revalidate",
168
- "x-prerender-revalidate-if-generated",
169
- "x-next-revalidated-tags",
170
- "x-next-revalidate-tag-token"
171
- ]
172
- },
173
145
  "/dashboard/cli-tools": {
174
146
  "routeType": "page",
175
147
  "response": "complete",
176
148
  "compute": "static",
177
- "htmlSize": 47054,
149
+ "htmlSize": 47066,
178
150
  "experimentalBypassFor": [
179
151
  {
180
152
  "type": "header",
@@ -202,7 +174,7 @@
202
174
  "routeType": "page",
203
175
  "response": "complete",
204
176
  "compute": "static",
205
- "htmlSize": 41927,
177
+ "htmlSize": 41939,
206
178
  "experimentalBypassFor": [
207
179
  {
208
180
  "type": "header",
@@ -230,7 +202,7 @@
230
202
  "routeType": "page",
231
203
  "response": "complete",
232
204
  "compute": "static",
233
- "htmlSize": 41548,
205
+ "htmlSize": 41560,
234
206
  "experimentalBypassFor": [
235
207
  {
236
208
  "type": "header",
@@ -258,7 +230,7 @@
258
230
  "routeType": "page",
259
231
  "response": "complete",
260
232
  "compute": "static",
261
- "htmlSize": 47135,
233
+ "htmlSize": 47147,
262
234
  "experimentalBypassFor": [
263
235
  {
264
236
  "type": "header",
@@ -286,7 +258,7 @@
286
258
  "routeType": "page",
287
259
  "response": "complete",
288
260
  "compute": "static",
289
- "htmlSize": 60087,
261
+ "htmlSize": 60099,
290
262
  "experimentalBypassFor": [
291
263
  {
292
264
  "type": "header",
@@ -314,7 +286,7 @@
314
286
  "routeType": "page",
315
287
  "response": "complete",
316
288
  "compute": "static",
317
- "htmlSize": 47937,
289
+ "htmlSize": 47949,
318
290
  "experimentalBypassFor": [
319
291
  {
320
292
  "type": "header",
@@ -342,7 +314,7 @@
342
314
  "routeType": "page",
343
315
  "response": "complete",
344
316
  "compute": "static",
345
- "htmlSize": 50822,
317
+ "htmlSize": 50834,
346
318
  "experimentalBypassFor": [
347
319
  {
348
320
  "type": "header",
@@ -370,7 +342,7 @@
370
342
  "routeType": "page",
371
343
  "response": "complete",
372
344
  "compute": "static",
373
- "htmlSize": 41804,
345
+ "htmlSize": 41816,
374
346
  "experimentalBypassFor": [
375
347
  {
376
348
  "type": "header",
@@ -398,7 +370,7 @@
398
370
  "routeType": "page",
399
371
  "response": "complete",
400
372
  "compute": "static",
401
- "htmlSize": 49359,
373
+ "htmlSize": 49369,
402
374
  "experimentalBypassFor": [
403
375
  {
404
376
  "type": "header",
@@ -426,7 +398,7 @@
426
398
  "routeType": "page",
427
399
  "response": "complete",
428
400
  "compute": "static",
429
- "htmlSize": 51975,
401
+ "htmlSize": 51989,
430
402
  "experimentalBypassFor": [
431
403
  {
432
404
  "type": "header",
@@ -454,7 +426,7 @@
454
426
  "routeType": "page",
455
427
  "response": "complete",
456
428
  "compute": "static",
457
- "htmlSize": 17959,
429
+ "htmlSize": 17838,
458
430
  "experimentalBypassFor": [
459
431
  {
460
432
  "type": "header",
@@ -482,7 +454,7 @@
482
454
  "routeType": "page",
483
455
  "response": "complete",
484
456
  "compute": "static",
485
- "htmlSize": 49521,
457
+ "htmlSize": 49531,
486
458
  "experimentalBypassFor": [
487
459
  {
488
460
  "type": "header",
@@ -510,7 +482,7 @@
510
482
  "routeType": "page",
511
483
  "response": "complete",
512
484
  "compute": "static",
513
- "htmlSize": 57094,
485
+ "htmlSize": 57106,
514
486
  "experimentalBypassFor": [
515
487
  {
516
488
  "type": "header",
@@ -538,7 +510,7 @@
538
510
  "routeType": "page",
539
511
  "response": "complete",
540
512
  "compute": "static",
541
- "htmlSize": 41151,
513
+ "htmlSize": 41290,
542
514
  "experimentalBypassFor": [
543
515
  {
544
516
  "type": "header",
@@ -566,7 +538,7 @@
566
538
  "routeType": "page",
567
539
  "response": "complete",
568
540
  "compute": "static",
569
- "htmlSize": 12310,
541
+ "htmlSize": 12319,
570
542
  "experimentalBypassFor": [
571
543
  {
572
544
  "type": "header",
@@ -626,8 +598,8 @@
626
598
  "dynamicRoutes": {},
627
599
  "notFoundRoutes": [],
628
600
  "preview": {
629
- "previewModeId": "f532700f0f589d55dafebc5082f14520",
630
- "previewModeSigningKey": "7cb77ed899ba2424df17a219680f7a3ca01263f2ad2d3f81c196f8c7aa0a01b6",
631
- "previewModeEncryptionKey": "f62f0f570b7bd11b9347abc71ad8150e882714e818dc5c35b3c44526ccf2386b"
601
+ "previewModeId": "d5f4a836ca91f06b0f63a06628b29e2d",
602
+ "previewModeSigningKey": "f7f244611c035129d22c6d8849c9d5587e3af178542a59edcef96744fff251ff",
603
+ "previewModeEncryptionKey": "3478d8a6af87b7e82f8cf5f32635cab86b98ec0e765ce0dd3dd4cf2572a974a9"
632
604
  }
633
605
  }
@@ -1008,12 +1008,6 @@
1008
1008
  "routeKeys": {},
1009
1009
  "namedRegex": "^/dashboard(?:/)?$"
1010
1010
  },
1011
- {
1012
- "page": "/dashboard/basic-chat",
1013
- "regex": "^/dashboard/basic\\-chat(?:/)?$",
1014
- "routeKeys": {},
1015
- "namedRegex": "^/dashboard/basic\\-chat(?:/)?$"
1016
- },
1017
1011
  {
1018
1012
  "page": "/dashboard/cli-tools",
1019
1013
  "regex": "^/dashboard/cli\\-tools(?:/)?$",
@@ -1,4 +1,4 @@
1
- (()=>{var a={};a.id=3554,a.ids=[3554],a.modules={643:a=>{"use strict";a.exports=require("node:perf_hooks")},1437:(a,b,c)=>{"use strict";var d=c(47633);c.o(d,"notFound")&&c.d(b,{notFound:function(){return d.notFound}}),c.o(d,"redirect")&&c.d(b,{redirect:function(){return d.redirect}})},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},7066:a=>{"use strict";a.exports=require("node:tty")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11543:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(41081).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},14985:a=>{"use strict";a.exports=require("dns")},16162:(a,b,c)=>{Promise.resolve().then(c.bind(c,28840))},16698:a=>{"use strict";a.exports=require("node:async_hooks")},18142:(a,b,c)=>{"use strict";c.d(b,{YW:()=>d.Page,pV:()=>d.CardGrid,wn:()=>d.Section,zY:()=>d.PageHeader}),c(73865),c(55204);var d=c(19509)},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},20482:(a,b,c)=>{"use strict";c.d(b,{CK:()=>i.default,G9:()=>l.default,Iz:()=>r.default,KX:()=>s.PanelSkeleton,LF:()=>f.default,LH:()=>m.default,Mu:()=>s.StatCardSkeleton,Nf:()=>j.default,Qv:()=>e.CardSkeleton,YW:()=>u.YW,gw:()=>q.default,jK:()=>k.default,nh:()=>t.default,pV:()=>u.pV,rq:()=>g.default,uR:()=>h.default,uo:()=>d.ConfirmModal,vE:()=>n.default,vj:()=>o.default,wI:()=>p.default,wn:()=>u.wn,zY:()=>u.zY}),c(28907);var d=c(87121),e=c(53546);c(62648),c(77562),c(79517),c(66453);var f=c(71e3),g=c(16582),h=c(94725),i=c(98279),j=c(22354),k=c(23165);c(49451),c(82466),c(70047),c(32328),c(92249);var l=c(85405),m=c(91236),n=c(89630),o=c(87556),p=c(46009);c(54928);var q=c(5409),r=c(12710);c(92393),c(51);var s=c(11442),t=c(9656),u=c(18142)},21704:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return d}});class c extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1174",enumerable:!1,configurable:!0})}}class d extends URLSearchParams{append(){throw new c}delete(){throw new c}set(){throw new c}sort(){throw new c}}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},21820:a=>{"use strict";a.exports=require("os")},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},28840:(a,b,c)=>{"use strict";c.d(b,{default:()=>aa});var d=c(86240),e=c(28907),f=c(70433),g=c(4459),h=c.n(g),i=c(20482),j=c(63265),k=c(92968),l=c(54204),m=c(95137),n=c(4271),o=c(83777),p=c(31952),q=c(36447),r=c(63998),s=c(62871),t=c(99902),u=c(81501);function v({storageKey:a,changeEvent:b,itemField:c,normalize:d=a=>a,defaultName:e=a=>a}){let f=()=>[],g=a=>{};return{read:f,subscribe:a=>()=>{},upsert:(a,b)=>{let h=d(a);if(!h)return null;let i=f(),j=i.find(a=>d(a[c])===h);if(j&&!b)return j.name;let k=(b||e(h)).trim();return k?(g([...i.filter(a=>a.name!==k&&d(a[c])!==h),{name:k,[c]:h}].sort((a,b)=>a.name.localeCompare(b.name))),k):null},remove:a=>g(f().filter(b=>b.name!==a))}}let w=a=>(a||"").replace(/\/+$/,""),x=v({storageKey:"10router.cliToolEndpointPresets",changeEvent:"10router:endpoint-presets-changed",itemField:"baseUrl",normalize:w,defaultName:a=>{try{return new URL(a).host}catch{return a}}}),y=v({storageKey:"10router.cliToolApiKeyPresets",changeEvent:"10router:api-key-presets-changed",itemField:"key"});x.read,x.subscribe;let z=x.upsert,A=x.remove;y.read,y.subscribe;let B=y.upsert,C=y.remove;function D(a,{tunnelPublicUrl:b,tailscaleUrl:c,cloudUrl:d}={}){let e=w(a);return!e||[`http://127.0.0.1:${t._$}`,b,c,d].filter(Boolean).flatMap(a=>[w(a),`${w(a)}/v1`]).includes(e)?null:z(e)}let E="__custom__",F="__save__";function G({value:a,onChange:b,requiresExternalUrl:c=!1,tunnelEnabled:g=!1,tunnelPublicUrl:h="",tailscaleEnabled:i=!1,tailscaleUrl:j="",cloudEnabled:k=!1,cloudUrl:l="",withV1:m=!0,currentUrl:n=""}){let[q,r]=(0,f.useState)([]),[s,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(""),[y,B]=(0,f.useState)("");(0,f.useRef)(!1);let C=(0,f.useRef)(""),D=(0,f.useMemo)(()=>(({requiresExternalUrl:a,tunnelEnabled:b,tunnelPublicUrl:c,tailscaleEnabled:d,tailscaleUrl:e,cloudEnabled:f,cloudUrl:g,savedPresets:h,withV1:i})=>{let j=[],k=a=>{let b;return i?(b=(a||"").replace(/\/+$/,""))?/\/v1$/.test(b)?b:`${b}/v1`:"":(a||"").replace(/\/+$/,"")};if(!a){let a=k(`http://127.0.0.1:${t._$}`);j.push({value:"local",label:a,url:a})}if(b&&c){let a=k(c);j.push({value:"tunnel",label:a,url:a})}if(d&&e){let a=k(e);j.push({value:"tailscale",label:a,url:a})}if(f&&g){let a=k(g);j.push({value:"cloud",label:a,url:a})}return h.forEach(a=>{j.push({value:`saved:${a.name}`,label:a.baseUrl,url:a.baseUrl,saved:!0})}),j.push({value:E,label:"Custom URL...",url:""}),j})({requiresExternalUrl:c,tunnelEnabled:g,tunnelPublicUrl:h,tailscaleEnabled:i,tailscaleUrl:j,cloudEnabled:k,cloudUrl:l,savedPresets:q,withV1:m}),[c,g,h,i,j,k,l,q,m]),H=w.startsWith("saved:"),I=w===E,J=I&&(y||"").trim().length>0;return(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(o.l6,{value:w,onValueChange:c=>{if(c===F){let b=(a||"").trim();if(!b)return;let c=b;try{c=new URL(b).host}catch{}let d=window.prompt("Save endpoint as:",c),e=d?.trim()?z(b,d.trim()):null;e&&x(`saved:${e}`);return}if(x(c),c===E){B(""),b("");return}let d=D.find(a=>a.value===c);d&&b(d.url)},children:[(0,d.jsx)(o.bq,{className:"flex-1 min-w-0 text-xs",children:(0,d.jsx)(o.yv,{placeholder:"Select endpoint"})}),(0,d.jsxs)(o.gC,{children:[D.map(a=>(0,d.jsx)(o.eb,{value:a.value,title:a.label,children:a.label},a.value)),J&&(0,d.jsx)(o.eb,{value:F,children:"+ Save current as..."})]})]}),H&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{type:"button",onClick:()=>{if(!w.startsWith("saved:"))return;A(w.slice(6)),B("");let a=D.find(a=>a.value!==E&&a.value!==w);a?(x(a.value),b(a.url)):(x(E),b(""))},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,d.jsx)(e.default,{name:"delete",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Delete saved endpoint"})]})]}),I&&(0,d.jsx)(u.p,{type:"text",value:y,onChange:a=>{let c=a.target.value;C.current=c,B(c),b(c)},placeholder:m?"https://example.com/v1":"https://example.com",className:"h-9 text-xs"})]})}let H="__custom__",I="__save_key__";function J({value:a,onChange:b,apiKeys:c=[],cloudEnabled:g=!1,className:h=""}){let[i,j]=(0,f.useState)([]),[k,l]=(0,f.useState)(!1),[m,n]=(0,f.useState)(""),q=(0,f.useMemo)(()=>[...c.map(a=>({value:a.key,label:a.key})),...i.map(a=>({value:`saved:${a.name}`,label:a.key,url:a.key,saved:!0})),{value:H,label:"Custom...",url:""}],[c,i]),r=a?q.find(b=>b.value===a||b.url===a):null,s=r?r.value:k||a?H:q[0]?.value??H,t=k?m:a||"",v="string"==typeof s&&s.startsWith("saved:"),w=s===H,x=w&&(a||"").trim().length>0&&!c.some(b=>b.key===a);return 0!==c.length||0!==i.length||k||a?(0,d.jsxs)("div",{className:`flex flex-col gap-1.5 ${h}`,children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(o.l6,{value:s,onValueChange:c=>{if(c===I)return void B((a||"").trim());if(c===H){l(!0),n(""),b("");return}l(!1),n("");let d=q.find(a=>a.value===c);d&&b(d.url??d.value)},children:[(0,d.jsx)(o.bq,{className:"flex-1 min-w-0 text-xs",children:(0,d.jsx)(o.yv,{placeholder:"Select key"})}),(0,d.jsxs)(o.gC,{children:[q.map(a=>(0,d.jsx)(o.eb,{value:a.value,title:a.label,children:a.label},a.value)),x&&(0,d.jsx)(o.eb,{value:I,children:"+ Save current as..."})]})]}),v&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{type:"button",onClick:()=>{if(!v)return;C(s.slice(6)),l(!1),n("");let a=q.find(a=>a.value!==H&&a.value!==s);b(a?a.url??a.value:"")},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,d.jsx)(e.default,{name:"delete",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Delete saved key"})]})]}),w&&(0,d.jsx)(u.p,{type:"text",value:t,onChange:a=>{let c=a.target.value;l(!0),n(c),b(c)},placeholder:"sk-...",className:"h-9 text-xs"})]}):(0,d.jsx)("span",{className:`min-w-0 rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5 ${h}`,children:g?"No API keys - Create one in Keys page":"sk_10router (default)"})}let K=a=>(a||"").replace(/\/+$/,"");function L(a,b={}){if(!a)return!1;let c=K(a),{tunnelPublicUrl:d,tailscaleUrl:e,cloudUrl:f}=b;return!!(/localhost|127\.0\.0\.1|0\.0\.0\.0/.test(c)||d&&c.startsWith(K(d))||e&&c.startsWith(K(e))||f&&c.startsWith(K(f)))}let M=/\[1m\]$/i,N=process.env.NEXT_PUBLIC_CLOUD_URL,O=[{label:"Default",value:""},{label:"200K",value:"198000"},{label:"300K",value:"298000"},{label:"500K",value:"498000"},{label:"700K",value:"698000"}];function P({tool:a,isExpanded:b,onToggle:c,activeProviders:g,modelMappings:h,onModelMappingChange:k,baseUrl:l,hasActiveProviders:m,apiKeys:t,cloudEnabled:u,initialStatus:v,tunnelEnabled:w,tunnelPublicUrl:x,tailscaleEnabled:y,tailscaleUrl:z}){let A,B,C,[E,F]=(0,f.useState)(v||null),[H,I]=(0,f.useState)(!1),[K,Q]=(0,f.useState)(!1),[R,S]=(0,f.useState)(!1),[T,U]=(0,f.useState)(null),[V,W]=(0,f.useState)(!1),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)(null),[_,aa]=(0,f.useState)(""),[ab,ac]=(0,f.useState)({}),[ad,ae]=(0,f.useState)(!1),[af,ag]=(0,f.useState)(""),[ah,ai]=(0,f.useState)(!1),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(""),[an,ao]=(0,f.useState)(!1);(0,f.useRef)(!1);let ap=E?.settings?.env?.ANTHROPIC_BASE_URL||"",aq=(()=>{if(!E?.installed)return null;let a=E.settings?.env?.ANTHROPIC_BASE_URL;return a?L(a,{tunnelPublicUrl:x,tailscaleUrl:z,cloudUrl:u?N:null})?"configured":"other":"not_configured"})(),ar=async a=>{let b=!0===a;ai(b),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:b})}).catch(()=>{})},as=()=>{let a=af||l;return a.endsWith("/v1")?a:`${a}/v1`},at=async()=>{Q(!0),U(null);try{let b={ANTHROPIC_BASE_URL:as()},c=_?.trim()||(t?.length>0?t[0].key:null)||(u?null:"sk_10router");c&&(b.ANTHROPIC_AUTH_TOKEN=c),a.defaultModels.forEach(a=>{let c=h[a.alias];c&&a.envKey&&(b[a.envKey]=c)}),al&&(b.CLAUDE_CODE_AUTO_COMPACT_WINDOW=al);let d=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:b,exaMcpEnabled:aj,autoCompactWindow:al})}),e=await d.json();d.ok?(D(as(),{tunnelPublicUrl:x,tailscaleUrl:z}),U({type:"success",text:"Settings applied successfully!"}),F(a=>({...a,hasBackup:!0,settings:{...a?.settings,env:b},exaMcpEnabled:aj}))):U({type:"error",text:e.error||"Failed to apply settings"})}catch(a){U({type:"error",text:a.message})}finally{Q(!1)}},au=async()=>{S(!0),U(null);try{let b=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),c=await b.json();b.ok?(U({type:"success",text:"Settings reset successfully!"}),a.defaultModels.forEach(a=>k(a.alias,a.defaultValue||"")),aa(""),ak(!1),am(""),ao(!1)):U({type:"error",text:c.error||"Failed to reset settings"})}catch(a){U({type:"error",text:a.message})}finally{S(!1)}};return(0,d.jsx)(n.Zp,{size:"sm",className:"overflow-hidden",children:(0,d.jsxs)(n.Wu,{children:[(0,d.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(s.default,{src:"/providers/claude.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:a.description})]})]})}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[H&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin"}),(0,d.jsx)("span",{children:"Checking Claude CLI..."})]}),!H&&E&&!E.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"warning",className:"text-yellow-500"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:E.container?"10Router runs in a container":"Claude CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:E.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,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(j.$,{variant:"secondary",size:"sm",onClick:()=>ae(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:()=>W(!V),children:[(0,d.jsx)(e.default,{name:V?"expand_less":"help",className:"text-[18px] mr-1"}),V?"Hide":"How to Install"]})]})]}),V&&(0,d.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @anthropic-ai/claude-code"})]}),(0,d.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!H&&E?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)(G,{value:af||((A=af||l).endsWith("/v1")?A:`${A}/v1`),onChange:ag,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:w,tunnelPublicUrl:x,tailscaleEnabled:y,tailscaleUrl:z,currentUrl:ap})]}),E?.settings?.env?.ANTHROPIC_BASE_URL&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,d.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.settings.env.ANTHROPIC_BASE_URL})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)(J,{value:_,onChange:aa,apiKeys:t,cloudEnabled:u})]}),a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:a.name}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:h[a.alias]||"",onChange:b=>k(a.alias,b.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"}),h[a.alias]&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>k(a.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,d.jsx)(e.default,{name:"close",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Clear"})]})]}),(0,d.jsx)("button",{onClick:()=>{$(a.alias),Y(!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"})]},a.alias)),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Auto-compact"}),(0,d.jsxs)(o.l6,{value:al||"__default__",onValueChange:a=>am("__default__"===a?"":a),children:[(0,d.jsx)(o.bq,{className:"w-full text-xs",children:(0,d.jsx)(o.yv,{})}),(0,d.jsx)(o.gC,{children:O.map(a=>(0,d.jsx)(o.eb,{value:a.value||"__default__",children:a.label},a.label))})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"1M context"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:an,onCheckedChange:b=>{var c;ao(c=!0===b),a.defaultModels.forEach(a=>{let b=h[a.alias];b&&k(a.alias,((a,b)=>{let{model:c}=function(a){if("string"!=typeof a)return{model:a,contextMarker:null};let b=a.trim(),c=b.match(M);return c?{model:b.slice(0,-c[0].length),contextMarker:c[0].slice(1,-1).toLowerCase()}:{model:a,contextMarker:null}}(a);return b?`${c}[1m]`:c})(b,c))})}}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Append [1m] to the model name"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.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,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Filter naming"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:ah,onCheckedChange:ar}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Filter naming requests"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.ZI,{side:"top",children:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens."})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Web Search"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:aj,onCheckedChange:a=>ak(!0===a)}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Exa MCP"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.ZI,{side:"top",children:"Injects Exa MCP into ~/.claude.json so non-Claude models gain web search. Restart Claude Code after Apply."})]})]})]})]}),T&&(0,d.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,d.jsx)(e.default,{name:"success"===T.type?"check_circle":"error",className:"text-[14px]"}),(0,d.jsx)("span",{children:T.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(j.$,{size:"sm",onClick:at,disabled:K,children:[K&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:au,disabled:!E?.has10Router||R,children:[R&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,d.jsxs)(j.$,{variant:"ghost",size:"sm",onClick:()=>ae(!0),children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),X&&(0,d.jsx)(i.rq,{isOpen:X,onClose:()=>Y(!1),onSelect:a=>{Z&&k(Z,a.value)},selectedModel:Z?h[Z]:null,activeProviders:g,modelAliases:ab,title:`Select model for ${Z}`}),(0,d.jsx)(i.uR,{isOpen:ad,onClose:()=>ae(!1),title:"Claude CLI - Manual Configuration",configs:(B=_&&_.trim()?_:u?"<API_KEY_FROM_DASHBOARD>":"sk_10router",C={ANTHROPIC_BASE_URL:as(),ANTHROPIC_AUTH_TOKEN:B},a.defaultModels.forEach(a=>{let b=h[a.alias];b&&a.envKey&&(C[a.envKey]=b)}),al&&(C.CLAUDE_CODE_AUTO_COMPACT_WINDOW=al),[{filename:"~/.claude/settings.json",content:JSON.stringify({hasCompletedOnboarding:!0,env:C},null,2)}])})]})})}function Q({tool:a,isExpanded:b,onToggle:c,baseUrl:g,apiKeys:h,activeProviders:k,cloudEnabled:l,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:r,tailscaleEnabled:t,tailscaleUrl:u}){let v,w,x,[y,z]=(0,f.useState)(m||null),[A,B]=(0,f.useState)(!1),[C,E]=(0,f.useState)(!1),[F,H]=(0,f.useState)(!1),[I,K]=(0,f.useState)(null),[M,N]=(0,f.useState)(!1),[O,P]=(0,f.useState)(""),[R,S]=(0,f.useState)([]),[T,U]=(0,f.useState)(""),[V,W]=(0,f.useState)(!1),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)({}),[_,aa]=(0,f.useState)(!1),[ab,ac]=(0,f.useState)(""),ad=(v=y?.config?.match(/base_url\s*=\s*"([^"]+)"/))?v[1]:"",ae=y?.installed?y.config?L(ad,{tunnelPublicUrl:r,tailscaleUrl:u})?"configured":"other":"not_configured":null,af=()=>{let a=ab||`${g}/v1`;return a.endsWith("/v1")?a:`${a}/v1`},ag=async()=>{B(!0);try{let a=await fetch("/api/cli-tools/codex-settings"),b=await a.json();z(b)}catch(a){z({installed:!1,error:a.message})}finally{B(!1)}},ah=async()=>{E(!0),K(null);try{let a=O&&O.trim()||l?O:"sk_10router",b=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:af(),apiKey:a,models:R,subagentModel:T})}),c=await b.json();b.ok?(D(af(),{tunnelPublicUrl:r,tailscaleUrl:u}),K({type:"success",text:"Applied — models appear in codex /model. Account default kept; use codex --profile 10router-<model> for 10Router routing."}),ag()):K({type:"error",text:c.error||"Failed to apply settings"})}catch(a){K({type:"error",text:a.message})}finally{E(!1)}},ai=async()=>{H(!0),K(null);try{let a=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),b=await a.json();a.ok?(K({type:"success",text:"Settings reset successfully!"}),S([]),U(""),ag()):K({type:"error",text:b.error||"Failed to reset settings"})}catch(a){K({type:"error",text:a.message})}finally{H(!1)}};return(0,d.jsx)(n.Zp,{size:"sm",className:"overflow-hidden",children:(0,d.jsxs)(n.Wu,{children:[(0,d.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(s.default,{src:"/providers/codex.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:a.description})]})]})}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[A&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin"}),(0,d.jsx)("span",{children:"Checking Codex CLI..."})]}),!A&&y&&!y.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"warning",className:"text-yellow-500"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:y.container?"10Router runs in a container":"Codex CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:y.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,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(j.$,{variant:"secondary",size:"sm",onClick:()=>aa(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:()=>N(!M),children:[(0,d.jsx)(e.default,{name:M?"expand_less":"help",className:"text-[18px] mr-1"}),M?"Hide":"How to Install"]})]})]}),M&&(0,d.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @openai/codex"})]}),(0,d.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,d.jsx)("div",{className:"pt-2 border-t border-border",children:(0,d.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Codex reads custom providers from"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/config.toml"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!A&&y?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[y?.rootHijacked&&(0,d.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,d.jsx)(e.default,{name:"warning",className:"text-[14px] shrink-0 mt-0.5"}),(0,d.jsx)("span",{children:"Old settings overrode your default Codex model. Apply to restore your ChatGPT account default — added models become profiles."})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)(G,{value:ab||ab||`${g}/v1`,onChange:ac,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:r,tailscaleEnabled:t,tailscaleUrl:u,currentUrl:ad})]}),y?.config&&(ad?(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,d.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:ad})]}):null),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)(J,{value:O,onChange:P,apiKeys:h,cloudEnabled:l})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"pt-1 text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Models"}),(0,d.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,d.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===R.length?(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models added"}):R.map(a=>(0,d.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:[a,(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>S(R.filter(b=>b!==a)),className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)(e.default,{name:"close",className:"text-[12px]"})})}),(0,d.jsx)(p.ZI,{children:"Remove"})]})]},a))}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsx)("button",{onClick:()=>W(!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,d.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Launch:"," ",(0,d.jsx)("code",{className:"rounded bg-black/5 px-1 dark:bg-white/5",children:"codex --profile 10router-<model>"})]})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Subagent Model"}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:T,onChange:a=>U(a.target.value),placeholder:R[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"}),T&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>U(""),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,d.jsx)(e.default,{name:"close",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Clear (will use main model)"})]})]}),(0,d.jsx)("button",{onClick:()=>Y(!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"})]})]}),I&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===I.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)(e.default,{name:"success"===I.type?"check_circle":"error",className:"text-[14px]"}),(0,d.jsx)("span",{children:I.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(j.$,{size:"sm",onClick:ah,disabled:!O&&l&&h.length>0||0===R.length||C,children:[C&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:ai,disabled:F,children:[F&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,d.jsxs)(j.$,{variant:"ghost",size:"sm",onClick:()=>aa(!0),children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),V&&(0,d.jsx)(i.rq,{isOpen:V,onClose:()=>W(!1),onSelect:a=>{R.includes(a.value)||S([...R,a.value])},onDeselect:a=>{S(R.filter(b=>b!==a.value))},selectedModel:null,addedModelValues:R,closeOnSelect:!1,title:"Add Models for Codex",activeProviders:k,modelAliases:Z}),X&&(0,d.jsx)(i.rq,{isOpen:X,onClose:()=>Y(!1),onSelect:a=>{U(a.value),Y(!1)},selectedModel:T,activeProviders:k,modelAliases:Z,title:"Select Subagent Model for Codex"}),(0,d.jsx)(i.uR,{isOpen:_,onClose:()=>aa(!1),title:"Codex CLI - Manual Configuration",configs:(w=O&&O.trim()?O:l?"<API_KEY_FROM_DASHBOARD>":"sk_10router",x=[{filename:"~/.codex/config.toml",content:`# 10Router Configuration for Codex CLI
1
+ (()=>{var a={};a.id=3554,a.ids=[3554],a.modules={643:a=>{"use strict";a.exports=require("node:perf_hooks")},1437:(a,b,c)=>{"use strict";var d=c(47633);c.o(d,"notFound")&&c.d(b,{notFound:function(){return d.notFound}}),c.o(d,"redirect")&&c.d(b,{redirect:function(){return d.redirect}})},1568:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i});var d=c(25966),e=c(1437),f=c(41270),g=c(92592),h=c(78685);async function i({params:a}){let{toolId:b}=await a;f.d[b]||(0,e.notFound)();let c=await (0,g.D)();return(0,d.jsx)(h.default,{toolId:b,machineId:c})}},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},7066:a=>{"use strict";a.exports=require("node:tty")},8128:a=>{"use strict";a.exports=require("next/dist/server/runtime-reacts.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11543:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(41081).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},14985:a=>{"use strict";a.exports=require("dns")},16162:(a,b,c)=>{Promise.resolve().then(c.bind(c,28840))},16698:a=>{"use strict";a.exports=require("node:async_hooks")},18142:(a,b,c)=>{"use strict";c.d(b,{YW:()=>d.Page,pV:()=>d.CardGrid,wn:()=>d.Section,zY:()=>d.PageHeader}),c(73865),c(55204);var d=c(19509)},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},20482:(a,b,c)=>{"use strict";c.d(b,{CK:()=>i.default,G9:()=>l.default,Iz:()=>r.default,KX:()=>s.PanelSkeleton,LF:()=>f.default,LH:()=>m.default,Mu:()=>s.StatCardSkeleton,Nf:()=>j.default,Qv:()=>e.CardSkeleton,YW:()=>u.YW,gw:()=>q.default,jK:()=>k.default,nh:()=>t.default,pV:()=>u.pV,rq:()=>g.default,uR:()=>h.default,uo:()=>d.ConfirmModal,vE:()=>n.default,vj:()=>o.default,wI:()=>p.default,wn:()=>u.wn,zY:()=>u.zY}),c(28907);var d=c(87121),e=c(53546);c(62648),c(77562),c(79517),c(66453);var f=c(71e3),g=c(16582),h=c(94725),i=c(98279),j=c(22354),k=c(23165);c(49451),c(82466),c(70047),c(32328),c(92249);var l=c(85405),m=c(91236),n=c(89630),o=c(87556),p=c(46009);c(54928);var q=c(5409),r=c(12710);c(92393),c(51);var s=c(11442),t=c(9656),u=c(18142)},21704:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return d}});class c extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams"),Object.defineProperty(this,"__NEXT_ERROR_CODE",{value:"E1174",enumerable:!1,configurable:!0})}}class d extends URLSearchParams{append(){throw new c}delete(){throw new c}set(){throw new c}sort(){throw new c}}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},21820:a=>{"use strict";a.exports=require("os")},27910:a=>{"use strict";a.exports=require("stream")},28354:a=>{"use strict";a.exports=require("util")},28840:(a,b,c)=>{"use strict";c.d(b,{default:()=>aa});var d=c(86240),e=c(28907),f=c(70433),g=c(4459),h=c.n(g),i=c(20482),j=c(63265),k=c(92968),l=c(54204),m=c(95137),n=c(4271),o=c(83777),p=c(31952),q=c(36447),r=c(63998),s=c(62871),t=c(99902),u=c(81501);function v({storageKey:a,changeEvent:b,itemField:c,normalize:d=a=>a,defaultName:e=a=>a}){let f=()=>[],g=a=>{};return{read:f,subscribe:a=>()=>{},upsert:(a,b)=>{let h=d(a);if(!h)return null;let i=f(),j=i.find(a=>d(a[c])===h);if(j&&!b)return j.name;let k=(b||e(h)).trim();return k?(g([...i.filter(a=>a.name!==k&&d(a[c])!==h),{name:k,[c]:h}].sort((a,b)=>a.name.localeCompare(b.name))),k):null},remove:a=>g(f().filter(b=>b.name!==a))}}let w=a=>(a||"").replace(/\/+$/,""),x=v({storageKey:"10router.cliToolEndpointPresets",changeEvent:"10router:endpoint-presets-changed",itemField:"baseUrl",normalize:w,defaultName:a=>{try{return new URL(a).host}catch{return a}}}),y=v({storageKey:"10router.cliToolApiKeyPresets",changeEvent:"10router:api-key-presets-changed",itemField:"key"});x.read,x.subscribe;let z=x.upsert,A=x.remove;y.read,y.subscribe;let B=y.upsert,C=y.remove;function D(a,{tunnelPublicUrl:b,tailscaleUrl:c,cloudUrl:d}={}){let e=w(a);return!e||[`http://127.0.0.1:${t._$}`,b,c,d].filter(Boolean).flatMap(a=>[w(a),`${w(a)}/v1`]).includes(e)?null:z(e)}let E="__custom__",F="__save__";function G({value:a,onChange:b,requiresExternalUrl:c=!1,tunnelEnabled:g=!1,tunnelPublicUrl:h="",tailscaleEnabled:i=!1,tailscaleUrl:j="",cloudEnabled:k=!1,cloudUrl:l="",withV1:m=!0,currentUrl:n=""}){let[q,r]=(0,f.useState)([]),[s,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(""),[y,B]=(0,f.useState)("");(0,f.useRef)(!1);let C=(0,f.useRef)(""),D=(0,f.useMemo)(()=>(({requiresExternalUrl:a,tunnelEnabled:b,tunnelPublicUrl:c,tailscaleEnabled:d,tailscaleUrl:e,cloudEnabled:f,cloudUrl:g,savedPresets:h,withV1:i})=>{let j=[],k=a=>{let b;return i?(b=(a||"").replace(/\/+$/,""))?/\/v1$/.test(b)?b:`${b}/v1`:"":(a||"").replace(/\/+$/,"")};if(!a){let a=k(`http://127.0.0.1:${t._$}`);j.push({value:"local",label:a,url:a})}if(b&&c){let a=k(c);j.push({value:"tunnel",label:a,url:a})}if(d&&e){let a=k(e);j.push({value:"tailscale",label:a,url:a})}if(f&&g){let a=k(g);j.push({value:"cloud",label:a,url:a})}return h.forEach(a=>{j.push({value:`saved:${a.name}`,label:a.baseUrl,url:a.baseUrl,saved:!0})}),j.push({value:E,label:"Custom URL...",url:""}),j})({requiresExternalUrl:c,tunnelEnabled:g,tunnelPublicUrl:h,tailscaleEnabled:i,tailscaleUrl:j,cloudEnabled:k,cloudUrl:l,savedPresets:q,withV1:m}),[c,g,h,i,j,k,l,q,m]),H=w.startsWith("saved:"),I=w===E,J=I&&(y||"").trim().length>0;return(0,d.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(o.l6,{value:w,onValueChange:c=>{if(c===F){let b=(a||"").trim();if(!b)return;let c=b;try{c=new URL(b).host}catch{}let d=window.prompt("Save endpoint as:",c),e=d?.trim()?z(b,d.trim()):null;e&&x(`saved:${e}`);return}if(x(c),c===E){B(""),b("");return}let d=D.find(a=>a.value===c);d&&b(d.url)},children:[(0,d.jsx)(o.bq,{className:"flex-1 min-w-0 text-xs",children:(0,d.jsx)(o.yv,{placeholder:"Select endpoint"})}),(0,d.jsxs)(o.gC,{children:[D.map(a=>(0,d.jsx)(o.eb,{value:a.value,title:a.label,children:a.label},a.value)),J&&(0,d.jsx)(o.eb,{value:F,children:"+ Save current as..."})]})]}),H&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{type:"button",onClick:()=>{if(!w.startsWith("saved:"))return;A(w.slice(6)),B("");let a=D.find(a=>a.value!==E&&a.value!==w);a?(x(a.value),b(a.url)):(x(E),b(""))},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,d.jsx)(e.default,{name:"delete",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Delete saved endpoint"})]})]}),I&&(0,d.jsx)(u.p,{type:"text",value:y,onChange:a=>{let c=a.target.value;C.current=c,B(c),b(c)},placeholder:m?"https://example.com/v1":"https://example.com",className:"h-9 text-xs"})]})}let H="__custom__",I="__save_key__";function J({value:a,onChange:b,apiKeys:c=[],cloudEnabled:g=!1,className:h=""}){let[i,j]=(0,f.useState)([]),[k,l]=(0,f.useState)(!1),[m,n]=(0,f.useState)(""),q=(0,f.useMemo)(()=>[...c.map(a=>({value:a.key,label:a.key})),...i.map(a=>({value:`saved:${a.name}`,label:a.key,url:a.key,saved:!0})),{value:H,label:"Custom...",url:""}],[c,i]),r=a?q.find(b=>b.value===a||b.url===a):null,s=r?r.value:k||a?H:q[0]?.value??H,t=k?m:a||"",v="string"==typeof s&&s.startsWith("saved:"),w=s===H,x=w&&(a||"").trim().length>0&&!c.some(b=>b.key===a);return 0!==c.length||0!==i.length||k||a?(0,d.jsxs)("div",{className:`flex flex-col gap-1.5 ${h}`,children:[(0,d.jsxs)("div",{className:"flex items-center gap-2",children:[(0,d.jsxs)(o.l6,{value:s,onValueChange:c=>{if(c===I)return void B((a||"").trim());if(c===H){l(!0),n(""),b("");return}l(!1),n("");let d=q.find(a=>a.value===c);d&&b(d.url??d.value)},children:[(0,d.jsx)(o.bq,{className:"flex-1 min-w-0 text-xs",children:(0,d.jsx)(o.yv,{placeholder:"Select key"})}),(0,d.jsxs)(o.gC,{children:[q.map(a=>(0,d.jsx)(o.eb,{value:a.value,title:a.label,children:a.label},a.value)),x&&(0,d.jsx)(o.eb,{value:I,children:"+ Save current as..."})]})]}),v&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{type:"button",onClick:()=>{if(!v)return;C(s.slice(6)),l(!1),n("");let a=q.find(a=>a.value!==H&&a.value!==s);b(a?a.url??a.value:"")},className:"p-1 text-muted-foreground hover:text-red-500 rounded transition-colors shrink-0",children:(0,d.jsx)(e.default,{name:"delete",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Delete saved key"})]})]}),w&&(0,d.jsx)(u.p,{type:"text",value:t,onChange:a=>{let c=a.target.value;l(!0),n(c),b(c)},placeholder:"sk-...",className:"h-9 text-xs"})]}):(0,d.jsx)("span",{className:`min-w-0 rounded bg-card/40 px-2 py-2 text-xs text-muted-foreground sm:py-1.5 ${h}`,children:g?"No API keys - Create one in Keys page":"sk_10router (default)"})}let K=a=>(a||"").replace(/\/+$/,"");function L(a,b={}){if(!a)return!1;let c=K(a),{tunnelPublicUrl:d,tailscaleUrl:e,cloudUrl:f}=b;return!!(/localhost|127\.0\.0\.1|0\.0\.0\.0/.test(c)||d&&c.startsWith(K(d))||e&&c.startsWith(K(e))||f&&c.startsWith(K(f)))}let M=/\[1m\]$/i,N=process.env.NEXT_PUBLIC_CLOUD_URL,O=[{label:"Default",value:""},{label:"200K",value:"198000"},{label:"300K",value:"298000"},{label:"500K",value:"498000"},{label:"700K",value:"698000"}];function P({tool:a,isExpanded:b,onToggle:c,activeProviders:g,modelMappings:h,onModelMappingChange:k,baseUrl:l,hasActiveProviders:m,apiKeys:t,cloudEnabled:u,initialStatus:v,tunnelEnabled:w,tunnelPublicUrl:x,tailscaleEnabled:y,tailscaleUrl:z}){let A,B,C,[E,F]=(0,f.useState)(v||null),[H,I]=(0,f.useState)(!1),[K,Q]=(0,f.useState)(!1),[R,S]=(0,f.useState)(!1),[T,U]=(0,f.useState)(null),[V,W]=(0,f.useState)(!1),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)(null),[_,aa]=(0,f.useState)(""),[ab,ac]=(0,f.useState)({}),[ad,ae]=(0,f.useState)(!1),[af,ag]=(0,f.useState)(""),[ah,ai]=(0,f.useState)(!1),[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(""),[an,ao]=(0,f.useState)(!1);(0,f.useRef)(!1);let ap=E?.settings?.env?.ANTHROPIC_BASE_URL||"",aq=(()=>{if(!E?.installed)return null;let a=E.settings?.env?.ANTHROPIC_BASE_URL;return a?L(a,{tunnelPublicUrl:x,tailscaleUrl:z,cloudUrl:u?N:null})?"configured":"other":"not_configured"})(),ar=async a=>{let b=!0===a;ai(b),await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({ccFilterNaming:b})}).catch(()=>{})},as=()=>{let a=af||l;return a.endsWith("/v1")?a:`${a}/v1`},at=async()=>{Q(!0),U(null);try{let b={ANTHROPIC_BASE_URL:as()},c=_?.trim()||(t?.length>0?t[0].key:null)||(u?null:"sk_10router");c&&(b.ANTHROPIC_AUTH_TOKEN=c),a.defaultModels.forEach(a=>{let c=h[a.alias];c&&a.envKey&&(b[a.envKey]=c)}),al&&(b.CLAUDE_CODE_AUTO_COMPACT_WINDOW=al),a.envVars?.todoTools&&(b[a.envVars.todoTools]="1");let d=await fetch("/api/cli-tools/claude-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({env:b,exaMcpEnabled:aj,autoCompactWindow:al})}),e=await d.json();d.ok?(D(as(),{tunnelPublicUrl:x,tailscaleUrl:z}),U({type:"success",text:"Settings applied successfully!"}),F(a=>({...a,hasBackup:!0,settings:{...a?.settings,env:b},exaMcpEnabled:aj}))):U({type:"error",text:e.error||"Failed to apply settings"})}catch(a){U({type:"error",text:a.message})}finally{Q(!1)}},au=async()=>{S(!0),U(null);try{let b=await fetch("/api/cli-tools/claude-settings",{method:"DELETE"}),c=await b.json();b.ok?(U({type:"success",text:"Settings reset successfully!"}),a.defaultModels.forEach(a=>k(a.alias,a.defaultValue||"")),aa(""),ak(!1),am(""),ao(!1)):U({type:"error",text:c.error||"Failed to reset settings"})}catch(a){U({type:"error",text:a.message})}finally{S(!1)}};return(0,d.jsx)(n.Zp,{size:"sm",className:"overflow-hidden",children:(0,d.jsxs)(n.Wu,{children:[(0,d.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(s.default,{src:"/providers/claude.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===aq&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:a.description})]})]})}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[H&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin"}),(0,d.jsx)("span",{children:"Checking Claude CLI..."})]}),!H&&E&&!E.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"warning",className:"text-yellow-500"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:E.container?"10Router runs in a container":"Claude CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:E.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,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(j.$,{variant:"secondary",size:"sm",onClick:()=>ae(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:()=>W(!V),children:[(0,d.jsx)(e.default,{name:V?"expand_less":"help",className:"text-[18px] mr-1"}),V?"Hide":"How to Install"]})]})]}),V&&(0,d.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @anthropic-ai/claude-code"})]}),(0,d.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"claude"})," to verify."]})]})]})]}),!H&&E?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)(G,{value:af||((A=af||l).endsWith("/v1")?A:`${A}/v1`),onChange:ag,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:w,tunnelPublicUrl:x,tailscaleEnabled:y,tailscaleUrl:z,currentUrl:ap})]}),E?.settings?.env?.ANTHROPIC_BASE_URL&&(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,d.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.settings.env.ANTHROPIC_BASE_URL})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)(J,{value:_,onChange:aa,apiKeys:t,cloudEnabled:u})]}),a.defaultModels.map(a=>(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:a.name}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:h[a.alias]||"",onChange:b=>k(a.alias,b.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"}),h[a.alias]&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>k(a.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,d.jsx)(e.default,{name:"close",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Clear"})]})]}),(0,d.jsx)("button",{onClick:()=>{$(a.alias),Y(!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"})]},a.alias)),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Auto-compact"}),(0,d.jsxs)(o.l6,{value:al||"__default__",onValueChange:a=>am("__default__"===a?"":a),children:[(0,d.jsx)(o.bq,{className:"w-full text-xs",children:(0,d.jsx)(o.yv,{})}),(0,d.jsx)(o.gC,{children:O.map(a=>(0,d.jsx)(o.eb,{value:a.value||"__default__",children:a.label},a.label))})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"1M context"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:an,onCheckedChange:b=>{var c;ao(c=!0===b),a.defaultModels.forEach(a=>{let b=h[a.alias];b&&k(a.alias,((a,b)=>{let{model:c}=function(a){if("string"!=typeof a)return{model:a,contextMarker:null};let b=a.trim(),c=b.match(M);return c?{model:b.slice(0,-c[0].length),contextMarker:c[0].slice(1,-1).toLowerCase()}:{model:a,contextMarker:null}}(a);return b?`${c}[1m]`:c})(b,c))})}}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Append [1m] to the model name"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.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,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Filter naming"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:ah,onCheckedChange:ar}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Filter naming requests"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.ZI,{side:"top",children:"Intercepts Claude Code's topic-naming requests and returns a fake response locally, saving API tokens."})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Web Search"}),(0,d.jsxs)("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[(0,d.jsx)(r.S,{checked:aj,onCheckedChange:a=>ak(!0===a)}),(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"Exa MCP"}),(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("span",{className:"relative inline-flex",children:(0,d.jsx)(e.default,{name:"info",className:"text-muted-foreground text-[14px] cursor-help"})})}),(0,d.jsx)(p.ZI,{side:"top",children:"Injects Exa MCP into ~/.claude.json so non-Claude models gain web search. Restart Claude Code after Apply."})]})]})]})]}),T&&(0,d.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,d.jsx)(e.default,{name:"success"===T.type?"check_circle":"error",className:"text-[14px]"}),(0,d.jsx)("span",{children:T.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(j.$,{size:"sm",onClick:at,disabled:K,children:[K&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:au,disabled:!E?.has10Router||R,children:[R&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,d.jsxs)(j.$,{variant:"ghost",size:"sm",onClick:()=>ae(!0),children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),X&&(0,d.jsx)(i.rq,{isOpen:X,onClose:()=>Y(!1),onSelect:a=>{Z&&k(Z,a.value)},selectedModel:Z?h[Z]:null,activeProviders:g,modelAliases:ab,title:`Select model for ${Z}`}),(0,d.jsx)(i.uR,{isOpen:ad,onClose:()=>ae(!1),title:"Claude CLI - Manual Configuration",configs:(B=_&&_.trim()?_:u?"<API_KEY_FROM_DASHBOARD>":"sk_10router",C={ANTHROPIC_BASE_URL:as(),ANTHROPIC_AUTH_TOKEN:B},a.defaultModels.forEach(a=>{let b=h[a.alias];b&&a.envKey&&(C[a.envKey]=b)}),al&&(C.CLAUDE_CODE_AUTO_COMPACT_WINDOW=al),a.envVars?.todoTools&&(C[a.envVars.todoTools]="1"),[{filename:"~/.claude/settings.json",content:JSON.stringify({hasCompletedOnboarding:!0,env:C},null,2)}])})]})})}function Q({tool:a,isExpanded:b,onToggle:c,baseUrl:g,apiKeys:h,activeProviders:k,cloudEnabled:l,initialStatus:m,tunnelEnabled:o,tunnelPublicUrl:r,tailscaleEnabled:t,tailscaleUrl:u}){let v,w,x,[y,z]=(0,f.useState)(m||null),[A,B]=(0,f.useState)(!1),[C,E]=(0,f.useState)(!1),[F,H]=(0,f.useState)(!1),[I,K]=(0,f.useState)(null),[M,N]=(0,f.useState)(!1),[O,P]=(0,f.useState)(""),[R,S]=(0,f.useState)([]),[T,U]=(0,f.useState)(""),[V,W]=(0,f.useState)(!1),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)({}),[_,aa]=(0,f.useState)(!1),[ab,ac]=(0,f.useState)(""),ad=(v=y?.config?.match(/base_url\s*=\s*"([^"]+)"/))?v[1]:"",ae=y?.installed?y.config?L(ad,{tunnelPublicUrl:r,tailscaleUrl:u})?"configured":"other":"not_configured":null,af=()=>{let a=ab||`${g}/v1`;return a.endsWith("/v1")?a:`${a}/v1`},ag=async()=>{B(!0);try{let a=await fetch("/api/cli-tools/codex-settings"),b=await a.json();z(b)}catch(a){z({installed:!1,error:a.message})}finally{B(!1)}},ah=async()=>{E(!0),K(null);try{let a=O&&O.trim()||l?O:"sk_10router",b=await fetch("/api/cli-tools/codex-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:af(),apiKey:a,models:R,subagentModel:T})}),c=await b.json();b.ok?(D(af(),{tunnelPublicUrl:r,tailscaleUrl:u}),K({type:"success",text:"Applied — models appear in codex /model. Account default kept; use codex --profile 10router-<model> for 10Router routing."}),ag()):K({type:"error",text:c.error||"Failed to apply settings"})}catch(a){K({type:"error",text:a.message})}finally{E(!1)}},ai=async()=>{H(!0),K(null);try{let a=await fetch("/api/cli-tools/codex-settings",{method:"DELETE"}),b=await a.json();a.ok?(K({type:"success",text:"Settings reset successfully!"}),S([]),U(""),ag()):K({type:"error",text:b.error||"Failed to reset settings"})}catch(a){K({type:"error",text:a.message})}finally{H(!1)}};return(0,d.jsx)(n.Zp,{size:"sm",className:"overflow-hidden",children:(0,d.jsxs)(n.Wu,{children:[(0,d.jsx)("div",{className:"flex items-start justify-between gap-3 hover:cursor-pointer sm:items-center",onClick:c,children:(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,d.jsx)("div",{className:"size-8 flex items-center justify-center shrink-0",children:(0,d.jsx)(s.default,{src:"/providers/codex.png",alt:a.name,width:32,height:32,className:"size-8 object-contain rounded-lg",sizes:"32px",onError:a=>{a.target.style.display="none"},loading:"lazy",decoding:"async"})}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,d.jsx)("h3",{className:"font-medium text-sm",children:a.name}),"configured"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-green-500/10 text-green-600 dark:text-green-400 rounded-full",children:"Connected"}),"not_configured"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-yellow-500/10 text-yellow-600 dark:text-yellow-400 rounded-full",children:"Not configured"}),"other"===ae&&(0,d.jsx)("span",{className:"px-1.5 py-0.5 text-[10px] font-medium bg-blue-500/10 text-blue-600 dark:text-blue-400 rounded-full",children:"Other"})]}),(0,d.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:a.description})]})]})}),b&&(0,d.jsxs)("div",{className:"mt-4 pt-4 border-t border-border flex flex-col gap-4",children:[A&&(0,d.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,d.jsx)(e.default,{name:"progress_activity",className:"animate-spin"}),(0,d.jsx)("span",{children:"Checking Codex CLI..."})]}),!A&&y&&!y.installed&&(0,d.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,d.jsxs)("div",{className:"flex flex-col gap-3 p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)(e.default,{name:"warning",className:"text-yellow-500"}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("p",{className:"font-medium text-yellow-600 dark:text-yellow-400",children:y.container?"10Router runs in a container":"Codex CLI not detected locally"}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:y.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,d.jsxs)("div",{className:"flex items-center gap-2 pl-9",children:[(0,d.jsxs)(j.$,{variant:"secondary",size:"sm",onClick:()=>aa(!0),className:"!bg-yellow-500/20 !border-yellow-500/40 !text-yellow-700 dark:!text-yellow-300 hover:!bg-yellow-500/30",children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[18px] mr-1"}),"Manual Config"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:()=>N(!M),children:[(0,d.jsx)(e.default,{name:M?"expand_less":"help",className:"text-[18px] mr-1"}),M?"Hide":"How to Install"]})]})]}),M&&(0,d.jsxs)("div",{className:"p-4 bg-card border border-border rounded-lg",children:[(0,d.jsx)("h4",{className:"font-medium mb-3",children:"Installation Guide"}),(0,d.jsxs)("div",{className:"space-y-3 text-sm",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("p",{className:"text-muted-foreground mb-1",children:"macOS / Linux / Windows:"}),(0,d.jsx)("code",{className:"block px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs",children:"npm install -g @openai/codex"})]}),(0,d.jsxs)("p",{className:"text-muted-foreground",children:["After installation, run"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"codex"})," to verify."]}),(0,d.jsx)("div",{className:"pt-2 border-t border-border",children:(0,d.jsxs)("p",{className:"text-muted-foreground text-xs",children:["Codex reads custom providers from"," ",(0,d.jsx)("code",{className:"px-1 bg-black/5 dark:bg-white/5 rounded",children:"~/.codex/config.toml"}),'. Click "Apply" to auto-configure.']})})]})]})]}),!A&&y?.installed&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:"flex flex-col gap-2",children:[y?.rootHijacked&&(0,d.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,d.jsx)(e.default,{name:"warning",className:"text-[14px] shrink-0 mt-0.5"}),(0,d.jsx)("span",{children:"Old settings overrode your default Codex model. Apply to restore your ChatGPT account default — added models become profiles."})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Select Endpoint"}),(0,d.jsx)(G,{value:ab||ab||`${g}/v1`,onChange:ac,requiresExternalUrl:a.requiresExternalUrl,tunnelEnabled:o,tunnelPublicUrl:r,tailscaleEnabled:t,tailscaleUrl:u,currentUrl:ad})]}),y?.config&&(ad?(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Current"}),(0,d.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:ad})]}):null),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"API Key"}),(0,d.jsx)(J,{value:O,onChange:P,apiKeys:h,cloudEnabled:l})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr] sm:items-start sm:gap-2",children:[(0,d.jsx)("span",{className:"pt-1 text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Models"}),(0,d.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,d.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===R.length?(0,d.jsx)("span",{className:"text-xs text-muted-foreground",children:"No models added"}):R.map(a=>(0,d.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:[a,(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>S(R.filter(b=>b!==a)),className:"ml-0.5 hover:text-red-500",children:(0,d.jsx)(e.default,{name:"close",className:"text-[12px]"})})}),(0,d.jsx)(p.ZI,{children:"Remove"})]})]},a))}),(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsx)("button",{onClick:()=>W(!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,d.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Launch:"," ",(0,d.jsx)("code",{className:"rounded bg-black/5 px-1 dark:bg-white/5",children:"codex --profile 10router-<model>"})]})]})]})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-1.5 sm:grid-cols-[8rem_1fr_auto] sm:items-center sm:gap-2",children:[(0,d.jsx)("span",{className:"text-xs font-semibold text-foreground sm:text-right sm:text-sm",children:"Subagent Model"}),(0,d.jsxs)("div",{className:"relative w-full min-w-0",children:[(0,d.jsx)("input",{type:"text",value:T,onChange:a=>U(a.target.value),placeholder:R[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"}),T&&(0,d.jsxs)(p.m_,{children:[(0,d.jsx)(p.k$,{asChild:!0,children:(0,d.jsx)("button",{onClick:()=>U(""),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,d.jsx)(e.default,{name:"close",className:"text-[14px]"})})}),(0,d.jsx)(p.ZI,{children:"Clear (will use main model)"})]})]}),(0,d.jsx)("button",{onClick:()=>Y(!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"})]})]}),I&&(0,d.jsxs)("div",{className:`flex items-center gap-2 px-2 py-1.5 rounded text-xs ${"success"===I.type?"bg-green-500/10 text-green-600":"bg-red-500/10 text-red-600"}`,children:[(0,d.jsx)(e.default,{name:"success"===I.type?"check_circle":"error",className:"text-[14px]"}),(0,d.jsx)("span",{children:I.text})]}),(0,d.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,d.jsxs)(j.$,{size:"sm",onClick:ah,disabled:!O&&l&&h.length>0||0===R.length||C,children:[C&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"save",className:"text-[14px] mr-1"}),"Apply"]}),(0,d.jsxs)(j.$,{variant:"outline",size:"sm",onClick:ai,disabled:F,children:[F&&(0,d.jsx)(q.A,{className:"size-4 animate-spin"}),(0,d.jsx)(e.default,{name:"restore",className:"text-[14px] mr-1"}),"Reset"]}),(0,d.jsxs)(j.$,{variant:"ghost",size:"sm",onClick:()=>aa(!0),children:[(0,d.jsx)(e.default,{name:"content_copy",className:"text-[14px] mr-1"}),"Manual Config"]})]})]})]}),V&&(0,d.jsx)(i.rq,{isOpen:V,onClose:()=>W(!1),onSelect:a=>{R.includes(a.value)||S([...R,a.value])},onDeselect:a=>{S(R.filter(b=>b!==a.value))},selectedModel:null,addedModelValues:R,closeOnSelect:!1,title:"Add Models for Codex",activeProviders:k,modelAliases:Z}),X&&(0,d.jsx)(i.rq,{isOpen:X,onClose:()=>Y(!1),onSelect:a=>{U(a.value),Y(!1)},selectedModel:T,activeProviders:k,modelAliases:Z,title:"Select Subagent Model for Codex"}),(0,d.jsx)(i.uR,{isOpen:_,onClose:()=>aa(!1),title:"Codex CLI - Manual Configuration",configs:(w=O&&O.trim()?O:l?"<API_KEY_FROM_DASHBOARD>":"sk_10router",x=[{filename:"~/.codex/config.toml",content:`# 10Router Configuration for Codex CLI
2
2
  # Default model/provider stay on your ChatGPT account — only the provider
3
3
  # definition below is added. Selected models are merged into
4
4
  # model_catalog_json (~/.codex/10router-model-catalog.json) so they show in
@@ -37,4 +37,4 @@ ${x}
37
37
  config:
38
38
  provider: 10router
39
39
  model: ${S||Q[0]||"provider/model-id"}
40
- `},{filename:"~/.dsh/.credentials.yaml (add ref)",content:`refs: { TEN_ROUTER_API_KEY: ${w} }`}])})]})})}c(77736);let _=process.env.NEXT_PUBLIC_CLOUD_URL;function aa({toolId:a,machineId:b}){let c=l.d[a],[g,n]=(0,f.useState)([]),[o,p]=(0,f.useState)(!0),[q,r]=(0,f.useState)({}),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(""),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(""),[C,D]=(0,f.useState)([]),E=()=>g.filter(a=>!1!==a.isActive),F=(0,f.useCallback)((a,b,c)=>{r(d=>d[a]?.[b]===c?d:{...d,[a]:{...d[a],[b]:c}})},[]);return c?(0,d.jsxs)(i.YW,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(j.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,d.jsxs)(h(),{href:"/dashboard/cli-tools",children:[(0,d.jsx)(e.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[(0,d.jsx)("div",{className:"size-12 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${c.color}15`},children:(0,d.jsx)(k.A,{src:c.image,alt:c.name,size:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",fallbackText:c.name.slice(0,2).toUpperCase(),fallbackColor:c.color})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:c.name}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:c.description})]})]})]}),o?(0,d.jsx)(i.KX,{}):(()=>{let b,e,f,g=(b=E(),e=[],f=new Set,b.forEach(a=>{let b=m.Xg[a.provider]||a.provider,c=(0,m.KC)(a.provider);if(c.forEach(c=>{let d=`${b}/${c.id}`;f.has(d)||(f.add(d),e.push({value:d,label:`${b}/${c.id}`,provider:a.provider,alias:b,connectionName:a.name,modelId:c.id}))}),0===c.length){let c=a.providerSpecificData?.prefix||b,d=[];a.defaultModel&&d.push({id:a.defaultModel,name:a.defaultModel}),(a.providerSpecificData?.customModels||[]).forEach(a=>{a?.id&&!d.some(b=>b.id===a.id)&&d.push({id:a.id,name:a.name||a.id})}),0===d.length&&"active"===a.testStatus&&d.push({id:"model-id",name:`${c}/model-id`}),d.forEach(b=>{let d=`${c}/${b.id}`;f.has(d)||(f.add(d),e.push({value:d,label:`${c}/${b.id}`,provider:a.provider,alias:c,connectionName:a.name,modelId:b.id}))})}}),e).length>0,h={tool:c,isExpanded:!0,onToggle:()=>{},baseUrl:u&&w?w:s&&_?_:"http://localhost:20128",apiKeys:C,tunnelEnabled:u,tunnelPublicUrl:w,tailscaleEnabled:y,tailscaleUrl:A};switch(a){case"claude":return(0,d.jsx)(P,{...h,activeProviders:E(),modelMappings:q[a]||{},onModelMappingChange:(b,c)=>F(a,b,c),hasActiveProviders:g,cloudEnabled:s});case"codex":return(0,d.jsx)(Q,{...h,activeProviders:E(),cloudEnabled:s});case"opencode":return(0,d.jsx)(U,{...h,activeProviders:E(),cloudEnabled:s});case"cowork":return(0,d.jsx)(X,{...h,activeProviders:E(),hasActiveProviders:g,cloudEnabled:s,cloudUrl:_,tunnelEnabled:u,tunnelPublicUrl:w,tailscaleEnabled:y,tailscaleUrl:A});case"dsh":return(0,d.jsx)($,{...h,activeProviders:E(),cloudEnabled:s});default:return(0,d.jsx)(T,{toolId:a,...h,activeProviders:E(),cloudEnabled:s,tunnelEnabled:u})}})()]}):(0,d.jsxs)(i.YW,{children:[(0,d.jsx)(j.$,{variant:"outline",size:"sm",asChild:!0,className:"self-start",children:(0,d.jsxs)(h(),{href:"/dashboard/cli-tools",children:[(0,d.jsx)(e.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Tool not found or disabled."})]})}},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},32467:a=>{"use strict";a.exports=require("node:http2")},33873:a=>{"use strict";a.exports=require("path")},34589:a=>{"use strict";a.exports=require("node:assert")},37067:a=>{"use strict";a.exports=require("node:http")},37540:a=>{"use strict";a.exports=require("node:console")},38522:a=>{"use strict";a.exports=require("node:zlib")},40610:a=>{"use strict";a.exports=require("node:dns")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41692:a=>{"use strict";a.exports=require("node:tls")},41792:a=>{"use strict";a.exports=require("node:querystring")},43848:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>i});var d=c(25966),e=c(1437);let f={claude:{id:"claude",name:"Claude Code",image:"/providers/claude.png",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",fableModel:"ANTHROPIC_DEFAULT_FABLE_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL"},modelAliases:["default","sonnet","opus","fable","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"fable",name:"Claude Fable",alias:"fable",envKey:"ANTHROPIC_DEFAULT_FABLE_MODEL",defaultValue:"cc/claude-fable-5"},{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-5"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-5"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},codex:{id:"codex",name:"OpenAI Codex CLI / App",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},cowork:{id:"cowork",name:"Claude Cowork",image:"/providers/claude.png",color:"#D97757",description:"Claude Desktop Cowork (third-party inference)",configType:"custom"},dsh:{id:"dsh",name:"DSH - DeepSeek Harness",image:"/providers/deepseek.png",color:"#4D6BFE",description:"DeepSeek Harness (dsh web) provider",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]}};var g=c(92592),h=c(78685);async function i({params:a}){let{toolId:b}=await a;f[b]||(0,e.notFound)();let c=await (0,g.D)();return(0,d.jsx)(h.default,{toolId:b,machineId:c})}},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},47633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(21704),g=c(96186),h=c(78688),i=c(53713),j=c(11543),k=c(71332);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},48161:a=>{"use strict";a.exports=require("node:os")},49836:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(19121),g=c(29294),h=c(63033);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},53713:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(41081).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},55511:a=>{"use strict";a.exports=require("crypto")},55591:a=>{"use strict";a.exports=require("https")},57075:a=>{"use strict";a.exports=require("node:stream")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71332:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(75523),e=c(49472),f=c(98389),g=c(65385),h=c(21206),i=c(92540);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},71553:a=>{"use strict";a.exports=require("node:dns/promises")},71622:a=>{"use strict";a.exports=import("open")},73024:a=>{"use strict";a.exports=require("node:fs")},73136:a=>{"use strict";a.exports=require("node:url")},73429:a=>{"use strict";a.exports=require("node:util/types")},73496:a=>{"use strict";a.exports=require("http2")},74075:a=>{"use strict";a.exports=require("zlib")},75919:a=>{"use strict";a.exports=require("node:worker_threads")},75994:(a,b,c)=>{Promise.resolve().then(c.bind(c,78685))},76760:a=>{"use strict";a.exports=require("node:path")},77030:a=>{"use strict";a.exports=require("node:net")},77598:a=>{"use strict";a.exports=require("node:crypto")},77736:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(86240),e=c(29184),f=c(51),g=c(92968);let h={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function i({toolId:a,tool:b,status:c}){let j=b?.configType==="guide"?{label:"Guide",tone:"info"}:c?c.container&&null==c.installed?{label:"Manual setup",tone:"info"}:c.installed?c.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,d.jsx)(f.default,{href:`/dashboard/cli-tools/${a}`,title:b.name,iconBg:b.color?`${b.color}15`:void 0,icon:(0,d.jsx)(g.A,{src:b.image,alt:b.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:b.name.slice(0,2).toUpperCase(),fallbackColor:b.color}),children:(0,d.jsxs)(e.E,{variant:"default",children:[(0,d.jsx)("span",{className:`size-1.5 rounded-full ${h[j.tone]}`}),j.label]})})}},78474:a=>{"use strict";a.exports=require("node:events")},78685:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx","default")},78688:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return f}});let d=c(41081),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},79551:a=>{"use strict";a.exports=require("url")},79646:a=>{"use strict";a.exports=require("child_process")},79868:a=>{"use strict";a.exports=require("node:sqlite")},81630:a=>{"use strict";a.exports=require("http")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87997:a=>{"use strict";a.exports=require("node:timers")},91645:a=>{"use strict";a.exports=require("net")},92592:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(94621);async function e(){return await (0,d.Xj)()}},94621:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>q});var d=c(78356),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(51336);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="10r-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},94735:a=>{"use strict";a.exports=require("events")},94883:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>x,handler:()=>z,routeModule:()=>y});var d=c(26720),e=c(29966),f=c(36243),g=c(70310),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,79452))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,11089))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),t=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),u=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),v={children:["",{children:["(dashboard)",{children:["dashboard",{children:["cli-tools",{children:["[toolId]",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,43848))),"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/page.tsx"]}]},{"global-error":[u,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[t,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"/home/runner/work/10Router/10Router/src/app/(dashboard)/layout.tsx"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"/home/runner/work/10Router/10Router/src/app/layout.tsx"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,w=(0,e.H)({tree:v,page:"/(dashboard)/dashboard/cli-tools/[toolId]/page",pathname:"/dashboard/cli-tools/[toolId]",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),x=w.__next_app__,y=w.routeModule,z=w.handler},96186:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(28191),g=c(13489),h=c(49836);function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h.actionAsyncStorage?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)}};var b=require("../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[1316,1238,7963,8569,7257,6009,9817,7535,7816,7156,2339,6461,4301,1289,9018,2801],()=>b(b.s=94883));module.exports=c})();
40
+ `},{filename:"~/.dsh/.credentials.yaml (add ref)",content:`refs: { TEN_ROUTER_API_KEY: ${w} }`}])})]})})}c(77736);let _=process.env.NEXT_PUBLIC_CLOUD_URL;function aa({toolId:a,machineId:b}){let c=l.d[a],[g,n]=(0,f.useState)([]),[o,p]=(0,f.useState)(!0),[q,r]=(0,f.useState)({}),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(""),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(""),[C,D]=(0,f.useState)([]),E=()=>g.filter(a=>!1!==a.isActive),F=(0,f.useCallback)((a,b,c)=>{r(d=>d[a]?.[b]===c?d:{...d,[a]:{...d[a],[b]:c}})},[]);return c?(0,d.jsxs)(i.YW,{children:[(0,d.jsxs)("div",{children:[(0,d.jsx)(j.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,d.jsxs)(h(),{href:"/dashboard/cli-tools",children:[(0,d.jsx)(e.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,d.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[(0,d.jsx)("div",{className:"size-12 rounded-lg flex items-center justify-center shrink-0",style:{backgroundColor:`${c.color}15`},children:(0,d.jsx)(k.A,{src:c.image,alt:c.name,size:48,className:"object-contain rounded-lg max-w-[48px] max-h-[48px]",fallbackText:c.name.slice(0,2).toUpperCase(),fallbackColor:c.color})}),(0,d.jsxs)("div",{className:"flex-1",children:[(0,d.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:c.name}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground mt-1",children:c.description})]})]})]}),o?(0,d.jsx)(i.KX,{}):(()=>{let b,e,f,g=(b=E(),e=[],f=new Set,b.forEach(a=>{let b=m.Xg[a.provider]||a.provider,c=(0,m.KC)(a.provider);if(c.forEach(c=>{let d=`${b}/${c.id}`;f.has(d)||(f.add(d),e.push({value:d,label:`${b}/${c.id}`,provider:a.provider,alias:b,connectionName:a.name,modelId:c.id}))}),0===c.length){let c=a.providerSpecificData?.prefix||b,d=[];a.defaultModel&&d.push({id:a.defaultModel,name:a.defaultModel}),(a.providerSpecificData?.customModels||[]).forEach(a=>{a?.id&&!d.some(b=>b.id===a.id)&&d.push({id:a.id,name:a.name||a.id})}),0===d.length&&"active"===a.testStatus&&d.push({id:"model-id",name:`${c}/model-id`}),d.forEach(b=>{let d=`${c}/${b.id}`;f.has(d)||(f.add(d),e.push({value:d,label:`${c}/${b.id}`,provider:a.provider,alias:c,connectionName:a.name,modelId:b.id}))})}}),e).length>0,h={tool:c,isExpanded:!0,onToggle:()=>{},baseUrl:u&&w?w:s&&_?_:"http://localhost:20128",apiKeys:C,tunnelEnabled:u,tunnelPublicUrl:w,tailscaleEnabled:y,tailscaleUrl:A};switch(a){case"claude":return(0,d.jsx)(P,{...h,activeProviders:E(),modelMappings:q[a]||{},onModelMappingChange:(b,c)=>F(a,b,c),hasActiveProviders:g,cloudEnabled:s});case"codex":return(0,d.jsx)(Q,{...h,activeProviders:E(),cloudEnabled:s});case"opencode":return(0,d.jsx)(U,{...h,activeProviders:E(),cloudEnabled:s});case"cowork":return(0,d.jsx)(X,{...h,activeProviders:E(),hasActiveProviders:g,cloudEnabled:s,cloudUrl:_,tunnelEnabled:u,tunnelPublicUrl:w,tailscaleEnabled:y,tailscaleUrl:A});case"dsh":return(0,d.jsx)($,{...h,activeProviders:E(),cloudEnabled:s});default:return(0,d.jsx)(T,{toolId:a,...h,activeProviders:E(),cloudEnabled:s,tunnelEnabled:u})}})()]}):(0,d.jsxs)(i.YW,{children:[(0,d.jsx)(j.$,{variant:"outline",size:"sm",asChild:!0,className:"self-start",children:(0,d.jsxs)(h(),{href:"/dashboard/cli-tools",children:[(0,d.jsx)(e.default,{name:"arrow_back",className:"text-lg"}),"CLI Tools"]})}),(0,d.jsx)("p",{className:"text-sm text-muted-foreground",children:"Tool not found or disabled."})]})}},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},32467:a=>{"use strict";a.exports=require("node:http2")},33873:a=>{"use strict";a.exports=require("path")},34589:a=>{"use strict";a.exports=require("node:assert")},37067:a=>{"use strict";a.exports=require("node:http")},37540:a=>{"use strict";a.exports=require("node:console")},38522:a=>{"use strict";a.exports=require("node:zlib")},40610:a=>{"use strict";a.exports=require("node:dns")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41270:(a,b,c)=>{"use strict";c.d(b,{d:()=>d});let d={claude:{id:"claude",name:"Claude Code",image:"/providers/claude.png",color:"#D97757",description:"Anthropic Claude Code CLI",configType:"env",envVars:{baseUrl:"ANTHROPIC_BASE_URL",model:"ANTHROPIC_MODEL",opusModel:"ANTHROPIC_DEFAULT_OPUS_MODEL",sonnetModel:"ANTHROPIC_DEFAULT_SONNET_MODEL",fableModel:"ANTHROPIC_DEFAULT_FABLE_MODEL",haikuModel:"ANTHROPIC_DEFAULT_HAIKU_MODEL",todoTools:"CLAUDE_CODE_ENABLE_TODO_TOOLS"},modelAliases:["default","sonnet","opus","fable","haiku","opusplan"],settingsFile:"~/.claude/settings.json",defaultModels:[{id:"fable",name:"Claude Fable",alias:"fable",envKey:"ANTHROPIC_DEFAULT_FABLE_MODEL",defaultValue:"cc/claude-fable-5"},{id:"opus",name:"Claude Opus",alias:"opus",envKey:"ANTHROPIC_DEFAULT_OPUS_MODEL",defaultValue:"cc/claude-opus-5"},{id:"sonnet",name:"Claude Sonnet",alias:"sonnet",envKey:"ANTHROPIC_DEFAULT_SONNET_MODEL",defaultValue:"cc/claude-sonnet-5"},{id:"haiku",name:"Claude Haiku",alias:"haiku",envKey:"ANTHROPIC_DEFAULT_HAIKU_MODEL",defaultValue:"cc/claude-haiku-4-5-20251001"}]},codex:{id:"codex",name:"OpenAI Codex CLI / App",image:"/providers/codex.png",color:"#10A37F",description:"OpenAI Codex CLI",configType:"custom"},opencode:{id:"opencode",name:"OpenCode",image:"/providers/opencode.png",color:"#E87040",description:"OpenCode AI Terminal Assistant",configType:"custom"},cowork:{id:"cowork",name:"Claude Cowork",image:"/providers/claude.png",color:"#D97757",description:"Claude Desktop Cowork (third-party inference)",configType:"custom"},dsh:{id:"dsh",name:"DSH - DeepSeek Harness",image:"/providers/deepseek.png",color:"#4D6BFE",description:"DeepSeek Harness (dsh web) provider",configType:"custom"},cursor:{id:"cursor",name:"Cursor",image:"/providers/cursor.png",color:"#000000",description:"Cursor AI Code Editor",configType:"guide",requiresExternalUrl:!0,notes:[{type:"warning",text:"Requires Cursor Pro account to use this feature."},{type:"cloudCheck",text:"Cursor routes requests through its own server, so local endpoint is not supported. Please enable Tunnel or Cloud Endpoint in Settings."}],guideSteps:[{step:1,title:"Open Settings",desc:"Go to Settings → Models"},{step:2,title:"Enable OpenAI API",desc:'Enable "OpenAI API key" option'},{step:3,title:"Base URL",value:"{{baseUrl}}",copyable:!0},{step:4,title:"API Key",type:"apiKeySelector"},{step:5,title:"Add Custom Model",desc:'Click "View All Model" → "Add Custom Model"'},{step:6,title:"Select Model",type:"modelSelector"}]}}},41692:a=>{"use strict";a.exports=require("node:tls")},41792:a=>{"use strict";a.exports=require("node:querystring")},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},46293:a=>{"use strict";a.exports=require("sql.js")},47633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(21704),g=c(96186),h=c(78688),i=c(53713),j=c(11543),k=c(71332);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},48161:a=>{"use strict";a.exports=require("node:os")},49836:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(19121),g=c(29294),h=c(63033);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},51455:a=>{"use strict";a.exports=require("node:fs/promises")},53053:a=>{"use strict";a.exports=require("node:diagnostics_channel")},53713:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(41081).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},55511:a=>{"use strict";a.exports=require("crypto")},55591:a=>{"use strict";a.exports=require("https")},57075:a=>{"use strict";a.exports=require("node:stream")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71332:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(75523),e=c(49472),f=c(98389),g=c(65385),h=c(21206),i=c(92540);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},71553:a=>{"use strict";a.exports=require("node:dns/promises")},71622:a=>{"use strict";a.exports=import("open")},73024:a=>{"use strict";a.exports=require("node:fs")},73136:a=>{"use strict";a.exports=require("node:url")},73429:a=>{"use strict";a.exports=require("node:util/types")},73496:a=>{"use strict";a.exports=require("http2")},74075:a=>{"use strict";a.exports=require("zlib")},75919:a=>{"use strict";a.exports=require("node:worker_threads")},75994:(a,b,c)=>{Promise.resolve().then(c.bind(c,78685))},76760:a=>{"use strict";a.exports=require("node:path")},77030:a=>{"use strict";a.exports=require("node:net")},77598:a=>{"use strict";a.exports=require("node:crypto")},77736:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(86240),e=c(29184),f=c(51),g=c(92968);let h={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function i({toolId:a,tool:b,status:c}){let j=b?.configType==="guide"?{label:"Guide",tone:"info"}:c?c.container&&null==c.installed?{label:"Manual setup",tone:"info"}:c.installed?c.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,d.jsx)(f.default,{href:`/dashboard/cli-tools/${a}`,title:b.name,iconBg:b.color?`${b.color}15`:void 0,icon:(0,d.jsx)(g.A,{src:b.image,alt:b.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:b.name.slice(0,2).toUpperCase(),fallbackColor:b.color}),children:(0,d.jsxs)(e.E,{variant:"default",children:[(0,d.jsx)("span",{className:`size-1.5 rounded-full ${h[j.tone]}`}),j.label]})})}},78474:a=>{"use strict";a.exports=require("node:events")},78685:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(35062).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/ToolDetailClient.tsx","default")},78688:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return f}});let d=c(41081),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},79551:a=>{"use strict";a.exports=require("url")},79646:a=>{"use strict";a.exports=require("child_process")},79868:a=>{"use strict";a.exports=require("node:sqlite")},81630:a=>{"use strict";a.exports=require("http")},81787:a=>{"use strict";a.exports=require("bun:sqlite")},87997:a=>{"use strict";a.exports=require("node:timers")},90808:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>x,handler:()=>z,routeModule:()=>y});var d=c(26720),e=c(29966),f=c(36243),g=c(70310),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i=(0,d.p)(()=>Promise.resolve().then(c.bind(c,79452))),j=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),k=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),l=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),m=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),n=(0,d.p)(()=>Promise.resolve().then(c.bind(c,11089))),o=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),p=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,2808,23))),q=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,8329,23))),r=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,41580,23))),s=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),t=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),u=(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,67694,23))),v={children:["",{children:["(dashboard)",{children:["dashboard",{children:["cli-tools",{children:["[toolId]",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,1568))),"/home/runner/work/10Router/10Router/src/app/(dashboard)/dashboard/cli-tools/[toolId]/page.tsx"]}]},{"global-error":[u,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[t,"next/dist/client/components/builtin/global-error.js"]},[]]},{"global-error":[s,"next/dist/client/components/builtin/global-error.js"]},[]]},{layout:[n,"/home/runner/work/10Router/10Router/src/app/(dashboard)/layout.tsx"],"global-error":[o,"next/dist/client/components/builtin/global-error.js"],"not-found":[p,"next/dist/client/components/builtin/not-found.js"],forbidden:[q,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[r,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]},{layout:[i,"/home/runner/work/10Router/10Router/src/app/layout.tsx"],"global-error":[j,"next/dist/client/components/builtin/global-error.js"],"not-found":[k,"next/dist/client/components/builtin/not-found.js"],forbidden:[l,"next/dist/client/components/builtin/forbidden.js"],unauthorized:[m,"next/dist/client/components/builtin/unauthorized.js"],metadata:{icon:[],apple:[],openGraph:[],twitter:[],manifest:"/manifest.webmanifest"}},[]]}.children,w=(0,e.H)({tree:v,page:"/(dashboard)/dashboard/cli-tools/[toolId]/page",pathname:"/dashboard/cli-tools/[toolId]",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),x=w.__next_app__,y=w.routeModule,z=w.handler},91645:a=>{"use strict";a.exports=require("net")},92592:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(94621);async function e(){return await (0,d.Xj)()}},94621:(a,b,c)=>{"use strict";c.d(b,{Xj:()=>q});var d=c(78356),e=c(73024),f=c.n(e),g=c(76760),h=c.n(g),i=c(77598),j=c.n(i),k=c(51336);let l=h().join(k.n,"machine-id"),m=h().join(k.n,"auth"),n=h().join(m,"cli-secret"),o=null,p=null;async function q(a=null){let b=a||process.env.MACHINE_ID_SALT||"endpoint-proxy-salt",c=function(){if(o)return o;try{if(o=f().readFileSync(l,"utf8").trim())return o}catch{}try{o=(0,d.machineIdSync)()}catch{o=j().randomUUID()}try{f().mkdirSync(k.n,{recursive:!0}),f().writeFileSync(l,o,{mode:384})}catch{}return o}(),e="10r-cli-auth"===b?function(){if(p)return p;try{if(p=f().readFileSync(n,"utf8").trim())return p}catch{}p=j().randomBytes(32).toString("hex");try{f().mkdirSync(m,{recursive:!0}),f().writeFileSync(n,p,{mode:384})}catch{}return p}():"";return j().createHash("sha256").update(c+b+e).digest("hex").substring(0,16)}},94735:a=>{"use strict";a.exports=require("events")},96186:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(28191),g=c(13489),h=c(49836);function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h.actionAsyncStorage?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)}};var b=require("../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[1316,1238,7963,8569,7257,6009,9817,7535,7816,7156,2339,6461,4301,1289,9018,2801],()=>b(b.s=90808));module.exports=c})();