@amir83nasr/10router 0.1.5 → 0.1.6

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 (193) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -5
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.json +5 -0
  6. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  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_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/_global-error.html +1 -1
  26. package/.next/server/app/_global-error.rsc +1 -1
  27. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  28. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  29. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/_not-found.html +1 -1
  32. package/.next/server/app/_not-found.rsc +5 -5
  33. package/.next/server/app/_not-found.segments/_full.segment.rsc +5 -5
  34. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -5
  35. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/api/changelog/route.js +1 -1
  37. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  38. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  39. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  40. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  41. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  42. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  43. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  44. package/.next/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  45. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  46. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  47. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  48. package/.next/server/app/api/providers/client/route.js +1 -1
  49. package/.next/server/app/api/translator/send/route.js +1 -1
  50. package/.next/server/app/api/translator/translate/route.js +1 -1
  51. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  52. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  53. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  54. package/.next/server/app/api/version/route.js +1 -1
  55. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  56. package/.next/server/app/callback.html +1 -1
  57. package/.next/server/app/callback.rsc +5 -5
  58. package/.next/server/app/callback.segments/_full.segment.rsc +5 -5
  59. package/.next/server/app/callback.segments/_tree.segment.rsc +1 -1
  60. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +5 -5
  61. package/.next/server/app/dashboard/basic-chat.html +1 -1
  62. package/.next/server/app/dashboard/basic-chat.rsc +6 -6
  63. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +6 -6
  64. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  65. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/dashboard/cli-tools.html +1 -1
  67. package/.next/server/app/dashboard/cli-tools.rsc +8 -8
  68. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +7 -7
  69. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  70. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  71. package/.next/server/app/dashboard/combos.html +1 -1
  72. package/.next/server/app/dashboard/combos.rsc +7 -7
  73. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +7 -7
  74. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  75. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  76. package/.next/server/app/dashboard/endpoint.html +1 -1
  77. package/.next/server/app/dashboard/endpoint.rsc +8 -8
  78. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +7 -7
  79. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  80. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  81. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  82. package/.next/server/app/dashboard/media-providers/systemone.rsc +7 -7
  83. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +7 -7
  84. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +7 -7
  85. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +1 -1
  86. package/.next/server/app/dashboard/profile.html +1 -1
  87. package/.next/server/app/dashboard/profile.rsc +7 -7
  88. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +7 -7
  89. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  90. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  91. package/.next/server/app/dashboard/providers/new.html +1 -1
  92. package/.next/server/app/dashboard/providers/new.rsc +7 -7
  93. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +7 -7
  94. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  95. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  96. package/.next/server/app/dashboard/providers.html +1 -1
  97. package/.next/server/app/dashboard/providers.rsc +7 -7
  98. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +7 -7
  99. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  100. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  101. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  102. package/.next/server/app/dashboard/proxy-pools.rsc +7 -7
  103. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +7 -7
  104. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  105. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  106. package/.next/server/app/dashboard/pxpipe.html +1 -1
  107. package/.next/server/app/dashboard/pxpipe.rsc +6 -6
  108. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +6 -6
  109. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +6 -6
  110. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +1 -1
  111. package/.next/server/app/dashboard/quota.html +2 -2
  112. package/.next/server/app/dashboard/quota.rsc +8 -8
  113. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +8 -8
  114. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  115. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  116. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  117. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  118. package/.next/server/app/dashboard/settings/pricing.rsc +5 -5
  119. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  120. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  121. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +5 -5
  122. package/.next/server/app/dashboard/token-saver.html +1 -1
  123. package/.next/server/app/dashboard/token-saver.rsc +6 -6
  124. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +6 -6
  125. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  126. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  127. package/.next/server/app/dashboard/usage.html +2 -2
  128. package/.next/server/app/dashboard/usage.rsc +7 -7
  129. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +7 -7
  130. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  131. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  132. package/.next/server/app/dashboard.html +1 -1
  133. package/.next/server/app/dashboard.rsc +8 -8
  134. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +7 -7
  135. package/.next/server/app/dashboard.segments/_full.segment.rsc +8 -8
  136. package/.next/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  137. package/.next/server/app/index.html +1 -1
  138. package/.next/server/app/index.rsc +5 -5
  139. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  140. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  141. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  142. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  143. package/.next/server/app/landing.html +1 -1
  144. package/.next/server/app/landing.rsc +5 -5
  145. package/.next/server/app/landing.segments/_full.segment.rsc +5 -5
  146. package/.next/server/app/landing.segments/_tree.segment.rsc +1 -1
  147. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +5 -5
  148. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  149. package/.next/server/app/login.html +1 -1
  150. package/.next/server/app/login.rsc +5 -5
  151. package/.next/server/app/login.segments/_full.segment.rsc +5 -5
  152. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  153. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +5 -5
  154. package/.next/server/app/page_client-reference-manifest.js +1 -1
  155. package/.next/server/app-paths-manifest.json +5 -5
  156. package/.next/server/chunks/1011.js +1 -1
  157. package/.next/server/chunks/1194.js +1 -1
  158. package/.next/server/chunks/1289.js +1 -1
  159. package/.next/server/chunks/1633.js +1 -1
  160. package/.next/server/chunks/2282.js +7 -7
  161. package/.next/server/chunks/2339.js +1 -1
  162. package/.next/server/chunks/2801.js +1 -1
  163. package/.next/server/chunks/3425.js +1 -1
  164. package/.next/server/chunks/537.js +5 -1
  165. package/.next/server/chunks/6056.js +1 -1
  166. package/.next/server/chunks/6343.js +6 -6
  167. package/.next/server/chunks/9429.js +1 -1
  168. package/.next/server/middleware-build-manifest.js +1 -1
  169. package/.next/server/pages/404.html +1 -1
  170. package/.next/server/pages/500.html +1 -1
  171. package/.next/server/server-reference-manifest.js +1 -1
  172. package/.next/server/server-reference-manifest.json +1 -1
  173. package/.next/static/chunks/1278-16cc8ebc3a4c8af5.js +1 -0
  174. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/{page-bf251f657ba991f0.js → page-30d1f039dfdca294.js} +1 -1
  175. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-bedeed81041d8f79.js → page-fc4d1c1291545177.js} +1 -1
  176. package/.next/static/chunks/app/{layout-6cb42d6935f83cc9.js → layout-43bf918527d2f137.js} +1 -1
  177. package/CHANGELOG.md +66 -0
  178. package/next.config.mjs +5 -0
  179. package/open-sse/executors/opencode-zen.js +38 -98
  180. package/open-sse/executors/opencode.js +41 -198
  181. package/open-sse/handlers/chatCore/nonStreamingHandler.js +2 -1
  182. package/open-sse/handlers/chatCore/sseToJsonHandler.js +5 -3
  183. package/open-sse/handlers/chatCore.js +6 -0
  184. package/open-sse/translator/index.js +6 -2
  185. package/open-sse/utils/opencodeFingerprint.js +385 -0
  186. package/package.json +2 -1
  187. package/src/app/api/changelog/{route.js → route.ts} +2 -1
  188. package/src/app/api/version/route.js +1 -1
  189. package/src/lib/versionCheck.js +18 -16
  190. package/src/shared/components/UpdateDialog.tsx +1 -1
  191. package/.next/static/chunks/1278-846112734a0f5e55.js +0 -1
  192. /package/.next/static/{lLaVjv9m3OfeP2eGEVKC1 → kcbgqbQp7PqJfusgfYenC}/_buildManifest.js +0 -0
  193. /package/.next/static/{lLaVjv9m3OfeP2eGEVKC1 → kcbgqbQp7PqJfusgfYenC}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1278],{738:(e,t,a)=>{a.d(t,{A:()=>n});var r=a(29798),s=a(15814),i=a(63729);function n({src:e,providerId:t,alt:a,size:o=32,className:l="",fallbackText:d="?",fallbackColor:c}){let u=function(e,t){if(t)return(0,i.HY)(t);if(!e)return null;let a=String(e).match(/^\/providers\/([^/]+)\.png$/i);return a?(0,i.HY)(a[1]):e}(e,t),[m,p]=(0,s.useState)(!1);return!u||m?(0,r.jsx)("span",{className:`inline-flex items-center justify-center font-bold rounded-lg ${l}`.trim(),style:{width:o,height:o,color:c,fontSize:Math.max(10,Math.floor(.38*o))},children:d}):(0,r.jsx)("img",{src:u,alt:a,width:o,height:o,className:l,loading:"lazy",decoding:"async",onError:()=>{let e=u.match(/^\/providers\/([^/]+)\.png$/i);e&&(0,i.Kw)(e[1]),t&&(0,i.Kw)(t),p(!0)}})}},3537:(e,t,a)=>{a.d(t,{ConfirmModal:()=>u,default:()=>c});var r=a(29798),s=a(15814),i=a(69221),n=a(13008),o=a(18055),l=a(49787);let d={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"};function c({isOpen:e,onClose:t,title:a,children:i,footer:o,size:u="md",closeOnOverlay:m=!0,className:p}){return(0,s.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,r.jsx)(l.lG,{open:!!e,onOpenChange:e=>{e||t()},children:(0,r.jsxs)(l.Cf,{className:(0,n.cn)(d[u],p),onPointerDownOutside:m?void 0:e=>e.preventDefault(),onInteractOutside:m?void 0:e=>e.preventDefault(),children:[a&&(0,r.jsx)(l.c7,{children:(0,r.jsx)(l.L3,{children:a})}),(0,r.jsx)("div",{className:"max-h-[calc(85vh-100px)] overflow-y-auto p-4",children:i}),o&&(0,r.jsx)(l.Es,{children:o})]})})}function u({isOpen:e,onClose:t,onConfirm:a,title:s="Confirm",message:n,confirmText:l="Confirm",cancelText:d="Cancel",variant:m="danger",loading:p=!1}){return(0,r.jsx)(c,{isOpen:e,onClose:t,title:s,size:"sm",footer:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.$,{variant:"ghost",onClick:t,disabled:p,children:d}),(0,r.jsxs)(o.$,{variant:"danger"===m?"destructive":"primary"===m?"default":m,onClick:a,disabled:p,children:[p&&(0,r.jsx)(i.A,{className:"animate-spin"}),l]})]}),children:(0,r.jsx)("p",{className:"text-muted-foreground",children:n})})}},13008:(e,t,a)=>{a.d(t,{cn:()=>s});var r=a(5471);function s(...e){return(0,r.cn)(...e)}},16675:(e,t,a)=>{a.d(t,{default:()=>em});var r=a(29798),s=a(58913),i=a(70782),n=a(41671),o=a(42535),l=a(15814),d=a(16653),c=a(50141),u=a.n(c),m=a(51660),p=a(1352),x=a(69221),h=a(53784),f=a(18055),g=a(75669),b=a(49787),v=a(63523),j=a(63175);let w=["docker compose pull","docker compose up -d"],y=["docker pull ghcr.io/amir83nasr/10router:latest","docker stop 10router && docker rm 10router",'docker run -d --name 10router -p 20128:20128 -v "$HOME/.10router:/app/data" -e DATA_DIR=/app/data ghcr.io/amir83nasr/10router:latest'],k=["git pull","pnpm install","pnpm run build && PORT=20128 pnpm run start"];function N({id:e,steps:t}){let{copied:a,copy:i}=(0,v.C)();return(0,r.jsx)("ol",{className:"flex flex-col gap-1.5",children:t.map((t,n)=>{let o=`${e}-${n}`,l=a===o;return(0,r.jsxs)("li",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center rounded-full bg-muted text-[11px] font-medium text-muted-foreground",children:n+1}),(0,r.jsx)("code",{className:"min-w-0 flex-1 rounded bg-muted px-2 py-1 font-mono text-xs break-all",children:t}),(0,r.jsx)(f.$,{variant:"ghost",size:"icon-xs",onClick:()=>i(t,o),"aria-label":`Copy step ${n+1}: ${t}`,children:(0,r.jsx)(s.default,{name:l?"check":"content_copy",className:"size-3.5"})})]},o)})})}function C({title:e,icon:t,id:a,steps:i}){return(0,r.jsxs)("details",{className:"group rounded-lg border border-border",children:[(0,r.jsxs)("summary",{className:"flex cursor-pointer list-none items-center gap-2 px-3 py-2 text-sm font-medium text-foreground [&::-webkit-details-marker]:hidden",children:[(0,r.jsx)(s.default,{name:t,className:"size-4 shrink-0 text-muted-foreground"}),(0,r.jsx)("span",{className:"flex-1",children:e}),(0,r.jsx)(s.default,{name:"expand_more",className:"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180"})]}),(0,r.jsx)("div",{className:"px-3 py-2",children:(0,r.jsx)(N,{id:a,steps:i})})]})}function _(){return(0,r.jsxs)("details",{className:"group flex flex-col gap-2 rounded-lg border border-border p-3",children:[(0,r.jsxs)("summary",{className:"flex cursor-pointer list-none items-center gap-2 text-sm font-medium text-foreground [&::-webkit-details-marker]:hidden",children:[(0,r.jsx)(s.default,{name:"terminal",className:"size-4 shrink-0 text-muted-foreground"}),(0,r.jsx)("span",{className:"flex-1",children:"Other install methods"}),(0,r.jsx)(s.default,{name:"expand_more",className:"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-2 py-2",children:[(0,r.jsx)(C,{title:"Docker Compose",icon:"lan",id:"compose",steps:w}),(0,r.jsx)(C,{title:"Plain Docker run",icon:"dns",id:"docker",steps:y}),(0,r.jsx)(C,{title:"From source",icon:"code",id:"source",steps:k})]})]})}function S(){let{copied:e,copy:t}=(0,v.C)(),a=(0,j.c)(),i="npm i -g @amir83nasr/10router@latest",n="npm-0",o=e===n;return(0,r.jsxs)(g.Zp,{size:"sm",className:"border-primary/30 bg-primary/5",children:[(0,r.jsx)(g.aR,{children:(0,r.jsxs)(g.ZB,{className:"flex items-center gap-2",children:[(0,r.jsx)(s.default,{name:"upload",className:"size-4 shrink-0 text-primary"}),"npm ",(0,r.jsx)(h.E,{variant:"default",children:"recommended"})]})}),(0,r.jsxs)(g.Wu,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm",children:[(0,r.jsx)("code",{className:"min-w-0 flex-1 rounded bg-muted px-2 py-1 font-mono text-xs break-all",children:i}),(0,r.jsx)(f.$,{variant:"ghost",size:"icon-xs",onClick:()=>t(i,n),"aria-label":`Copy: ${i}`,children:(0,r.jsx)(s.default,{name:o?"check":"content_copy",className:"size-3.5"})})]}),o&&!a.stopped&&!a.timedOut&&(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Copied. Stop the server, paste the command in your terminal, then run"," ",(0,r.jsx)("code",{className:"rounded bg-muted px-1 font-mono",children:"10router start"}),"."]}),(0,r.jsxs)(f.$,{variant:"destructive",size:"sm",className:"self-start",onClick:a.confirm,disabled:a.shuttingDown,children:[a.shuttingDown?(0,r.jsx)(x.A,{className:"animate-spin"}):(0,r.jsx)(s.default,{name:"power_settings_new",className:"size-4"}),a.shuttingDown?"Stopping…":"Stop server"]})]}),a.stopped&&(0,r.jsxs)("p",{className:"rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-xs text-green-600 dark:text-green-400",children:["Server stopped — run the copied command in your terminal, then"," ",(0,r.jsx)("code",{className:"font-mono",children:"10router start"}),"."]}),a.timedOut&&(0,r.jsxs)("p",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs text-amber-600 dark:text-amber-400",children:["The server did not stop in time — stop it manually (",(0,r.jsx)("code",{className:"font-mono",children:"10router stop"}),"), then run the copied command."]})]})]})}function z({open:e,onOpenChange:t,info:a,checkFailed:i,onRetry:n}){let o=a?a.hasUpdate?(0,r.jsxs)("p",{className:"rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-600 dark:text-amber-400",children:["New version v",a.latestVersion," available (you run v",a.currentVersion,"). npm is the fastest way — or run the steps for your install method, in order:"]}):(0,r.jsxs)("p",{className:"rounded-lg border border-green-500/30 bg-green-500/10 px-3 py-2 text-sm text-green-600 dark:text-green-400",children:["Up to date — v",a.currentVersion," is the latest."]}):(0,r.jsx)("p",{className:"rounded-lg border border-border bg-muted/50 px-3 py-2 text-sm text-muted-foreground",children:i?"Could not reach npm registry to check for updates — the manual steps below still work.":"Checking for updates…"});return(0,r.jsx)(b.lG,{open:e,onOpenChange:t,children:(0,r.jsxs)(b.Cf,{className:"sm:max-w-lg",children:[(0,r.jsxs)(b.c7,{children:[(0,r.jsx)(b.L3,{children:"Updates"}),(0,r.jsx)(b.rr,{children:a?`Current v${a.currentVersion} \xb7 latest v${a.latestVersion}`:"Compare your version against the latest release"})]}),(0,r.jsxs)("div",{className:"flex max-h-[70vh] flex-col gap-4 overflow-y-auto p-4",children:[o,(0,r.jsx)(S,{}),(0,r.jsx)(_,{})]}),(0,r.jsxs)(b.Es,{children:[(0,r.jsxs)(f.$,{variant:"ghost",onClick:n,children:[(0,r.jsx)(s.default,{name:"refresh",className:"size-4"}),"Check again"]}),(0,r.jsx)(f.$,{variant:"outline",onClick:()=>t(!1),children:"Close"})]})]})})}var O=a(13008);function A({collapsed:e}){let[t,a]=(0,l.useState)(null),[i,n]=(0,l.useState)(!1),[o,d]=(0,l.useState)(!1),c=(0,l.useCallback)(async()=>{try{let e=await fetch("/api/version",{cache:"no-store"});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();a({currentVersion:t?.currentVersion??m.vQ.version,latestVersion:t?.latestVersion??m.vQ.version,hasUpdate:!!t?.hasUpdate}),n(!1)}catch{n(!0)}},[]);(0,l.useEffect)(()=>{c();let e=setInterval(c,18e5);return()=>clearInterval(e)},[c]);let u=t?.hasUpdate??!1,x=u?`v${t?.latestVersion} available`:t?`v${t.currentVersion} \xb7 up to date`:`v${m.vQ.version}`,h=e?(0,r.jsxs)(p.m_,{children:[(0,r.jsx)(p.k$,{asChild:!0,children:u?(0,r.jsxs)("button",{type:"button",onClick:()=>d(!0),"aria-label":`Update available. ${x}`,className:"relative mx-auto flex size-8 items-center justify-center rounded-md bg-amber-500/15 text-amber-600 transition-colors hover:bg-amber-500/25 dark:text-amber-400",children:[(0,r.jsx)(s.default,{name:"download",className:"size-4"}),(0,r.jsx)("span",{className:"absolute right-1.5 top-1.5 size-1.5 rounded-full bg-amber-500"})]}):(0,r.jsx)("span",{className:"mx-auto flex size-8 items-center justify-center rounded-md text-muted-foreground",children:(0,r.jsx)(s.default,{name:"refresh",className:"size-4"})})}),(0,r.jsx)(p.ZI,{children:u?`${x} — click to update`:x})]}):u?(0,r.jsxs)("button",{type:"button",onClick:()=>d(!0),className:"flex w-full items-center gap-2 rounded-md bg-amber-500/15 px-1 py-1 text-left transition-colors hover:bg-amber-500/25","aria-label":`Update available. ${x}`,children:[(0,r.jsxs)("span",{className:"relative flex shrink-0 items-center text-muted-foreground",children:[(0,r.jsx)(s.default,{name:"download",className:"size-4"}),(0,r.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-1.5 rounded-full bg-amber-500"})]}),(0,r.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("span",{className:"block truncate text-[11px] text-muted-foreground",children:[m.vQ.name," v",t?.currentVersion??m.vQ.version]}),(0,r.jsx)("span",{className:"block truncate text-[11px] font-medium text-amber-600 dark:text-amber-400",children:x})]}),(0,r.jsx)(s.default,{name:"chevron_right",className:"size-3.5 shrink-0 text-muted-foreground"})]}):(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 rounded-md px-1 py-1 text-left",children:[(0,r.jsx)("span",{className:"flex shrink-0 items-center text-muted-foreground",children:(0,r.jsx)(s.default,{name:"refresh",className:"size-4"})}),(0,r.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,r.jsxs)("span",{className:"block truncate text-[11px] text-muted-foreground",children:[m.vQ.name," v",t?.currentVersion??m.vQ.version]}),(0,r.jsx)("span",{className:(0,O.cn)("block truncate text-[11px] font-medium",i||!t?"text-muted-foreground":"text-green-600 dark:text-green-400"),children:x})]})]});return(0,r.jsxs)(r.Fragment,{children:[h,(0,r.jsx)(z,{open:o&&u,onOpenChange:d,info:t,checkFailed:i,onRetry:c})]})}var L=a(54366),E=a(5471),T=a(80954);a(77345);var P=a(73639);function I({className:e,orientation:t="horizontal",decorative:a=!0,...s}){return(0,r.jsx)(P.b,{"data-slot":"separator",decorative:a,orientation:t,className:(0,E.cn)("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",e),...s})}var $=a(69260),M=a(6403);function D({...e}){return(0,r.jsx)($.bL,{"data-slot":"sheet",...e})}function U({...e}){return(0,r.jsx)($.ZL,{"data-slot":"sheet-portal",...e})}function R({className:e,...t}){return(0,r.jsx)($.hJ,{"data-slot":"sheet-overlay",className:(0,E.cn)("fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",e),...t})}function F({className:e,children:t,side:a="right",showCloseButton:s=!0,...i}){return(0,r.jsxs)(U,{children:[(0,r.jsx)(R,{}),(0,r.jsxs)($.UC,{"data-slot":"sheet-content","data-side":a,className:(0,E.cn)("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",e),...i,children:[t,s&&(0,r.jsx)($.bm,{"data-slot":"sheet-close",asChild:!0,children:(0,r.jsxs)(f.$,{variant:"ghost",className:"absolute top-4 right-4",size:"icon-sm",children:[(0,r.jsx)(M.A,{}),(0,r.jsx)("span",{className:"sr-only",children:"Close"})]})})]})]})}function H({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"sheet-header",className:(0,E.cn)("flex flex-col gap-1.5 p-4",e),...t})}function B({className:e,...t}){return(0,r.jsx)($.hE,{"data-slot":"sheet-title",className:(0,E.cn)("font-heading font-medium text-foreground",e),...t})}function V({className:e,...t}){return(0,r.jsx)($.VY,{"data-slot":"sheet-description",className:(0,E.cn)("text-sm text-muted-foreground",e),...t})}a(99118);let q=l.createContext(null);function Q(){let e=l.useContext(q);if(!e)throw Error("useSidebar must be used within a SidebarProvider.");return e}function K({defaultOpen:e=!0,open:t,onOpenChange:a,className:s,style:i,children:n,...o}){let d=function(){let[e,t]=l.useState(void 0);return l.useEffect(()=>{let e=window.matchMedia("(max-width: 767px)"),a=()=>{t(window.innerWidth<768)};return e.addEventListener("change",a),t(window.innerWidth<768),()=>e.removeEventListener("change",a)},[]),!!e}(),[c,u]=l.useState(!1),[m,p]=l.useState(e),x=t??m,h=l.useCallback(e=>{let t="function"==typeof e?e(x):e;a?a(t):p(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[a,x]),f=l.useCallback(()=>d?u(e=>!e):h(e=>!e),[d,h,u]);l.useEffect(()=>{let e=e=>{"b"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),f())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[f]);let g=x?"expanded":"collapsed",b=l.useMemo(()=>({state:g,open:x,setOpen:h,isMobile:d,openMobile:c,setOpenMobile:u,toggleSidebar:f}),[g,x,h,d,c,u,f]);return(0,r.jsx)(q.Provider,{value:b,children:(0,r.jsx)("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":"16rem","--sidebar-width-icon":"3rem",...i},className:(0,E.cn)("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",s),...o,children:n})})}function W({side:e="left",variant:t="sidebar",collapsible:a="offcanvas",className:s,children:i,dir:n,...o}){let{isMobile:l,state:d,openMobile:c,setOpenMobile:u}=Q();return"none"===a?(0,r.jsx)("div",{"data-slot":"sidebar",className:(0,E.cn)("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",s),...o,children:i}):l?(0,r.jsx)(D,{open:c,onOpenChange:u,...o,children:(0,r.jsxs)(F,{dir:n,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":"18rem"},side:e,children:[(0,r.jsxs)(H,{className:"sr-only",children:[(0,r.jsx)(B,{children:"Sidebar"}),(0,r.jsx)(V,{children:"Displays the mobile sidebar."})]}),(0,r.jsx)("div",{className:"flex h-full w-full flex-col",children:i})]})}):(0,r.jsxs)("div",{className:"group peer hidden text-sidebar-foreground md:block","data-state":d,"data-collapsible":"collapsed"===d?a:"","data-variant":t,"data-side":e,"data-slot":"sidebar",children:[(0,r.jsx)("div",{"data-slot":"sidebar-gap",className:(0,E.cn)("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===t||"inset"===t?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,r.jsx)("div",{"data-slot":"sidebar-container","data-side":e,className:(0,E.cn)("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex","floating"===t||"inset"===t?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",s),...o,children:(0,r.jsx)("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"flex size-full min-w-0 flex-col overflow-x-hidden bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",children:i})})]})}function Z({className:e,...t}){return(0,r.jsx)("main",{"data-slot":"sidebar-inset",className:(0,E.cn)("relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",e),...t})}function G({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:(0,E.cn)("flex flex-col gap-2 p-2",e),...t})}function Y({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"sidebar-footer","data-sidebar":"footer",className:(0,E.cn)("flex flex-col gap-2 p-2",e),...t})}function X({className:e,...t}){return(0,r.jsx)(I,{"data-slot":"sidebar-separator","data-sidebar":"separator",className:(0,E.cn)("mx-2 w-auto bg-sidebar-border",e),...t})}function J({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:(0,E.cn)("flex min-h-0 w-full min-w-0 flex-1 flex-col gap-2 overflow-x-hidden overflow-y-auto group-data-[collapsible=icon]:overflow-hidden",e),...t})}function ee({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:(0,E.cn)("relative flex w-full min-w-0 flex-col p-2",e),...t})}function et({className:e,asChild:t=!1,...a}){let s=t?T.bL:"div";return(0,r.jsx)(s,{"data-slot":"sidebar-group-label","data-sidebar":"group-label",className:(0,E.cn)("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",e),...a})}function ea({className:e,...t}){return(0,r.jsx)("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:(0,E.cn)("flex w-full min-w-0 flex-col gap-1",e),...t})}function er({className:e,...t}){return(0,r.jsx)("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:(0,E.cn)("group/menu-item relative",e),...t})}let es=(0,L.F)("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function ei({asChild:e=!1,isActive:t=!1,variant:a="default",size:s="default",tooltip:i,className:n,...o}){let l=e?T.bL:"button",{isMobile:d,state:c}=Q(),u=(0,r.jsx)(l,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":s,"data-active":t,className:(0,E.cn)(es({variant:a,size:s}),n),...o});return i?("string"==typeof i&&(i={children:i}),(0,r.jsxs)(p.m_,{children:[(0,r.jsx)(p.k$,{asChild:!0,children:u}),(0,r.jsx)(p.ZI,{side:"right",align:"center",hidden:"collapsed"!==c||d,...i})]})):u}let en=[{id:"endpoint",href:"/dashboard",label:"Endpoint & Key",icon:"api",match:e=>"/dashboard"===e||e.startsWith("/dashboard/endpoint")},{id:"providers",href:"/dashboard/providers",label:"Providers",icon:"dns"},{id:"combos",href:"/dashboard/combos",label:"Combo",icon:"layers"},{id:"usage",href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{id:"token-saver",href:"/dashboard/token-saver",label:"Token Saver",icon:"scissors"},{id:"cli-tools",href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"},{id:"systemone",href:"/dashboard/media-providers/systemone",label:"System One",icon:"bolt"}],eo=[{id:"proxy-pools",href:"/dashboard/proxy-pools",label:"Proxy Pools",icon:"waypoints"}],el=[{id:"profile",href:"/dashboard/profile",label:"Settings",icon:"settings"}];function ed({item:e}){var t;let a=(t=(0,i.usePathname)(),e.match?e.match(t):"/dashboard/profile"===e.href?"/dashboard/profile"===t:t.startsWith(e.href));return(0,r.jsx)(er,{children:(0,r.jsx)(ei,{asChild:!0,isActive:a,children:(0,r.jsxs)(u(),{href:e.href,className:"gap-3",children:[(0,r.jsx)(s.default,{name:e.icon,className:"text-[18px]"}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label})]})})})}function ec({...e}){(0,i.usePathname)();let{state:t}=Q(),a="collapsed"===t;return(0,r.jsxs)(W,{...e,children:[(0,r.jsx)(G,{className:"h-20 justify-center border-b border-sidebar-border px-4",children:(0,r.jsxs)(u(),{href:"/dashboard",className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)(d.default,{src:"/icons/icon.svg",alt:"10Router logo",width:36,height:36,className:"size-9 rounded-[10px] shrink-0"}),!a&&(0,r.jsxs)("div",{className:"flex min-w-0 flex-col leading-tight",children:[(0,r.jsx)("span",{className:"truncate text-lg font-semibold tracking-tight text-foreground",children:m.vQ.name}),(0,r.jsxs)("span",{className:"truncate text-xs text-muted-foreground",children:["v",m.vQ.version]})]})]})}),(0,r.jsxs)(J,{className:"pt-2",children:[(0,r.jsxs)(ee,{children:[(0,r.jsx)(et,{children:"Overview"}),(0,r.jsx)(ea,{children:en.map(e=>(0,r.jsx)(ed,{item:e},e.id))})]}),(0,r.jsx)(X,{}),(0,r.jsxs)(ee,{children:[(0,r.jsx)(et,{children:"System"}),(0,r.jsxs)(ea,{children:[eo.map(e=>(0,r.jsx)(ed,{item:e},e.id)),el.map(e=>(0,r.jsx)(ed,{item:e},e.id))]})]})]}),(0,r.jsx)(Y,{className:"border-t border-sidebar-border p-4",children:(0,r.jsx)(A,{collapsed:a})})]})}function eu({children:e}){let t=(0,i.usePathname)(),a=(0,n.i)(e=>e.notifications),l=(0,n.i)(e=>e.removeNotification),{toggleSidebar:d}=Q();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"fixed top-4 right-4 z-[80] flex w-[min(92vw,380px)] flex-col gap-2",children:a.map(e=>{var t;let a="success"===(t=e.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===t?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===t?{wrapper:"border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400",icon:"warning"}:{wrapper:"border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400",icon:"info"};return(0,r.jsx)("div",{className:`rounded-lg border px-3 py-2 shadow-lg backdrop-blur-sm ${a.wrapper}`,children:(0,r.jsxs)("div",{className:"flex items-start gap-2",children:[(0,r.jsx)(s.default,{name:a.icon,className:"text-[18px] leading-5"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[e.title?(0,r.jsx)("p",{className:"text-xs font-semibold mb-0.5",children:e.title}):null,(0,r.jsx)("p",{className:"text-xs whitespace-pre-wrap break-words",children:e.message})]}),e.dismissible?(0,r.jsx)("button",{type:"button",onClick:()=>l(e.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,r.jsx)(s.default,{name:"close",className:"text-[16px]"})}):null]})},e.id)})}),(0,r.jsx)(ec,{}),(0,r.jsxs)(Z,{className:"flex flex-col h-full min-w-0 relative transition-colors duration-300 isolate",children:[(0,r.jsx)(o.default,{onMenuClick:d},t),(0,r.jsx)("div",{className:`dashboard-grid-bg flex-1 overflow-y-auto ${"/dashboard/basic-chat"===t?"":"p-6 lg:p-10"} ${"/dashboard/basic-chat"===t?"flex flex-col overflow-hidden":""}`,children:(0,r.jsx)("div",{className:`${"/dashboard/basic-chat"===t?"flex-1 w-full h-full flex flex-col":"max-w-7xl mx-auto"}`,children:e})})]})]})}function em({children:e}){return(0,r.jsx)(K,{children:(0,r.jsx)("div",{className:"flex h-screen w-full overflow-hidden bg-background",children:(0,r.jsx)(eu,{children:e})})})}},29575:(e,t,a)=>{a.d(t,{CardGrid:()=>p,Page:()=>c,PageHeader:()=>u,Section:()=>m});var r=a(29798),s=a(50141),i=a.n(s),n=a(13008),o=a(18055),l=a(58913);let d={default:"",narrow:"mx-auto w-full max-w-2xl",wide:"mx-auto w-full max-w-5xl"};function c({children:e,width:t="default",className:a}){return(0,r.jsx)("div",{className:(0,n.cn)("flex min-w-0 flex-col gap-6",d[t],a),children:e})}function u({title:e,description:t,actions:a,backHref:s,backLabel:d,className:c}){let m=null!=a;return(0,r.jsxs)("div",{className:(0,n.cn)(c),children:[s?(0,r.jsx)(o.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4 self-start",children:(0,r.jsxs)(i(),{href:s,children:[(0,r.jsx)(l.default,{name:"arrow_back",className:"text-lg"}),d??"Back"]})}):null,(0,r.jsxs)("div",{className:(0,n.cn)("flex flex-col gap-3",m&&"sm:flex-row sm:items-center sm:justify-between"),children:[(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("h1",{className:"text-2xl font-semibold tracking-tight sm:text-3xl",children:e}),t?(0,r.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:t}):null]}),m?(0,r.jsx)("div",{className:"grid shrink-0 grid-cols-1 gap-2 sm:flex sm:items-center",children:a}):null]})]})}function m({title:e,actions:t,children:a,className:s}){let i=void 0!==e||void 0!==t;return(0,r.jsxs)("section",{className:(0,n.cn)("flex min-w-0 flex-col gap-4",s),children:[i?(0,r.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e?(0,r.jsx)("h2",{className:"text-lg font-semibold leading-tight sm:text-xl",children:e}):(0,r.jsx)("span",{}),t?(0,r.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:w-auto sm:items-center",children:t}):null]}):null,a]})}function p({children:e,variant:t="cards",className:a}){return(0,r.jsx)("div",{className:(0,n.cn)("grid min-w-0 grid-cols-1 gap-3 sm:gap-4","cards"===t&&"sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","stat"===t&&"sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",a),children:e})}},41671:(e,t,a)=>{a.d(t,{i:()=>i});var r=a(58013);let s=0,i=(0,r.v)((e,t)=>({notifications:[],addNotification:a=>{let r=++s,i={id:r,type:a.type||"info",message:a.message,title:a.title||null,duration:a.duration??5e3,dismissible:a.dismissible??!0,createdAt:Date.now()};return e(e=>({notifications:[...e.notifications,i]})),i.duration>0&&setTimeout(()=>t().removeNotification(r),i.duration),r},removeNotification:t=>{e(e=>({notifications:e.notifications.filter(e=>e.id!==t)}))},clearAll:()=>e({notifications:[]}),success:(e,a)=>t().addNotification({type:"success",message:e,title:a}),error:(e,a)=>t().addNotification({type:"error",message:e,title:a,duration:8e3}),warning:(e,a)=>t().addNotification({type:"warning",message:e,title:a}),info:(e,a)=>t().addNotification({type:"info",message:e,title:a})}))},42535:(e,t,a)=>{a.d(t,{default:()=>w});var r=a(29798),s=a(58913),i=a(15814),n=a(70782),o=a(50141),l=a.n(o),d=a(738),c=a(56776);let u=(0,a(58013).v)(e=>({query:"",placeholder:"",visible:!1,setQuery:t=>e({query:t}),register:(t="Search...")=>e({visible:!0,placeholder:t,query:""}),unregister:()=>e({visible:!1,placeholder:"",query:""})}));var m=a(51660),p=a(13794),x=a(90046),h=a(63729),f=a(51780),g=a(53784),b=a(18055),v=a(77345),j=a(1352);function w({onMenuClick:e,showMenuButton:t=!0}){let a=(0,n.usePathname)(),[o,u]=(0,i.useState)(""),[b,v]=(0,i.useState)(""),{title:k,description:N,icon:C,breadcrumbs:_}=(0,i.useMemo)(()=>(e=>{if(!e)return{title:"",description:"",breadcrumbs:[]};let t=e.match(/\/providers\/([^/]+)$/);if(t){let e=t[1],a=m.zN[e]||m.fg[e];if(a)return{title:a.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:a.name,image:(0,h.HY)(a.id)}]}}let a=e.match(/\/media-providers\/systemone\/([^/]+)$/);if(a){let e=decodeURIComponent(a[1]),t=p.Q2[e]||Object.values(p.Q2).find(t=>t.alias===e);if(t)return{title:t.name,description:"",breadcrumbs:[{label:"System One",href:"/dashboard/media-providers/systemone"},{label:t.name,image:(0,h.HY)(t.id)}]}}let r=e.match(/\/cli-tools\/([^/]+)$/);if(r){let e=decodeURIComponent(r[1]),t=x.d[e];if(t)return{title:t.name,description:"",breadcrumbs:[{label:"CLI Tools",href:"/dashboard/cli-tools"},{label:t.name,image:t.image}]}}return e.includes("/media-providers/systemone")?{title:"System One",description:"Decision models — native POST /v1/systemone endpoint",icon:"bolt",breadcrumbs:[]}:e.includes("/providers")?{title:"Providers",description:"Manage your AI provider connections",icon:"dns",breadcrumbs:[]}:e.includes("/combos")?{title:"Combos",description:"Model combos with fallback",icon:"layers",breadcrumbs:[]}:e.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",icon:"bar_chart",breadcrumbs:[]}:e.includes("/auth-files")?{title:"Auth Files",description:"Map provider credentials stored in the local database",icon:"vpn_key",breadcrumbs:[]}:e.includes("/quota")?{title:"Quota Tracker",description:"Track and manage your API quota limits",icon:"data_usage",breadcrumbs:[]}:e.includes("/token-saver")?{title:"Token Saver",description:"Compress prompts and outputs to save tokens",icon:"scissors",breadcrumbs:[]}:e.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",icon:"terminal",breadcrumbs:[]}:e.includes("/proxy-pools")?{title:"Proxy Pools",description:"Manage your proxy pool configurations",icon:"waypoints",breadcrumbs:[]}:e.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:e.includes("/profile")?{title:"Settings",description:"Manage your preferences",icon:"settings",breadcrumbs:[]}:e.includes("/console-log")?{title:"Console Log",description:"Live server console output",icon:"monitor",breadcrumbs:[]}:"/dashboard"===e?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(a),[a]);(0,i.useEffect)(()=>{let e=!1;return async function(){try{let t=await fetch("/api/auth/status",{cache:"no-store"});if(!t.ok)return;let a=await t.json();e||(u(a?.displayName||a?.samlName||a?.samlEmail||a?.oidcName||a?.oidcEmail||""),v(a?.loginMethod||""))}catch{e||(u(""),v(""))}}(),()=>{e=!0}},[]);let S=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&window.location.assign("/login")}catch(e){console.error("Failed to logout:",e)}};return(0,r.jsxs)("header",{className:"sticky top-0 flex h-20 shrink-0 items-center justify-between gap-3 px-4 lg:px-8 border-b border-border bg-card/60 backdrop-blur-xl lg:bg-transparent lg:backdrop-blur-none z-20",children:[(0,r.jsx)("div",{className:"flex items-center gap-3 lg:hidden shrink-0",children:t&&(0,r.jsx)("button",{onClick:e,className:"text-foreground hover:text-primary transition-colors",children:(0,r.jsx)(s.default,{name:"menu",className:""})})}),(0,r.jsx)("div",{className:"flex flex-col min-w-0 flex-1",children:_.length>0?(0,r.jsx)("div",{className:"flex items-center gap-2",children:_.map((e,t)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[t>0&&(0,r.jsx)(s.default,{name:"chevron_right",className:"text-muted-foreground text-base"}),e.href?(0,r.jsx)(l(),{href:e.href,className:"text-muted-foreground hover:text-primary transition-colors",children:e.label}):(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[e.image&&(0,r.jsx)(d.A,{src:e.image,alt:e.label,size:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",fallbackText:e.label.slice(0,2).toUpperCase()}),(0,r.jsx)("h1",{className:"text-base lg:text-2xl font-semibold text-foreground tracking-tight truncate",children:(0,f.Tl)(e.label)})]})]},`${e.label}-${e.href||"current"}`))}):k?(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[C&&(0,r.jsx)(s.default,{name:C,className:"text-primary text-xl lg:text-2xl"}),(0,r.jsx)("h1",{className:"text-base lg:text-2xl font-semibold tracking-tight truncate",children:(0,f.Tl)(k)})]}),N&&(0,r.jsx)("p",{className:"hidden lg:block text-sm text-muted-foreground truncate",children:(0,f.Tl)(N)})]}):null}),(0,r.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[o&&("OIDC"===b||"SAML"===b)&&(0,r.jsxs)(j.m_,{children:[(0,r.jsx)(j.k$,{asChild:!0,children:(0,r.jsxs)(g.E,{variant:"secondary",className:"hidden max-w-55 sm:inline-flex",children:[(0,r.jsx)(s.default,{name:"person",className:"size-3.5 text-primary"}),(0,r.jsx)("span",{className:"truncate",children:o}),(0,r.jsx)("span",{className:"shrink-0 rounded-full bg-primary/10 px-1.5 py-px text-[10px] font-semibold uppercase tracking-wide text-primary",children:b})]})}),(0,r.jsx)(j.ZI,{children:o})]}),(0,r.jsx)(y,{}),(0,r.jsx)(c.default,{onLogout:S})]})]})}function y(){let e=u(e=>e.visible),t=u(e=>e.query),a=u(e=>e.placeholder),i=u(e=>e.setQuery);return e?(0,r.jsxs)("div",{className:"relative w-40 sm:w-55",children:[(0,r.jsx)(s.default,{name:"search",className:"absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground size-4 pointer-events-none"}),(0,r.jsx)(v.p,{type:"text",value:t,onChange:e=>i(e.target.value),placeholder:a,className:"h-8 pl-7 pr-7"}),t&&(0,r.jsx)(b.$,{type:"button",variant:"ghost",size:"icon-xs",onClick:()=>i(""),className:"absolute right-1 top-1/2 -translate-y-1/2","aria-label":"Clear search",children:(0,r.jsx)(s.default,{name:"close",className:"size-4"})})]}):null}},51660:(e,t,a)=>{a.d(t,{Q2:()=>r.Q2,fg:()=>r.fg,vQ:()=>s,_$:()=>n,MA:()=>r.MA,UY:()=>l,Nu:()=>i,zN:()=>r.zN,B2:()=>o});var r=a(13794);a(80159);let s={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.6"},i={changelogUrl:"/api/changelog"},n=20128,o={storageKey:"theme",defaultTheme:"light"},l={maxLines:500,pollIntervalMs:1e3}},53599:(e,t,a)=>{a.d(t,{default:()=>o});var r=a(29798),s=a(69221),i=a(18055),n=a(3537);function o({isOpen:e,shuttingDown:t,stopped:a,timedOut:l,onClose:d,onConfirm:c}){let u=t&&!a&&!l;return(0,r.jsx)(n.default,{isOpen:e,onClose:d,title:a?"Server Stopped":l?"Still Running":"Close Proxy",size:"sm",closeOnOverlay:!u,footer:a||l?(0,r.jsx)(i.$,{variant:"default",onClick:d,children:"Close"}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.$,{variant:"ghost",onClick:d,disabled:u,children:"Cancel"}),(0,r.jsxs)(i.$,{variant:"destructive",onClick:c,disabled:u,children:[u&&(0,r.jsx)(s.A,{className:"animate-spin"}),u?"Stopping…":"Close"]})]}),children:(0,r.jsx)("p",{className:"text-muted-foreground",children:a?"The proxy server has stopped. You can close this tab now.":l?"The server did not stop in time. It may need a manual stop (10router stop).":"Are you sure you want to close the proxy server?"})})}},53784:(e,t,a)=>{a.d(t,{E:()=>l});var r=a(29798);a(15814);var s=a(54366),i=a(5471),n=a(80954);let o=(0,s.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function l({className:e,variant:t="default",asChild:a=!1,...s}){let d=a?n.bL:"span";return(0,r.jsx)(d,{"data-slot":"badge","data-variant":t,className:(0,i.cn)(o({variant:t}),e),...s})}},56776:(e,t,a)=>{a.d(t,{default:()=>m});var r=a(29798),s=a(58913),i=a(15814),n=a(88336),o=a(63175),l=a(53599),d=a(18055),c=a(1352),u=a(76120);function m({onLogout:e}){let[t,a]=(0,i.useState)(!1),p=(0,o.c)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(u.rI,{children:[(0,r.jsxs)(c.m_,{children:[(0,r.jsx)(c.k$,{asChild:!0,children:(0,r.jsx)(u.ty,{asChild:!0,children:(0,r.jsx)(d.$,{variant:"ghost",size:"icon","aria-label":"Settings menu",children:(0,r.jsx)(s.default,{name:"settings",className:"size-5"})})})}),(0,r.jsx)(c.ZI,{children:"Settings"})]}),(0,r.jsxs)(u.SQ,{align:"end",className:"w-60",children:[(0,r.jsx)(u.lp,{children:"System"}),(0,r.jsx)(u.mB,{}),(0,r.jsxs)(u._2,{onSelect:()=>a(!0),children:[(0,r.jsx)(s.default,{name:"history",className:"size-4 text-muted-foreground"}),"Change Log"]}),(0,r.jsx)(u.mB,{}),(0,r.jsxs)(u._2,{variant:"destructive",onSelect:()=>p.open(),children:[(0,r.jsx)(s.default,{name:"power_settings_new",className:"size-4"}),"Shutdown"]}),(0,r.jsxs)(u._2,{variant:"destructive",onSelect:()=>e(),children:[(0,r.jsx)(s.default,{name:"logout",className:"size-4"}),"Logout"]})]})]}),(0,r.jsx)(n.default,{isOpen:t,onClose:()=>a(!1)}),(0,r.jsx)(l.default,{isOpen:p.confirmOpen||p.stopped||p.timedOut,onClose:p.reset,onConfirm:p.confirm,shuttingDown:p.shuttingDown,stopped:p.stopped,timedOut:p.timedOut})]})}},58913:(e,t,a)=>{a.d(t,{default:()=>l});var r=a(29798);a(15814);var s=a(36256);let i={add:"Plus",account_circle:"CircleUser",account_tree:"GitFork",api:"Plug",apps:"LayoutGrid",arrow_back:"ArrowLeft",arrow_downward:"ArrowDown",arrow_forward:"ArrowRight",arrow_upward:"ArrowUp",attach_file:"Paperclip",bar_chart:"BarChart3",block:"Ban",bolt:"Zap",business:"Briefcase",cancel:"X",cast:"Cast",chat:"MessageSquare",check:"Check",check_circle:"CheckCircle2",checklist:"ClipboardCheck",chevron_down:"ChevronDown",chevron_left:"ChevronLeft",chevron_right:"ChevronRight",chevron_up:"ChevronUp",close:"X",cloud:"Cloud",cloud_off:"CloudOff",cloud_sync:"CloudSync",cloud_upload:"CloudUpload",code:"Code2",computer:"Monitor",content_copy:"Copy",cookie:"Cookie",dashboard:"LayoutDashboard",data_array:"Table",data_object:"Braces",data_usage:"BarChart3",dark_mode:"Moon",delete:"Trash2",devices:"MonitorSmartphone",dns:"Network",download:"Download",edit:"Pencil",error:"CircleAlert",expand_more:"ChevronDown",extension:"Blocks",file_upload:"UploadCloud",filter_alt_off:"SlidersHorizontal",folder_open:"FolderOpen",gavel:"Scale",graphic_eq:"AudioWaveform",grid_view:"Grid2X2",group:"Users",help:"CircleHelp",history:"History",hourglass_top:"Timer",hub:"Router",image:"Image",image_search:"ScanSearch",info:"Info",input:"FileInput",key:"Key",keyboard_arrow_down:"ArrowDown",keyboard_arrow_up:"ArrowUp",lan:"Layers",language:"Languages",layers:"Layers",legend_toggle:"ListTree",light_mode:"Sun",link:"Link",link_off:"Link2Off",lock:"Lock",lock_open:"LockOpen",logout:"LogOut",menu:"Menu",menu_book:"BookOpen",mic:"Mic",monitoring:"Activity",monitor:"Monitor",movie:"Clapperboard",music_note:"Music",neurology:"Brain",open_in_new:"ExternalLink",output:"FileOutput",pause_circle:"CirclePause",person:"User",play_arrow:"Play",play_circle:"CirclePlay",playlist_add:"ListPlus",power:"Power",power_off:"PowerOff",power_settings_new:"Power",progress_activity:"Loader2",psychology:"BrainCircuit",public:"Earth",qr_code_scanner:"ScanQrCode",record_voice_over:"Mic",refresh:"RefreshCw",restart_alt:"RotateCcw",restore:"RotateCcw",rocket_launch:"Rocket",route:"Route",save:"Save",savings:"PiggyBank",scatter_plot:"ScatterChart",schedule:"Clock",science:"FlaskConical",search:"Search",search_off:"SearchX",security:"ShieldCheck",send:"Send",settings:"Settings",shield:"Shield",shield_lock:"ShieldCheck",shield_with_heart:"HeartPulse",smart_toy:"Bot",star:"Star",stop:"Square",stop_circle:"CircleStop",sync:"RefreshCw",sync_alt:"RefreshCw",terminal:"Terminal",toggle_off:"ToggleLeft",toggle_on:"ToggleRight",translate:"Languages",travel_explore:"Music4",upload:"Upload",upload_file:"UploadCloud",verified:"BadgeCheck",verified_user:"ShieldCheck",visibility:"Eye",visibility_off:"EyeOff",vpn_key:"KeyRound",vpn_lock:"Lock",warning:"TriangleAlert",wifi:"Wifi",wifi_off:"WifiOff",wifi_tethering:"Wifi"};function n(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let t=e.trim().match(/^(\d+(?:\.\d+)?)px$/);if(t)return Number(t[1])}return null}function o({name:e="",className:t,style:a,...l}){let d=s[e]??s[i[e]||String(e).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join("")]??s.Circle,c=function(e=""){let t=String(e).match(/\[(\d+(?:\.\d+)?)px\]/);return t?Number(t[1]):({"text-xs":12,"text-sm":14,"text-base":16,"text-lg":18,"text-xl":20,"text-2xl":24,"text-3xl":30,"text-4xl":36})[String(e).match(/\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl)\b/)?.[0]]||null}(t)??(a&&"object"==typeof a?n(a.width)??n(a.height)??n(a.fontSize):null),u=c?{width:c,height:c}:void 0,m=String(t??"").replace(/\bmaterial-symbols-outlined\b/g,"").replace(/\bfill-1\b/g,"").replace(/\s+/g," ").trim();return(0,r.jsx)(d,{className:m,style:u?{...u,...a}:a,"aria-hidden":"true",...l})}function l({name:e,className:t,style:a}){return(0,r.jsx)(o,{name:e,className:t,style:a})}},63175:(e,t,a)=>{a.d(t,{c:()=>s});var r=a(15814);function s(){let[e,t]=(0,r.useState)(!1),[a,s]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),[o,l]=(0,r.useState)(!1),d=(0,r.useRef)([]);(0,r.useEffect)(()=>()=>d.current.forEach(clearTimeout),[]);let c=(0,r.useCallback)(async()=>{let e=Date.now()+15e3;for(;Date.now()<e;){try{if(!(await fetch("/api/health",{cache:"no-store"})).ok)break}catch{break}await new Promise(e=>{let t=setTimeout(e,1e3);d.current.push(t)})}Date.now()>=e-1e3?l(!0):n(!0)},[]),u=(0,r.useCallback)(async()=>{s(!0);try{await fetch("/api/version/shutdown",{method:"POST"})}catch{}t(!1),c()},[c]),m=(0,r.useCallback)(()=>{l(!1),n(!1),t(!0)},[]),p=(0,r.useCallback)(()=>{t(!1),s(!1),n(!1),l(!1)},[]);return(0,r.useEffect)(()=>{(i||o)&&s(!1)},[i,o]),{confirmOpen:e,shuttingDown:a,stopped:i,timedOut:o,open:m,confirm:u,reset:p}}},63729:(e,t,a)=>{a.d(t,{HY:()=>n,IM:()=>m,Kw:()=>o,uM:()=>u});let r={antigravity:"gemini","perplexity-agent":"perplexity","gitlab-duo":"gitlab","vercel-ai-gateway":"vercel","ollama-search":"ollama","opencode-zen":"opencode"},s=new Set;function i(e){return e&&"string"==typeof e?e.trim().toLowerCase():""}function n(e){let t=function(e){let t=i(e);if(!t||s.has(t))return"";let a=r[t]||t;return s.has(a)?"":a}(e);return t?`/providers/${t}.png`:null}function o(e){let t=i(e);t&&s.add(t);let a=r[t];a&&s.add(a)}let l=new Set(["www","api","apis","rest","rpc","gateway","proxy","llm","chat","v1","v2","ai","app","dev","cloud","com","net","org","io","co","us","eu","cn"]),d={generativelanguage:"gemini",googleapis:"gemini",x:"xai"},c=new Set(["agentrouter","alicode","alicode-intl","alims-intl","alitp-intl","amp","anthropic","api-airforce","assemblyai","aws-polly","azure","baidu","bazaarlink","black-forest-labs","blackbox","bluesminds","brave-search","byteplus","cartesia","cerebras","chutes","claude","clinepass","codebuddy-cn","codebuddy-intl","codex","cohere","comfyui","commandcode","continue","coqui","cursor","deepgram","deepseek","deepseek-tui","devin-cli","droid","edge-tts","elevenlabs","exa","fal-ai","featherless","firecrawl","fireworks","fish-audio","gemini","github","gitlab","glm","glm-cn","google-pse","google-tts","grok-cli","grok-web","groq","hermes","huggingface","hyperbolic","iflow","inworld","jcode","jina-ai","jina-reader","kilo-gateway","kilocode","kimchi","linkup","llm7","local-device","longcat","mimo-free","minimax","minimax-cn","mistral","mmf","morph","nanobanana","nebius","novita","nvidia","ollama","ollama-local","openai","openclaw","opencode","opencode-go","opendesign","openrouter","perplexity","perplexity-agent","perplexity-web","playht","poolside","qoder","qwen","recraft","reka","roo","runwayml","sambanova","sdwebui","searchapi","searxng","selfhosted-embedding","selfhosted-stt","selfhosted-tts","serper","siliconflow","stability-ai","tavily","tencent","together","tokenrouter","topaz","tortoise","trae","venice","vercel","vercel-ai-gateway","volcengine-ark","voyage-ai","windsurf","workbuddy","xai","xiaomi-mimo","xiaomi-tokenplan","xquik","youcom","zed"]);function u(e){let t="";try{t=new URL(String(e||"")).hostname.toLowerCase()}catch{return""}if(!t||"localhost"===t||t.startsWith("127.")||t.includes(":")||t.startsWith("[")||/^\d+\.\d+\.\d+\.\d+$/.test(t))return"";let a=t.split(".").filter(Boolean).find(e=>!l.has(e)&&!/^\d+$/.test(e));if(!a)return"";let s=d[a]||r[a]||a;return c.has(s)?s:""}function m(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length?1===t.length?t[0].slice(0,2).toUpperCase():`${t[0][0]}${t[t.length-1][0]}`.toUpperCase():""}},72778:(e,t,a)=>{a.d(t,{default:()=>s});var r=a(29798);function s({children:e}){return(0,r.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-background transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-foreground",children:[(0,r.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,r.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,r.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:e})]})}},76120:(e,t,a)=>{a.d(t,{SQ:()=>l,_2:()=>d,lp:()=>c,mB:()=>u,rI:()=>n,ty:()=>o});var r=a(29798);a(15814);var s=a(5471),i=a(47151);function n({...e}){return(0,r.jsx)(i.bL,{"data-slot":"dropdown-menu",...e})}function o({...e}){return(0,r.jsx)(i.l9,{"data-slot":"dropdown-menu-trigger",...e})}function l({className:e,align:t="start",sideOffset:a=4,...n}){return(0,r.jsx)(i.ZL,{children:(0,r.jsx)(i.UC,{"data-slot":"dropdown-menu-content",sideOffset:a,align:t,className:(0,s.cn)("z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...n})})}function d({className:e,inset:t,variant:a="default",...n}){return(0,r.jsx)(i.q7,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":a,className:(0,s.cn)("group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",e),...n})}function c({className:e,inset:t,...a}){return(0,r.jsx)(i.JU,{"data-slot":"dropdown-menu-label","data-inset":t,className:(0,s.cn)("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8",e),...a})}function u({className:e,...t}){return(0,r.jsx)(i.wv,{"data-slot":"dropdown-menu-separator",className:(0,s.cn)("-mx-1 my-1 h-px bg-border",e),...t})}},88336:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(29798),s=a(58913),i=a(15814),n=a(62392),o=a(51660),l=a(49787);function d({isOpen:e,onClose:t}){let[a,c]=(0,i.useState)(""),[u,m]=(0,i.useState)(!1),[p,x]=(0,i.useState)(!1),[h,f]=(0,i.useState)("");(0,i.useEffect)(()=>{e&&!a&&(x(!0),f(""),fetch(o.Nu.changelogUrl).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.text()}).then(e=>c(e)).catch(e=>f(e.message||"Failed to load")).finally(()=>x(!1)))},[e,a]);let g=a?a.split(/(?=^## )/m).filter(e=>e.startsWith("## ")):[],b=u?g:g.slice(0,3),v=g.length-b.length,j=b.length?n.xI.parse(b.join("\n")):"";return(0,r.jsx)(l.lG,{open:!!e,onOpenChange:e=>!e&&t?.(),children:(0,r.jsxs)(l.Cf,{className:"sm:max-w-3xl",children:[(0,r.jsx)(l.c7,{children:(0,r.jsx)(l.L3,{children:"Change Log"})}),(0,r.jsxs)("div",{className:"max-h-[75vh] overflow-y-auto p-6",children:[p&&(0,r.jsxs)("div",{className:"flex items-center justify-center py-10 text-muted-foreground",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"animate-spin mr-2"}),"Loading..."]}),h&&(0,r.jsxs)("div",{className:"text-red-500 py-4",children:["Failed to load changelog: ",h]}),!p&&!h&&j&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"changelog-body text-foreground",dangerouslySetInnerHTML:{__html:j}}),v>0&&(0,r.jsxs)("button",{onClick:()=>m(!0),className:"mt-4 w-full py-2 rounded-lg text-sm font-medium text-foreground bg-black/5 dark:bg-white/5 hover:bg-black/10 dark:hover:bg-white/10 transition-colors",children:["Show ",v," more"]})]})]})]})})}n.xI.setOptions({gfm:!0,breaks:!0})},90046:(e,t,a)=>{a.d(t,{d:()=>r});let r={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"}]}}},99118:(e,t,a)=>{a.d(t,{E:()=>i});var r=a(29798),s=a(5471);function i({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"skeleton",className:(0,s.cn)("animate-pulse rounded-md bg-muted",e),...t})}}}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1352:(e,t,r)=>{"use strict";r.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>d,m_:()=>o});var a=r(29798);r(15814);var s=r(5471),n=r(44484);function i({delayDuration:e=0,...t}){return(0,a.jsx)(n.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function o({...e}){return(0,a.jsx)(n.bL,{"data-slot":"tooltip",...e})}function d({...e}){return(0,a.jsx)(n.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:r,...i}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,s.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[r,(0,a.jsx)(n.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},4836:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15814);let s=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};var i=r(28145);let o=(0,a.forwardRef)(({color:e,size:t,width:r,height:o,strokeWidth:d,absoluteStrokeWidth:l,nonScalingStroke:c,className:u="",children:g,iconNode:p=[],icon:h={node:p,aliases:[],size:24},...m},f)=>{let{size:x=24,strokeWidth:v=2,absoluteStrokeWidth:b=!1,nonScalingStroke:k=!1,color:y="currentColor",className:w=""}=(0,i.T)()??{},j=!!g||(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(m),[N,z,A=[]]=function(e,t={}){return function(e,t={}){let r=t.attributeNames??{},a=e=>r[e]??e,i=e.size??e.width??n.width,o=e.size??e.height??n.height,d=e.aliases?.filter(e=>"string"==typeof e&&""!==e.trim()).map(e=>`lucide-${e}`)??[],l=[...e.name?[`lucide-${e.name}`]:[],...d],c=t.className?.split(" ").filter(Boolean)??[],u=!1===t.includeDefaultClasses?s(...c):s("lucide",...l,...c),g=t.absoluteStrokeWidth?Number(t.strokeWidth??n["stroke-width"])*Number(e.size??e.width??n.width)/Number(t.size??t.width??n.width):t.strokeWidth??n["stroke-width"];return["svg",{...Object.entries(n).reduce((e,[t,r])=>(e[a(t)]=r,e),{}),..."color"in t&&t.color&&{[a("stroke")]:t.color},..."size"in t&&null!=t.size&&{[a("width")]:t.size,[a("height")]:t.size},..."width"in t&&null!=t.width&&{[a("width")]:t.width},..."height"in t&&null!=t.height&&{[a("height")]:t.height},[a("stroke-width")]:g,...u&&{[a("class")]:u},[a("viewBox")]:`0 0 ${i} ${o}`,...!1===t.hasA11yProp?{[a("aria-hidden")]:"true"}:{},..."attributes"in t&&t.attributes},e.node.map(e=>{let[r,s,n]=e,i=t.nonScalingStroke?{[a("vector-effect")]:"non-scaling-stroke",...s}:s;return n?[r,i,n]:[r,i]})]}(e,{...t,attributeNames:{...t.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}(h,{color:e??y,width:r??t??x,height:o??t??x,strokeWidth:d??v,absoluteStrokeWidth:l??b,nonScalingStroke:c??k,className:s(w,u),hasA11yProp:j,attributes:m});return(0,a.createElement)(N,{ref:f,...z},[...A.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(g)?g:[g]])})},13189:(e,t,r)=>{"use strict";r.d(t,{default:()=>D});var a=r(29798),s=r(15814),n=r(75669),i=r(18055),o=r(53784),d=r(77345),l=r(1352),c=r(45111),u=r(74719),g=r(66685),p=r(24477),h=r(26339),m=r(75877),f=r(51660);let x={USAGE:"usage",STREAM:"stream","STREAM USAGE":"usage",COMBO:"combo",FUSION:"combo",TOKEN:"token",RTK:"rtk",HEADROOM:"rtk",REQUEST:"request",PROXY:"proxy",AUTH:"auth",AG_QUOTA:"auth",DB:"db",TUNNEL:"tunnel",PROJECTID:"other"},v={debug:"debug",info:"info",log:"info",warn:"warn",error:"error"},b={debug:0,info:1,warn:2,error:3};function k(e,t){return b[t]>b[e]?t:e}function y(e,t){let r=v[e]??"info",a="other";if(/\[DBG:[^\]]+\]/.test(t)||t.includes("\uD83D\uDC1B"))return{level:"debug",category:"debug"};let s=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+(DEBUG|INFO|WARN|ERROR)\b/);if(s){let e=s[2].toLowerCase();b[e]>b[r]&&(r=e)}let n=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[[0-9a-f]{4}\]\s+([A-Z]+)\b/);if(n){let e=n[2];"REQ"===e?a="request":"DONE"===e?a="done":"SAVERS"===e?a="rtk":"REFRESH"===e?a="token":"BLOCKED"===e||"ABORT"===e?a="stream":"ERROR"===e&&(r=k(r,"error"),"other"===a&&(a="request"))}if("other"===a&&/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i.test(t)){let e=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i)[2].toLowerCase();a="http"===e?"request":e}let i=t.match(/\[([A-Z][A-Z _-]*)\]/g);if(i)for(let e of i){let t=e.slice(1,-1).trim();if(x[t]){a=x[t];break}if("DBG"===t||t.startsWith("DBG:"))return{level:"debug",category:"debug"}}return t.includes("✗")||t.includes("❌")?(r=k(r,"error"),"other"===a&&(a="request")):t.includes("\uD83D\uDCCA")?t.includes("DONE")?a="done":"other"===a&&(a="usage"):t.includes("⚠️")?r=k(r,"warn"):t.includes("\uD83C\uDF0A")?"other"===a&&(a="stream"):t.includes("\uD83D\uDD11")||t.includes("TOKEN REFRESHED")?"other"===a&&(a="token"):t.includes("ℹ️")||t.includes("\uD83D\uDD0D")?t.includes("\uD83D\uDD0D")&&(r=k(r,"debug")):t.includes("\uD83D\uDCE5")&&"other"===a&&(a="request"),"other"===a&&/\b(POST|GET|PUT|DELETE|PATCH)\b/.test(t)&&(a="request"),/\bERROR \d{3}\b/.test(t)||/\bFAILED\b/.test(t)||/\bBLOCKED\b/.test(t)?r=k(r,"error"):/\b(falling back|fallback|unavailable|skipped|retry)\b/i.test(t)&&(r=k(r,"warn")),"other"===a&&(t.includes("[RTK]")||t.includes("HEADROOM")||t.includes("PXPIPE")?a="rtk":t.includes("[ProjectId]")?a="other":t.includes("[ProxyFetch]")?a="proxy":t.includes("[Tunnel]")?a="tunnel":t.includes("[DB]")?a="db":t.includes("[RequestDetail]")?a="request":t.includes("[STREAM]")?a="stream":t.includes("[TOKEN]")?a="token":t.includes("[COMBO]")||t.includes("[FUSION]")?a="combo":t.includes("[CHAT]")&&(a="request")),{level:r,category:a}}function w(e,t="log"){if("string"==typeof e){let{level:r,category:a}=y(t,e);return{ts:Date.now(),level:r,category:a,text:e}}if(e&&"object"==typeof e&&"string"==typeof e.text){if("number"==typeof e.ts&&e.level&&e.category)return e;let{level:r,category:a}=y(t,e.text);return{ts:"number"==typeof e.ts?e.ts:Date.now(),level:e.level??r,category:e.category??a,text:e.text}}let r=String(e??""),{level:a,category:s}=y(t,r);return{ts:Date.now(),level:a,category:s,text:r}}let j={debug:"secondary",info:"default",warn:"secondary",error:"destructive"},N={debug:"bg-muted text-muted-foreground",info:"bg-sky-500/15 text-sky-700 dark:text-sky-300",warn:"bg-amber-500/15 text-amber-700 dark:text-amber-300",error:""},z={debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR"},A=["debug","info","warn","error"],E={all:"All categories",request:"Request",done:"Done",usage:"Usage",combo:"Combo",token:"Token",rtk:"RTK",stream:"Stream",debug:"Debug",auth:"Auth",proxy:"Proxy",db:"DB",tunnel:"Tunnel",other:"Other"},C=["request","done","usage","combo","token","rtk","stream","debug","auth","proxy","db","tunnel","other"],R=/^\[\d{1,2}:\d{2}(:\d{2})?(\s?[AP]M)?\]\s*/,O=/\b(IN|OUT) \d[\d,]*( \(CACHE [^)]*\))?|\b\d[\d,]*ms\b|\b[A-Za-z_][\w.-]*=[^\s·|,]+/g;function S({text:e,isError:t}){let[r,n]=(0,s.useMemo)(()=>{let t;return -1===(t=e.indexOf("\n"))?[e,null]:[e.slice(0,t),e.slice(t+1)]},[e]),i=(0,s.useMemo)(()=>(function(e){let t=[],r=0;for(let a of e.matchAll(O)){let s=a[0],n=a.index??0;if(n>r&&t.push({kind:"plain",text:e.slice(r,n)}),/^(IN|OUT) /.test(s))t.push({kind:"tokens",text:s});else if(/ms$/.test(s))t.push({kind:"duration",text:s});else{let e=s.indexOf("=");t.push({kind:"kv",key:s.slice(0,e+1),value:s.slice(e+1)})}r=n+s.length}return r<e.length&&t.push({kind:"plain",text:e.slice(r)}),0===t.length&&t.push({kind:"plain",text:e}),t})(r.replace(R,"")),[r]);return(0,a.jsxs)("span",{className:"break-words",children:[i.map((e,t)=>"duration"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-amber-700",children:e.text},t):"tokens"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-emerald-700",children:e.text},t):"kv"===e.kind?(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:e.key}),(0,a.jsx)("span",{className:"font-medium text-sky-700",children:e.value})]},t):(0,a.jsx)("span",{children:e.text},t)),n&&(0,a.jsxs)("details",{className:"mt-1",children:[(0,a.jsx)("summary",{className:`cursor-pointer text-[11px] font-medium ${t?"text-red-600":"text-muted-foreground"} hover:underline`,children:"Stack trace"}),(0,a.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-muted p-2 text-[11px] whitespace-pre-wrap text-muted-foreground",children:n})]})]})}function T({entry:e}){let t="error"===e.level,r="warn"===e.level,s="done"===e.category;return(0,a.jsxs)("div",{className:`flex items-start gap-2 px-3 py-1.5 leading-relaxed ${t?"border-l-2 border-red-500 bg-red-500/5":r?"border-l-2 border-amber-500 bg-amber-500/5":s?"border-l-2 border-green-500 bg-green-500/5":"border-l-2 border-transparent hover:bg-muted/50"}`,children:[(0,a.jsx)("span",{className:"shrink-0 pt-0.5 text-[11px] text-muted-foreground tabular-nums",children:new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1})}),(0,a.jsx)(o.E,{variant:j[e.level],className:`shrink-0 ${N[e.level]}`,children:z[e.level]}),(0,a.jsx)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground uppercase",children:E[e.category]}),(0,a.jsx)("span",{className:"min-w-0 flex-1 text-foreground",children:(0,a.jsx)(S,{text:e.text,isError:t})})]})}function _(e){return e.map(e=>w(e))}function D(){let[e,t]=(0,s.useState)([]),[r,x]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[k,y]=(0,s.useState)(!0),[N,R]=(0,s.useState)(""),[O,S]=(0,s.useState)(new Set(A)),[D,L]=(0,s.useState)("all"),M=(0,s.useRef)(null),U=(0,s.useRef)(v);(0,s.useEffect)(()=>{U.current=v},[v]);let B=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};(0,s.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>x(!0),e.onmessage=e=>{if(U.current)return;let r=JSON.parse(e.data);if("init"===r.type)t(_(r.logs).slice(-f.UY.maxLines));else if("line"===r.type){let e=w(r.line);t(t=>{let r=[...t,e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else if("lines"===r.type){let e=_(r.lines);t(t=>{let r=[...t,...e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else"clear"===r.type&&t([])},e.onerror=()=>x(!1),()=>e.close()},[]),(0,s.useEffect)(()=>{k&&M.current&&(M.current.scrollTop=M.current.scrollHeight)},[e,k]);let $=(0,s.useMemo)(()=>{let t=N.trim().toLowerCase();return e.filter(e=>!!O.has(e.level)&&("all"===D||e.category===D)&&(!t||!!e.text.toLowerCase().includes(t)))},[e,O,D,N]),q=(0,s.useMemo)(()=>e.filter(e=>"error"===e.level).length,[e]),P=(0,s.useMemo)(()=>e.filter(e=>"warn"===e.level).length,[e]);return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsx)(n.ZB,{className:"sr-only",children:"Console logs"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("span",{className:r?"size-2 rounded-full bg-green-500":"size-2 rounded-full bg-red-500"})}),(0,a.jsx)(l.ZI,{children:r?"Connected":"Disconnected"})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:[$.length,"/",e.length," lines",q>0&&(0,a.jsxs)("span",{className:"font-semibold text-red-600",children:[" \xb7 ",q," errors"]}),P>0&&(0,a.jsxs)("span",{className:"font-semibold text-yellow-600",children:[" \xb7 ",P," warnings"]})]}),(0,a.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(u.A,{className:"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(d.p,{value:N,onChange:e=>R(e.target.value),placeholder:"Search logs…",className:"h-7 w-44 pl-8 text-xs"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1",children:A.map(e=>(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("button",{type:"button",onClick:()=>{S(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:`cursor-pointer transition-opacity ${O.has(e)?"opacity-100":"opacity-30 grayscale"}`,children:(0,a.jsx)(o.E,{variant:j[e],children:z[e]})})}),(0,a.jsx)(l.ZI,{children:`Toggle ${z[e]}`})]},e))}),(0,a.jsxs)(c.l6,{value:D,onValueChange:e=>L(e),children:[(0,a.jsx)(c.bq,{className:"h-7 w-32 text-xs",children:(0,a.jsx)(c.yv,{})}),(0,a.jsxs)(c.gC,{children:[(0,a.jsx)(c.eb,{value:"all",children:E.all}),C.map(e=>(0,a.jsx)(c.eb,{value:e,children:E[e]},e))]})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:()=>b(e=>!e),children:[v?(0,a.jsx)(g.A,{}):(0,a.jsx)(p.A,{}),v?"Resume":"Pause"]}),(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsxs)(i.$,{size:"sm",variant:k?"secondary":"outline",onClick:()=>y(e=>!e),children:[(0,a.jsx)(h.A,{}),"Follow"]})}),(0,a.jsx)(l.ZI,{children:"Auto-scroll to newest"})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:B,children:[(0,a.jsx)(m.A,{}),"Clear"]})]})]})]}),(0,a.jsx)(n.Wu,{className:"pt-0",children:(0,a.jsx)("div",{ref:M,className:"h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs",children:0===e.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No console logs yet."}):0===$.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No logs match the current filters."}):(0,a.jsx)("div",{className:"divide-y divide-border/50",children:$.map((e,t)=>(0,a.jsx)(T,{entry:e},t))})})})]})}},15298:(e,t,r)=>{Promise.resolve().then(r.bind(r,13189))},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function d({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?i.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(o({variant:t,size:r,className:e})),...l})}},24477:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};s.node;let n=(0,a.A)(s)},26339:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"arrow-down",size:24,node:[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]};s.node;let n=(0,a.A)(s)},28145:(e,t,r)=>{"use strict";r.d(t,{T:()=>i,a:()=>n});var a=r(15814);let s=(0,a.createContext)({});function n({children:e,size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}){let c=(0,a.useMemo)(()=>({size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}),[t,r,i,o,d,l]);return(0,a.createElement)(s.Provider,{value:c},e)}let i=()=>(0,a.useContext)(s)},28830:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};s.node;let n=(0,a.A)(s)},45111:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,eb:()=>p,gC:()=>g,l6:()=>l,yv:()=>c});var a=r(29798);r(15814);var s=r(5471),n=r(95862),i=r(58765),o=r(63587),d=r(28830);function l({...e}){return(0,a.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,a.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:r,...o}){return(0,a.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":t,className:(0,s.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[r,(0,a.jsx)(n.In,{asChild:!0,children:(0,a.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function g({className:e,children:t,position:r="popper",align:i="center",...o}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,s.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...o,children:[(0,a.jsx)(h,{}),(0,a.jsx)(n.LM,{"data-position":r,className:(0,s.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:t}),(0,a.jsx)(m,{})]})})}function p({className:e,children:t,...r}){return(0,a.jsxs)(n.q7,{"data-slot":"select-item",className:(0,s.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,a.jsx)(n.VF,{children:(0,a.jsx)(o.A,{className:"pointer-events-none"})})}),(0,a.jsx)(n.p4,{children:t})]})}function h({className:e,...t}){return(0,a.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(d.A,{})})}function m({className:e,...t}){return(0,a.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(i.A,{})})}},50009:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(15814),s=r(4836);function n(e,t=[],r=[]){let i,o="string"==typeof e?function(e,t,r=[]){if(null==t)throw Error("[lucide]: iconNode is required when icon name is used");return{name:e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),size:24,node:t,...r.length>0?{aliases:r}:{}}}(e,t,r):e,d=(0,a.forwardRef)(({className:e,...t},r)=>(0,a.createElement)(s.A,{ref:r,icon:o,className:e,...t}));return o.name&&(d.displayName=(i=(e=>{let t="",r=!1;for(let a of e){if("-"===a||"_"===a||a<=" "){r=t.length>0;continue}0===t.length?t+=a.toLowerCase():t+=r?a.toUpperCase():a,r=!1}return t})(o.name)).charAt(0).toUpperCase()+i.slice(1)),d}},51660:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>a.Q2,fg:()=>a.fg,vQ:()=>s,_$:()=>i,MA:()=>a.MA,UY:()=>d,Nu:()=>n,zN:()=>a.zN,B2:()=>o});var a=r(13794);r(80159);let s={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.5"},n={changelogUrl:"/api/changelog"},i=20128,o={storageKey:"theme",defaultTheme:"light"},d={maxLines:500,pollIntervalMs:1e3}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function d({className:e,variant:t="default",asChild:r=!1,...s}){let l=r?i.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(o({variant:t}),e),...s})}},58765:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};s.node;let n=(0,a.A)(s)},63587:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};s.node;let n=(0,a.A)(s)},66685:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"play",size:24,node:[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]};s.node;let n=(0,a.A)(s)},74719:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};s.node;let n=(0,a.A)(s)},75669:(e,t,r)=>{"use strict";r.d(t,{BT:()=>d,Wu:()=>c,X9:()=>l,ZB:()=>o,Zp:()=>n,aR:()=>i});var a=r(29798);r(15814);var s=r(5471);function n({className:e,size:t="default",...r}){return(0,a.jsx)("div",{"data-slot":"card","data-size":t,className:(0,s.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function i({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,s.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...t})}function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,s.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...t})}function d({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,s.cn)("text-sm text-muted-foreground",e),...t})}function l({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,s.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function c({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,s.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...t})}},75877:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};s.node;let n=(0,a.A)(s)},77345:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var a=r(29798);r(15814);var s=r(5471);function n({className:e,type:t,...r}){return(0,a.jsx)("input",{type:t,"data-slot":"input",className:(0,s.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[5166,7552,9980,5778,4484,3577,5862,159,427,9966,7358],()=>e(e.s=15298)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1352:(e,t,r)=>{"use strict";r.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>d,m_:()=>o});var a=r(29798);r(15814);var s=r(5471),n=r(44484);function i({delayDuration:e=0,...t}){return(0,a.jsx)(n.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function o({...e}){return(0,a.jsx)(n.bL,{"data-slot":"tooltip",...e})}function d({...e}){return(0,a.jsx)(n.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:r,...i}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,s.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[r,(0,a.jsx)(n.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},4836:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(15814);let s=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};var i=r(28145);let o=(0,a.forwardRef)(({color:e,size:t,width:r,height:o,strokeWidth:d,absoluteStrokeWidth:l,nonScalingStroke:c,className:u="",children:g,iconNode:p=[],icon:h={node:p,aliases:[],size:24},...m},f)=>{let{size:x=24,strokeWidth:v=2,absoluteStrokeWidth:b=!1,nonScalingStroke:k=!1,color:y="currentColor",className:w=""}=(0,i.T)()??{},j=!!g||(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(m),[N,z,A=[]]=function(e,t={}){return function(e,t={}){let r=t.attributeNames??{},a=e=>r[e]??e,i=e.size??e.width??n.width,o=e.size??e.height??n.height,d=e.aliases?.filter(e=>"string"==typeof e&&""!==e.trim()).map(e=>`lucide-${e}`)??[],l=[...e.name?[`lucide-${e.name}`]:[],...d],c=t.className?.split(" ").filter(Boolean)??[],u=!1===t.includeDefaultClasses?s(...c):s("lucide",...l,...c),g=t.absoluteStrokeWidth?Number(t.strokeWidth??n["stroke-width"])*Number(e.size??e.width??n.width)/Number(t.size??t.width??n.width):t.strokeWidth??n["stroke-width"];return["svg",{...Object.entries(n).reduce((e,[t,r])=>(e[a(t)]=r,e),{}),..."color"in t&&t.color&&{[a("stroke")]:t.color},..."size"in t&&null!=t.size&&{[a("width")]:t.size,[a("height")]:t.size},..."width"in t&&null!=t.width&&{[a("width")]:t.width},..."height"in t&&null!=t.height&&{[a("height")]:t.height},[a("stroke-width")]:g,...u&&{[a("class")]:u},[a("viewBox")]:`0 0 ${i} ${o}`,...!1===t.hasA11yProp?{[a("aria-hidden")]:"true"}:{},..."attributes"in t&&t.attributes},e.node.map(e=>{let[r,s,n]=e,i=t.nonScalingStroke?{[a("vector-effect")]:"non-scaling-stroke",...s}:s;return n?[r,i,n]:[r,i]})]}(e,{...t,attributeNames:{...t.attributeNames,class:"className","stroke-width":"strokeWidth","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","vector-effect":"vectorEffect"}})}(h,{color:e??y,width:r??t??x,height:o??t??x,strokeWidth:d??v,absoluteStrokeWidth:l??b,nonScalingStroke:c??k,className:s(w,u),hasA11yProp:j,attributes:m});return(0,a.createElement)(N,{ref:f,...z},[...A.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(g)?g:[g]])})},13189:(e,t,r)=>{"use strict";r.d(t,{default:()=>D});var a=r(29798),s=r(15814),n=r(75669),i=r(18055),o=r(53784),d=r(77345),l=r(1352),c=r(45111),u=r(74719),g=r(66685),p=r(24477),h=r(26339),m=r(75877),f=r(51660);let x={USAGE:"usage",STREAM:"stream","STREAM USAGE":"usage",COMBO:"combo",FUSION:"combo",TOKEN:"token",RTK:"rtk",HEADROOM:"rtk",REQUEST:"request",PROXY:"proxy",AUTH:"auth",AG_QUOTA:"auth",DB:"db",TUNNEL:"tunnel",PROJECTID:"other"},v={debug:"debug",info:"info",log:"info",warn:"warn",error:"error"},b={debug:0,info:1,warn:2,error:3};function k(e,t){return b[t]>b[e]?t:e}function y(e,t){let r=v[e]??"info",a="other";if(/\[DBG:[^\]]+\]/.test(t)||t.includes("\uD83D\uDC1B"))return{level:"debug",category:"debug"};let s=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+(DEBUG|INFO|WARN|ERROR)\b/);if(s){let e=s[2].toLowerCase();b[e]>b[r]&&(r=e)}let n=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[[0-9a-f]{4}\]\s+([A-Z]+)\b/);if(n){let e=n[2];"REQ"===e?a="request":"DONE"===e?a="done":"SAVERS"===e?a="rtk":"REFRESH"===e?a="token":"BLOCKED"===e||"ABORT"===e?a="stream":"ERROR"===e&&(r=k(r,"error"),"other"===a&&(a="request"))}if("other"===a&&/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i.test(t)){let e=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i)[2].toLowerCase();a="http"===e?"request":e}let i=t.match(/\[([A-Z][A-Z _-]*)\]/g);if(i)for(let e of i){let t=e.slice(1,-1).trim();if(x[t]){a=x[t];break}if("DBG"===t||t.startsWith("DBG:"))return{level:"debug",category:"debug"}}return t.includes("✗")||t.includes("❌")?(r=k(r,"error"),"other"===a&&(a="request")):t.includes("\uD83D\uDCCA")?t.includes("DONE")?a="done":"other"===a&&(a="usage"):t.includes("⚠️")?r=k(r,"warn"):t.includes("\uD83C\uDF0A")?"other"===a&&(a="stream"):t.includes("\uD83D\uDD11")||t.includes("TOKEN REFRESHED")?"other"===a&&(a="token"):t.includes("ℹ️")||t.includes("\uD83D\uDD0D")?t.includes("\uD83D\uDD0D")&&(r=k(r,"debug")):t.includes("\uD83D\uDCE5")&&"other"===a&&(a="request"),"other"===a&&/\b(POST|GET|PUT|DELETE|PATCH)\b/.test(t)&&(a="request"),/\bERROR \d{3}\b/.test(t)||/\bFAILED\b/.test(t)||/\bBLOCKED\b/.test(t)?r=k(r,"error"):/\b(falling back|fallback|unavailable|skipped|retry)\b/i.test(t)&&(r=k(r,"warn")),"other"===a&&(t.includes("[RTK]")||t.includes("HEADROOM")||t.includes("PXPIPE")?a="rtk":t.includes("[ProjectId]")?a="other":t.includes("[ProxyFetch]")?a="proxy":t.includes("[Tunnel]")?a="tunnel":t.includes("[DB]")?a="db":t.includes("[RequestDetail]")?a="request":t.includes("[STREAM]")?a="stream":t.includes("[TOKEN]")?a="token":t.includes("[COMBO]")||t.includes("[FUSION]")?a="combo":t.includes("[CHAT]")&&(a="request")),{level:r,category:a}}function w(e,t="log"){if("string"==typeof e){let{level:r,category:a}=y(t,e);return{ts:Date.now(),level:r,category:a,text:e}}if(e&&"object"==typeof e&&"string"==typeof e.text){if("number"==typeof e.ts&&e.level&&e.category)return e;let{level:r,category:a}=y(t,e.text);return{ts:"number"==typeof e.ts?e.ts:Date.now(),level:e.level??r,category:e.category??a,text:e.text}}let r=String(e??""),{level:a,category:s}=y(t,r);return{ts:Date.now(),level:a,category:s,text:r}}let j={debug:"secondary",info:"default",warn:"secondary",error:"destructive"},N={debug:"bg-muted text-muted-foreground",info:"bg-sky-500/15 text-sky-700 dark:text-sky-300",warn:"bg-amber-500/15 text-amber-700 dark:text-amber-300",error:""},z={debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR"},A=["debug","info","warn","error"],E={all:"All categories",request:"Request",done:"Done",usage:"Usage",combo:"Combo",token:"Token",rtk:"RTK",stream:"Stream",debug:"Debug",auth:"Auth",proxy:"Proxy",db:"DB",tunnel:"Tunnel",other:"Other"},C=["request","done","usage","combo","token","rtk","stream","debug","auth","proxy","db","tunnel","other"],R=/^\[\d{1,2}:\d{2}(:\d{2})?(\s?[AP]M)?\]\s*/,O=/\b(IN|OUT) \d[\d,]*( \(CACHE [^)]*\))?|\b\d[\d,]*ms\b|\b[A-Za-z_][\w.-]*=[^\s·|,]+/g;function S({text:e,isError:t}){let[r,n]=(0,s.useMemo)(()=>{let t;return -1===(t=e.indexOf("\n"))?[e,null]:[e.slice(0,t),e.slice(t+1)]},[e]),i=(0,s.useMemo)(()=>(function(e){let t=[],r=0;for(let a of e.matchAll(O)){let s=a[0],n=a.index??0;if(n>r&&t.push({kind:"plain",text:e.slice(r,n)}),/^(IN|OUT) /.test(s))t.push({kind:"tokens",text:s});else if(/ms$/.test(s))t.push({kind:"duration",text:s});else{let e=s.indexOf("=");t.push({kind:"kv",key:s.slice(0,e+1),value:s.slice(e+1)})}r=n+s.length}return r<e.length&&t.push({kind:"plain",text:e.slice(r)}),0===t.length&&t.push({kind:"plain",text:e}),t})(r.replace(R,"")),[r]);return(0,a.jsxs)("span",{className:"break-words",children:[i.map((e,t)=>"duration"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-amber-700",children:e.text},t):"tokens"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-emerald-700",children:e.text},t):"kv"===e.kind?(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:e.key}),(0,a.jsx)("span",{className:"font-medium text-sky-700",children:e.value})]},t):(0,a.jsx)("span",{children:e.text},t)),n&&(0,a.jsxs)("details",{className:"mt-1",children:[(0,a.jsx)("summary",{className:`cursor-pointer text-[11px] font-medium ${t?"text-red-600":"text-muted-foreground"} hover:underline`,children:"Stack trace"}),(0,a.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-muted p-2 text-[11px] whitespace-pre-wrap text-muted-foreground",children:n})]})]})}function T({entry:e}){let t="error"===e.level,r="warn"===e.level,s="done"===e.category;return(0,a.jsxs)("div",{className:`flex items-start gap-2 px-3 py-1.5 leading-relaxed ${t?"border-l-2 border-red-500 bg-red-500/5":r?"border-l-2 border-amber-500 bg-amber-500/5":s?"border-l-2 border-green-500 bg-green-500/5":"border-l-2 border-transparent hover:bg-muted/50"}`,children:[(0,a.jsx)("span",{className:"shrink-0 pt-0.5 text-[11px] text-muted-foreground tabular-nums",children:new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1})}),(0,a.jsx)(o.E,{variant:j[e.level],className:`shrink-0 ${N[e.level]}`,children:z[e.level]}),(0,a.jsx)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground uppercase",children:E[e.category]}),(0,a.jsx)("span",{className:"min-w-0 flex-1 text-foreground",children:(0,a.jsx)(S,{text:e.text,isError:t})})]})}function _(e){return e.map(e=>w(e))}function D(){let[e,t]=(0,s.useState)([]),[r,x]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[k,y]=(0,s.useState)(!0),[N,R]=(0,s.useState)(""),[O,S]=(0,s.useState)(new Set(A)),[D,L]=(0,s.useState)("all"),M=(0,s.useRef)(null),U=(0,s.useRef)(v);(0,s.useEffect)(()=>{U.current=v},[v]);let B=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};(0,s.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>x(!0),e.onmessage=e=>{if(U.current)return;let r=JSON.parse(e.data);if("init"===r.type)t(_(r.logs).slice(-f.UY.maxLines));else if("line"===r.type){let e=w(r.line);t(t=>{let r=[...t,e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else if("lines"===r.type){let e=_(r.lines);t(t=>{let r=[...t,...e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else"clear"===r.type&&t([])},e.onerror=()=>x(!1),()=>e.close()},[]),(0,s.useEffect)(()=>{k&&M.current&&(M.current.scrollTop=M.current.scrollHeight)},[e,k]);let $=(0,s.useMemo)(()=>{let t=N.trim().toLowerCase();return e.filter(e=>!!O.has(e.level)&&("all"===D||e.category===D)&&(!t||!!e.text.toLowerCase().includes(t)))},[e,O,D,N]),q=(0,s.useMemo)(()=>e.filter(e=>"error"===e.level).length,[e]),P=(0,s.useMemo)(()=>e.filter(e=>"warn"===e.level).length,[e]);return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsx)(n.ZB,{className:"sr-only",children:"Console logs"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("span",{className:r?"size-2 rounded-full bg-green-500":"size-2 rounded-full bg-red-500"})}),(0,a.jsx)(l.ZI,{children:r?"Connected":"Disconnected"})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:[$.length,"/",e.length," lines",q>0&&(0,a.jsxs)("span",{className:"font-semibold text-red-600",children:[" \xb7 ",q," errors"]}),P>0&&(0,a.jsxs)("span",{className:"font-semibold text-yellow-600",children:[" \xb7 ",P," warnings"]})]}),(0,a.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(u.A,{className:"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(d.p,{value:N,onChange:e=>R(e.target.value),placeholder:"Search logs…",className:"h-7 w-44 pl-8 text-xs"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1",children:A.map(e=>(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("button",{type:"button",onClick:()=>{S(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:`cursor-pointer transition-opacity ${O.has(e)?"opacity-100":"opacity-30 grayscale"}`,children:(0,a.jsx)(o.E,{variant:j[e],children:z[e]})})}),(0,a.jsx)(l.ZI,{children:`Toggle ${z[e]}`})]},e))}),(0,a.jsxs)(c.l6,{value:D,onValueChange:e=>L(e),children:[(0,a.jsx)(c.bq,{className:"h-7 w-32 text-xs",children:(0,a.jsx)(c.yv,{})}),(0,a.jsxs)(c.gC,{children:[(0,a.jsx)(c.eb,{value:"all",children:E.all}),C.map(e=>(0,a.jsx)(c.eb,{value:e,children:E[e]},e))]})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:()=>b(e=>!e),children:[v?(0,a.jsx)(g.A,{}):(0,a.jsx)(p.A,{}),v?"Resume":"Pause"]}),(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsxs)(i.$,{size:"sm",variant:k?"secondary":"outline",onClick:()=>y(e=>!e),children:[(0,a.jsx)(h.A,{}),"Follow"]})}),(0,a.jsx)(l.ZI,{children:"Auto-scroll to newest"})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:B,children:[(0,a.jsx)(m.A,{}),"Clear"]})]})]})]}),(0,a.jsx)(n.Wu,{className:"pt-0",children:(0,a.jsx)("div",{ref:M,className:"h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs",children:0===e.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No console logs yet."}):0===$.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No logs match the current filters."}):(0,a.jsx)("div",{className:"divide-y divide-border/50",children:$.map((e,t)=>(0,a.jsx)(T,{entry:e},t))})})})]})}},15298:(e,t,r)=>{Promise.resolve().then(r.bind(r,13189))},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function d({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?i.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(o({variant:t,size:r,className:e})),...l})}},24477:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};s.node;let n=(0,a.A)(s)},26339:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"arrow-down",size:24,node:[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]};s.node;let n=(0,a.A)(s)},28145:(e,t,r)=>{"use strict";r.d(t,{T:()=>i,a:()=>n});var a=r(15814);let s=(0,a.createContext)({});function n({children:e,size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}){let c=(0,a.useMemo)(()=>({size:t,color:r,strokeWidth:i,absoluteStrokeWidth:o,nonScalingStroke:d,className:l}),[t,r,i,o,d,l]);return(0,a.createElement)(s.Provider,{value:c},e)}let i=()=>(0,a.useContext)(s)},28830:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};s.node;let n=(0,a.A)(s)},45111:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,eb:()=>p,gC:()=>g,l6:()=>l,yv:()=>c});var a=r(29798);r(15814);var s=r(5471),n=r(95862),i=r(58765),o=r(63587),d=r(28830);function l({...e}){return(0,a.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,a.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:r,...o}){return(0,a.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":t,className:(0,s.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[r,(0,a.jsx)(n.In,{asChild:!0,children:(0,a.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function g({className:e,children:t,position:r="popper",align:i="center",...o}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,s.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...o,children:[(0,a.jsx)(h,{}),(0,a.jsx)(n.LM,{"data-position":r,className:(0,s.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:t}),(0,a.jsx)(m,{})]})})}function p({className:e,children:t,...r}){return(0,a.jsxs)(n.q7,{"data-slot":"select-item",className:(0,s.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,a.jsx)(n.VF,{children:(0,a.jsx)(o.A,{className:"pointer-events-none"})})}),(0,a.jsx)(n.p4,{children:t})]})}function h({className:e,...t}){return(0,a.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(d.A,{})})}function m({className:e,...t}){return(0,a.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(i.A,{})})}},50009:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(15814),s=r(4836);function n(e,t=[],r=[]){let i,o="string"==typeof e?function(e,t,r=[]){if(null==t)throw Error("[lucide]: iconNode is required when icon name is used");return{name:e?.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),size:24,node:t,...r.length>0?{aliases:r}:{}}}(e,t,r):e,d=(0,a.forwardRef)(({className:e,...t},r)=>(0,a.createElement)(s.A,{ref:r,icon:o,className:e,...t}));return o.name&&(d.displayName=(i=(e=>{let t="",r=!1;for(let a of e){if("-"===a||"_"===a||a<=" "){r=t.length>0;continue}0===t.length?t+=a.toLowerCase():t+=r?a.toUpperCase():a,r=!1}return t})(o.name)).charAt(0).toUpperCase()+i.slice(1)),d}},51660:(e,t,r)=>{"use strict";r.d(t,{Q2:()=>a.Q2,fg:()=>a.fg,vQ:()=>s,_$:()=>i,MA:()=>a.MA,UY:()=>d,Nu:()=>n,zN:()=>a.zN,B2:()=>o});var a=r(13794);r(80159);let s={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.6"},n={changelogUrl:"/api/changelog"},i=20128,o={storageKey:"theme",defaultTheme:"light"},d={maxLines:500,pollIntervalMs:1e3}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>d});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let o=(0,s.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function d({className:e,variant:t="default",asChild:r=!1,...s}){let l=r?i.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(o({variant:t}),e),...s})}},58765:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};s.node;let n=(0,a.A)(s)},63587:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};s.node;let n=(0,a.A)(s)},66685:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"play",size:24,node:[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]};s.node;let n=(0,a.A)(s)},74719:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};s.node;let n=(0,a.A)(s)},75669:(e,t,r)=>{"use strict";r.d(t,{BT:()=>d,Wu:()=>c,X9:()=>l,ZB:()=>o,Zp:()=>n,aR:()=>i});var a=r(29798);r(15814);var s=r(5471);function n({className:e,size:t="default",...r}){return(0,a.jsx)("div",{"data-slot":"card","data-size":t,className:(0,s.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function i({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,s.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...t})}function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,s.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...t})}function d({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,s.cn)("text-sm text-muted-foreground",e),...t})}function l({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,s.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function c({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,s.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...t})}},75877:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};s.node;let n=(0,a.A)(s)},77345:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var a=r(29798);r(15814);var s=r(5471);function n({className:e,type:t,...r}){return(0,a.jsx)("input",{type:t,"data-slot":"input",className:(0,s.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[5166,7552,9980,5778,4484,3577,5862,159,427,9966,7358],()=>e(e.s=15298)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9089],{1689:(e,a,r)=>{"use strict";r.r(a),r.d(a,{default:()=>b});var t=r(29798),i=r(58913),s=r(15814),n=r(70782),o=r(50141),d=r.n(o),l=r(14231),c=r(75669),u=r(18055),p=r(77345),g=r(45111),h=r(69221),f=r(51660);let m=Object.values(f.Q2).map(e=>({value:e.id,label:e.name})),x=Object.values(f.MA).map(e=>({value:e.id,label:e.name}));function v({label:e,required:a,error:r,hint:i,className:s,children:n}){return(0,t.jsxs)("div",{className:`flex flex-col gap-1.5 ${s||""}`,children:[e&&(0,t.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,a&&(0,t.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,r&&(0,t.jsx)("p",{className:"text-xs text-red-500",children:r}),i&&!r&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:i})]})}function b(){let e=(0,n.useRouter)(),[a,r]=(0,s.useState)(!1),[o,b]=(0,s.useState)({provider:"",authMethod:"api_key",apiKey:"",displayName:"",isActive:!0}),[y,k]=(0,s.useState)({}),w=(e,a)=>{b(r=>({...r,[e]:a})),y[e]&&k(a=>({...a,[e]:null}))},_=async a=>{let t;if(a.preventDefault(),t={},o.provider||(t.provider="Please select a provider"),"api_key"!==o.authMethod||o.apiKey||(t.apiKey="API Key is required"),k(t),0===Object.keys(t).length){r(!0);try{let a=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(a.ok)e.push("/dashboard/providers");else{let e=await a.json();k({submit:e.error||"Failed to create provider"})}}catch(e){k({submit:"An error occurred. Please try again."})}finally{r(!1)}}},j=f.Q2[o.provider];return(0,t.jsxs)("div",{className:"max-w-2xl mx-auto",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(u.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4",children:(0,t.jsxs)(d(),{href:"/dashboard/providers",children:[(0,t.jsx)(i.default,{name:"arrow_back",className:"text-lg"}),"Back to Providers"]})}),(0,t.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:"Add New Provider"}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2",children:"Configure a new AI provider to use with your applications."})]}),(0,t.jsx)(c.Zp,{children:(0,t.jsx)(c.Wu,{children:(0,t.jsxs)("form",{onSubmit:_,className:"flex flex-col gap-6",children:[(0,t.jsx)(v,{label:"Provider",required:!0,error:y.provider,children:(0,t.jsxs)(g.l6,{value:o.provider,onValueChange:e=>w("provider",e),children:[(0,t.jsx)(g.bq,{className:"w-full",children:(0,t.jsx)(g.yv,{placeholder:"Select a provider"})}),(0,t.jsx)(g.gC,{children:m.map(e=>(0,t.jsx)(g.eb,{value:String(e.value),children:e.label},e.value))})]})}),j&&(0,t.jsxs)("div",{className:"flex items-center gap-3 p-4 rounded-[10px] bg-background border border-border",children:[(0,t.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-background border border-border",children:(0,t.jsx)(i.default,{name:j.icon,className:"text-xl",style:{color:j.color}})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium",children:j.name}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Selected provider"})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("label",{className:"text-sm font-medium",children:["Authentication Method ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,t.jsx)("div",{className:"flex gap-3",children:x.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>w("authMethod",e.value),className:`flex-1 flex items-center justify-center gap-2 p-4 rounded-lg border transition-all ${o.authMethod===e.value?"border-primary bg-primary/5 text-primary":"border-border hover:border-primary/50"}`,children:[(0,t.jsx)(i.default,{name:"api_key"===e.value?"key":"lock",className:""}),(0,t.jsx)("span",{className:"font-medium",children:e.label})]},e.value))})]}),"api_key"===o.authMethod&&(0,t.jsx)(v,{label:"API Key",required:!0,error:y.apiKey,hint:"Your API key will be encrypted and stored securely.",children:(0,t.jsx)(p.p,{type:"password",placeholder:"Enter your API key",value:o.apiKey,onChange:e=>w("apiKey",e.target.value)})}),"oauth2"===o.authMethod&&(0,t.jsxs)("div",{className:"p-4 rounded-[10px] bg-background border border-border",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Connect your account using OAuth2 authentication."}),(0,t.jsxs)(u.$,{type:"button",variant:"secondary",children:[(0,t.jsx)(i.default,{name:"link"}),"Connect with OAuth2"]})]}),(0,t.jsx)(v,{label:"Display Name",hint:"Optional. A friendly name to identify this configuration.",children:(0,t.jsx)(p.p,{placeholder:"e.g., Production API, Dev Environment",value:o.displayName,onChange:e=>w("displayName",e.target.value)})}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(l.d,{checked:o.isActive,onCheckedChange:e=>w("isActive",e),"aria-label":"Active"}),(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:"Active"}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"Enable this provider for use in your applications"})]})]}),y.submit&&(0,t.jsx)("div",{className:"p-4 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 text-red-600 dark:text-red-400 text-sm",children:y.submit}),(0,t.jsxs)("div",{className:"flex gap-3 pt-4 border-t border-border",children:[(0,t.jsx)(d(),{href:"/dashboard/providers",className:"flex-1",children:(0,t.jsx)(u.$,{type:"button",variant:"ghost",className:"w-full",children:"Cancel"})}),(0,t.jsxs)(u.$,{type:"submit",disabled:a,className:"w-full flex-1",children:[a&&(0,t.jsx)(h.A,{className:"size-4 animate-spin"}),"Create Provider"]})]})]})})})]})}},14231:(e,a,r)=>{"use strict";r.d(a,{d:()=>n});var t=r(29798);r(15814);var i=r(5471),s=r(72320);function n({className:e,size:a="default",...r}){return(0,t.jsx)(s.bL,{"data-slot":"switch","data-size":a,className:(0,i.cn)("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",e),...r,children:(0,t.jsx)(s.zi,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}},18055:(e,a,r)=>{"use strict";r.d(a,{$:()=>d});var t=r(29798);r(15814);var i=r(54366),s=r(5471),n=r(80954);let o=(0,i.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function d({className:e,variant:a="default",size:r="default",asChild:i=!1,...l}){let c=i?n.bL:"button";return(0,t.jsx)(c,{"data-slot":"button","data-variant":a,"data-size":r,className:(0,s.cn)(o({variant:a,size:r,className:e})),...l})}},45111:(e,a,r)=>{"use strict";r.d(a,{bq:()=>u,eb:()=>g,gC:()=>p,l6:()=>l,yv:()=>c});var t=r(29798);r(15814);var i=r(5471),s=r(95862),n=r(58765),o=r(63587),d=r(28830);function l({...e}){return(0,t.jsx)(s.bL,{"data-slot":"select",...e})}function c({...e}){return(0,t.jsx)(s.WT,{"data-slot":"select-value",...e})}function u({className:e,size:a="default",children:r,...o}){return(0,t.jsxs)(s.l9,{"data-slot":"select-trigger","data-size":a,className:(0,i.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[r,(0,t.jsx)(s.In,{asChild:!0,children:(0,t.jsx)(n.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function p({className:e,children:a,position:r="popper",align:n="center",...o}){return(0,t.jsx)(s.ZL,{children:(0,t.jsxs)(s.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,i.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:n,...o,children:[(0,t.jsx)(h,{}),(0,t.jsx)(s.LM,{"data-position":r,className:(0,i.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:a}),(0,t.jsx)(f,{})]})})}function g({className:e,children:a,...r}){return(0,t.jsxs)(s.q7,{"data-slot":"select-item",className:(0,i.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,t.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,t.jsx)(s.VF,{children:(0,t.jsx)(o.A,{className:"pointer-events-none"})})}),(0,t.jsx)(s.p4,{children:a})]})}function h({className:e,...a}){return(0,t.jsx)(s.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...a,children:(0,t.jsx)(d.A,{})})}function f({className:e,...a}){return(0,t.jsx)(s.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...a,children:(0,t.jsx)(n.A,{})})}},51660:(e,a,r)=>{"use strict";r.d(a,{Q2:()=>t.Q2,fg:()=>t.fg,vQ:()=>i,_$:()=>n,MA:()=>t.MA,UY:()=>d,Nu:()=>s,zN:()=>t.zN,B2:()=>o});var t=r(13794);r(80159);let i={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.5"},s={changelogUrl:"/api/changelog"},n=20128,o={storageKey:"theme",defaultTheme:"light"},d={maxLines:500,pollIntervalMs:1e3}},58913:(e,a,r)=>{"use strict";r.d(a,{default:()=>d});var t=r(29798);r(15814);var i=r(36256);let s={add:"Plus",account_circle:"CircleUser",account_tree:"GitFork",api:"Plug",apps:"LayoutGrid",arrow_back:"ArrowLeft",arrow_downward:"ArrowDown",arrow_forward:"ArrowRight",arrow_upward:"ArrowUp",attach_file:"Paperclip",bar_chart:"BarChart3",block:"Ban",bolt:"Zap",business:"Briefcase",cancel:"X",cast:"Cast",chat:"MessageSquare",check:"Check",check_circle:"CheckCircle2",checklist:"ClipboardCheck",chevron_down:"ChevronDown",chevron_left:"ChevronLeft",chevron_right:"ChevronRight",chevron_up:"ChevronUp",close:"X",cloud:"Cloud",cloud_off:"CloudOff",cloud_sync:"CloudSync",cloud_upload:"CloudUpload",code:"Code2",computer:"Monitor",content_copy:"Copy",cookie:"Cookie",dashboard:"LayoutDashboard",data_array:"Table",data_object:"Braces",data_usage:"BarChart3",dark_mode:"Moon",delete:"Trash2",devices:"MonitorSmartphone",dns:"Network",download:"Download",edit:"Pencil",error:"CircleAlert",expand_more:"ChevronDown",extension:"Blocks",file_upload:"UploadCloud",filter_alt_off:"SlidersHorizontal",folder_open:"FolderOpen",gavel:"Scale",graphic_eq:"AudioWaveform",grid_view:"Grid2X2",group:"Users",help:"CircleHelp",history:"History",hourglass_top:"Timer",hub:"Router",image:"Image",image_search:"ScanSearch",info:"Info",input:"FileInput",key:"Key",keyboard_arrow_down:"ArrowDown",keyboard_arrow_up:"ArrowUp",lan:"Layers",language:"Languages",layers:"Layers",legend_toggle:"ListTree",light_mode:"Sun",link:"Link",link_off:"Link2Off",lock:"Lock",lock_open:"LockOpen",logout:"LogOut",menu:"Menu",menu_book:"BookOpen",mic:"Mic",monitoring:"Activity",monitor:"Monitor",movie:"Clapperboard",music_note:"Music",neurology:"Brain",open_in_new:"ExternalLink",output:"FileOutput",pause_circle:"CirclePause",person:"User",play_arrow:"Play",play_circle:"CirclePlay",playlist_add:"ListPlus",power:"Power",power_off:"PowerOff",power_settings_new:"Power",progress_activity:"Loader2",psychology:"BrainCircuit",public:"Earth",qr_code_scanner:"ScanQrCode",record_voice_over:"Mic",refresh:"RefreshCw",restart_alt:"RotateCcw",restore:"RotateCcw",rocket_launch:"Rocket",route:"Route",save:"Save",savings:"PiggyBank",scatter_plot:"ScatterChart",schedule:"Clock",science:"FlaskConical",search:"Search",search_off:"SearchX",security:"ShieldCheck",send:"Send",settings:"Settings",shield:"Shield",shield_lock:"ShieldCheck",shield_with_heart:"HeartPulse",smart_toy:"Bot",star:"Star",stop:"Square",stop_circle:"CircleStop",sync:"RefreshCw",sync_alt:"RefreshCw",terminal:"Terminal",toggle_off:"ToggleLeft",toggle_on:"ToggleRight",translate:"Languages",travel_explore:"Music4",upload:"Upload",upload_file:"UploadCloud",verified:"BadgeCheck",verified_user:"ShieldCheck",visibility:"Eye",visibility_off:"EyeOff",vpn_key:"KeyRound",vpn_lock:"Lock",warning:"TriangleAlert",wifi:"Wifi",wifi_off:"WifiOff",wifi_tethering:"Wifi"};function n(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let a=e.trim().match(/^(\d+(?:\.\d+)?)px$/);if(a)return Number(a[1])}return null}function o({name:e="",className:a,style:r,...d}){let l=i[e]??i[s[e]||String(e).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join("")]??i.Circle,c=function(e=""){let a=String(e).match(/\[(\d+(?:\.\d+)?)px\]/);return a?Number(a[1]):({"text-xs":12,"text-sm":14,"text-base":16,"text-lg":18,"text-xl":20,"text-2xl":24,"text-3xl":30,"text-4xl":36})[String(e).match(/\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl)\b/)?.[0]]||null}(a)??(r&&"object"==typeof r?n(r.width)??n(r.height)??n(r.fontSize):null),u=c?{width:c,height:c}:void 0,p=String(a??"").replace(/\bmaterial-symbols-outlined\b/g,"").replace(/\bfill-1\b/g,"").replace(/\s+/g," ").trim();return(0,t.jsx)(l,{className:p,style:u?{...u,...r}:r,"aria-hidden":"true",...d})}function d({name:e,className:a,style:r}){return(0,t.jsx)(o,{name:e,className:a,style:r})}},75669:(e,a,r)=>{"use strict";r.d(a,{BT:()=>d,Wu:()=>c,X9:()=>l,ZB:()=>o,Zp:()=>s,aR:()=>n});var t=r(29798);r(15814);var i=r(5471);function s({className:e,size:a="default",...r}){return(0,t.jsx)("div",{"data-slot":"card","data-size":a,className:(0,i.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function n({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...a})}function o({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...a})}function d({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-description",className:(0,i.cn)("text-sm text-muted-foreground",e),...a})}function l({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-action",className:(0,i.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...a})}function c({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...a})}},76103:(e,a,r)=>{Promise.resolve().then(r.bind(r,1689))},77345:(e,a,r)=>{"use strict";r.d(a,{p:()=>s});var t=r(29798);r(15814);var i=r(5471);function s({className:e,type:a,...r}){return(0,t.jsx)("input",{type:a,"data-slot":"input",className:(0,i.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,3577,5862,5113,159,427,9966,7358],()=>e(e.s=76103)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9089],{1689:(e,a,r)=>{"use strict";r.r(a),r.d(a,{default:()=>b});var t=r(29798),i=r(58913),s=r(15814),n=r(70782),o=r(50141),d=r.n(o),l=r(14231),c=r(75669),u=r(18055),p=r(77345),g=r(45111),h=r(69221),f=r(51660);let m=Object.values(f.Q2).map(e=>({value:e.id,label:e.name})),x=Object.values(f.MA).map(e=>({value:e.id,label:e.name}));function v({label:e,required:a,error:r,hint:i,className:s,children:n}){return(0,t.jsxs)("div",{className:`flex flex-col gap-1.5 ${s||""}`,children:[e&&(0,t.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,a&&(0,t.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,r&&(0,t.jsx)("p",{className:"text-xs text-red-500",children:r}),i&&!r&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:i})]})}function b(){let e=(0,n.useRouter)(),[a,r]=(0,s.useState)(!1),[o,b]=(0,s.useState)({provider:"",authMethod:"api_key",apiKey:"",displayName:"",isActive:!0}),[y,k]=(0,s.useState)({}),w=(e,a)=>{b(r=>({...r,[e]:a})),y[e]&&k(a=>({...a,[e]:null}))},_=async a=>{let t;if(a.preventDefault(),t={},o.provider||(t.provider="Please select a provider"),"api_key"!==o.authMethod||o.apiKey||(t.apiKey="API Key is required"),k(t),0===Object.keys(t).length){r(!0);try{let a=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(a.ok)e.push("/dashboard/providers");else{let e=await a.json();k({submit:e.error||"Failed to create provider"})}}catch(e){k({submit:"An error occurred. Please try again."})}finally{r(!1)}}},j=f.Q2[o.provider];return(0,t.jsxs)("div",{className:"max-w-2xl mx-auto",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(u.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4",children:(0,t.jsxs)(d(),{href:"/dashboard/providers",children:[(0,t.jsx)(i.default,{name:"arrow_back",className:"text-lg"}),"Back to Providers"]})}),(0,t.jsx)("h1",{className:"text-3xl font-semibold tracking-tight",children:"Add New Provider"}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2",children:"Configure a new AI provider to use with your applications."})]}),(0,t.jsx)(c.Zp,{children:(0,t.jsx)(c.Wu,{children:(0,t.jsxs)("form",{onSubmit:_,className:"flex flex-col gap-6",children:[(0,t.jsx)(v,{label:"Provider",required:!0,error:y.provider,children:(0,t.jsxs)(g.l6,{value:o.provider,onValueChange:e=>w("provider",e),children:[(0,t.jsx)(g.bq,{className:"w-full",children:(0,t.jsx)(g.yv,{placeholder:"Select a provider"})}),(0,t.jsx)(g.gC,{children:m.map(e=>(0,t.jsx)(g.eb,{value:String(e.value),children:e.label},e.value))})]})}),j&&(0,t.jsxs)("div",{className:"flex items-center gap-3 p-4 rounded-[10px] bg-background border border-border",children:[(0,t.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-background border border-border",children:(0,t.jsx)(i.default,{name:j.icon,className:"text-xl",style:{color:j.color}})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium",children:j.name}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Selected provider"})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("label",{className:"text-sm font-medium",children:["Authentication Method ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,t.jsx)("div",{className:"flex gap-3",children:x.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>w("authMethod",e.value),className:`flex-1 flex items-center justify-center gap-2 p-4 rounded-lg border transition-all ${o.authMethod===e.value?"border-primary bg-primary/5 text-primary":"border-border hover:border-primary/50"}`,children:[(0,t.jsx)(i.default,{name:"api_key"===e.value?"key":"lock",className:""}),(0,t.jsx)("span",{className:"font-medium",children:e.label})]},e.value))})]}),"api_key"===o.authMethod&&(0,t.jsx)(v,{label:"API Key",required:!0,error:y.apiKey,hint:"Your API key will be encrypted and stored securely.",children:(0,t.jsx)(p.p,{type:"password",placeholder:"Enter your API key",value:o.apiKey,onChange:e=>w("apiKey",e.target.value)})}),"oauth2"===o.authMethod&&(0,t.jsxs)("div",{className:"p-4 rounded-[10px] bg-background border border-border",children:[(0,t.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Connect your account using OAuth2 authentication."}),(0,t.jsxs)(u.$,{type:"button",variant:"secondary",children:[(0,t.jsx)(i.default,{name:"link"}),"Connect with OAuth2"]})]}),(0,t.jsx)(v,{label:"Display Name",hint:"Optional. A friendly name to identify this configuration.",children:(0,t.jsx)(p.p,{placeholder:"e.g., Production API, Dev Environment",value:o.displayName,onChange:e=>w("displayName",e.target.value)})}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(l.d,{checked:o.isActive,onCheckedChange:e=>w("isActive",e),"aria-label":"Active"}),(0,t.jsxs)("div",{className:"flex flex-col",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-foreground",children:"Active"}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"Enable this provider for use in your applications"})]})]}),y.submit&&(0,t.jsx)("div",{className:"p-4 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 text-red-600 dark:text-red-400 text-sm",children:y.submit}),(0,t.jsxs)("div",{className:"flex gap-3 pt-4 border-t border-border",children:[(0,t.jsx)(d(),{href:"/dashboard/providers",className:"flex-1",children:(0,t.jsx)(u.$,{type:"button",variant:"ghost",className:"w-full",children:"Cancel"})}),(0,t.jsxs)(u.$,{type:"submit",disabled:a,className:"w-full flex-1",children:[a&&(0,t.jsx)(h.A,{className:"size-4 animate-spin"}),"Create Provider"]})]})]})})})]})}},14231:(e,a,r)=>{"use strict";r.d(a,{d:()=>n});var t=r(29798);r(15814);var i=r(5471),s=r(72320);function n({className:e,size:a="default",...r}){return(0,t.jsx)(s.bL,{"data-slot":"switch","data-size":a,className:(0,i.cn)("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none group-has-[:focus-visible]/field-label:border-transparent group-has-[:focus-visible]/field-label:ring-0 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",e),...r,children:(0,t.jsx)(s.zi,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}},18055:(e,a,r)=>{"use strict";r.d(a,{$:()=>d});var t=r(29798);r(15814);var i=r(54366),s=r(5471),n=r(80954);let o=(0,i.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function d({className:e,variant:a="default",size:r="default",asChild:i=!1,...l}){let c=i?n.bL:"button";return(0,t.jsx)(c,{"data-slot":"button","data-variant":a,"data-size":r,className:(0,s.cn)(o({variant:a,size:r,className:e})),...l})}},45111:(e,a,r)=>{"use strict";r.d(a,{bq:()=>u,eb:()=>g,gC:()=>p,l6:()=>l,yv:()=>c});var t=r(29798);r(15814);var i=r(5471),s=r(95862),n=r(58765),o=r(63587),d=r(28830);function l({...e}){return(0,t.jsx)(s.bL,{"data-slot":"select",...e})}function c({...e}){return(0,t.jsx)(s.WT,{"data-slot":"select-value",...e})}function u({className:e,size:a="default",children:r,...o}){return(0,t.jsxs)(s.l9,{"data-slot":"select-trigger","data-size":a,className:(0,i.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...o,children:[r,(0,t.jsx)(s.In,{asChild:!0,children:(0,t.jsx)(n.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function p({className:e,children:a,position:r="popper",align:n="center",...o}){return(0,t.jsx)(s.ZL,{children:(0,t.jsxs)(s.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,i.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:n,...o,children:[(0,t.jsx)(h,{}),(0,t.jsx)(s.LM,{"data-position":r,className:(0,i.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:a}),(0,t.jsx)(f,{})]})})}function g({className:e,children:a,...r}){return(0,t.jsxs)(s.q7,{"data-slot":"select-item",className:(0,i.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,t.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,t.jsx)(s.VF,{children:(0,t.jsx)(o.A,{className:"pointer-events-none"})})}),(0,t.jsx)(s.p4,{children:a})]})}function h({className:e,...a}){return(0,t.jsx)(s.PP,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...a,children:(0,t.jsx)(d.A,{})})}function f({className:e,...a}){return(0,t.jsx)(s.wn,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...a,children:(0,t.jsx)(n.A,{})})}},51660:(e,a,r)=>{"use strict";r.d(a,{Q2:()=>t.Q2,fg:()=>t.fg,vQ:()=>i,_$:()=>n,MA:()=>t.MA,UY:()=>d,Nu:()=>s,zN:()=>t.zN,B2:()=>o});var t=r(13794);r(80159);let i={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.6"},s={changelogUrl:"/api/changelog"},n=20128,o={storageKey:"theme",defaultTheme:"light"},d={maxLines:500,pollIntervalMs:1e3}},58913:(e,a,r)=>{"use strict";r.d(a,{default:()=>d});var t=r(29798);r(15814);var i=r(36256);let s={add:"Plus",account_circle:"CircleUser",account_tree:"GitFork",api:"Plug",apps:"LayoutGrid",arrow_back:"ArrowLeft",arrow_downward:"ArrowDown",arrow_forward:"ArrowRight",arrow_upward:"ArrowUp",attach_file:"Paperclip",bar_chart:"BarChart3",block:"Ban",bolt:"Zap",business:"Briefcase",cancel:"X",cast:"Cast",chat:"MessageSquare",check:"Check",check_circle:"CheckCircle2",checklist:"ClipboardCheck",chevron_down:"ChevronDown",chevron_left:"ChevronLeft",chevron_right:"ChevronRight",chevron_up:"ChevronUp",close:"X",cloud:"Cloud",cloud_off:"CloudOff",cloud_sync:"CloudSync",cloud_upload:"CloudUpload",code:"Code2",computer:"Monitor",content_copy:"Copy",cookie:"Cookie",dashboard:"LayoutDashboard",data_array:"Table",data_object:"Braces",data_usage:"BarChart3",dark_mode:"Moon",delete:"Trash2",devices:"MonitorSmartphone",dns:"Network",download:"Download",edit:"Pencil",error:"CircleAlert",expand_more:"ChevronDown",extension:"Blocks",file_upload:"UploadCloud",filter_alt_off:"SlidersHorizontal",folder_open:"FolderOpen",gavel:"Scale",graphic_eq:"AudioWaveform",grid_view:"Grid2X2",group:"Users",help:"CircleHelp",history:"History",hourglass_top:"Timer",hub:"Router",image:"Image",image_search:"ScanSearch",info:"Info",input:"FileInput",key:"Key",keyboard_arrow_down:"ArrowDown",keyboard_arrow_up:"ArrowUp",lan:"Layers",language:"Languages",layers:"Layers",legend_toggle:"ListTree",light_mode:"Sun",link:"Link",link_off:"Link2Off",lock:"Lock",lock_open:"LockOpen",logout:"LogOut",menu:"Menu",menu_book:"BookOpen",mic:"Mic",monitoring:"Activity",monitor:"Monitor",movie:"Clapperboard",music_note:"Music",neurology:"Brain",open_in_new:"ExternalLink",output:"FileOutput",pause_circle:"CirclePause",person:"User",play_arrow:"Play",play_circle:"CirclePlay",playlist_add:"ListPlus",power:"Power",power_off:"PowerOff",power_settings_new:"Power",progress_activity:"Loader2",psychology:"BrainCircuit",public:"Earth",qr_code_scanner:"ScanQrCode",record_voice_over:"Mic",refresh:"RefreshCw",restart_alt:"RotateCcw",restore:"RotateCcw",rocket_launch:"Rocket",route:"Route",save:"Save",savings:"PiggyBank",scatter_plot:"ScatterChart",schedule:"Clock",science:"FlaskConical",search:"Search",search_off:"SearchX",security:"ShieldCheck",send:"Send",settings:"Settings",shield:"Shield",shield_lock:"ShieldCheck",shield_with_heart:"HeartPulse",smart_toy:"Bot",star:"Star",stop:"Square",stop_circle:"CircleStop",sync:"RefreshCw",sync_alt:"RefreshCw",terminal:"Terminal",toggle_off:"ToggleLeft",toggle_on:"ToggleRight",translate:"Languages",travel_explore:"Music4",upload:"Upload",upload_file:"UploadCloud",verified:"BadgeCheck",verified_user:"ShieldCheck",visibility:"Eye",visibility_off:"EyeOff",vpn_key:"KeyRound",vpn_lock:"Lock",warning:"TriangleAlert",wifi:"Wifi",wifi_off:"WifiOff",wifi_tethering:"Wifi"};function n(e){if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e){let a=e.trim().match(/^(\d+(?:\.\d+)?)px$/);if(a)return Number(a[1])}return null}function o({name:e="",className:a,style:r,...d}){let l=i[e]??i[s[e]||String(e).split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join("")]??i.Circle,c=function(e=""){let a=String(e).match(/\[(\d+(?:\.\d+)?)px\]/);return a?Number(a[1]):({"text-xs":12,"text-sm":14,"text-base":16,"text-lg":18,"text-xl":20,"text-2xl":24,"text-3xl":30,"text-4xl":36})[String(e).match(/\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl)\b/)?.[0]]||null}(a)??(r&&"object"==typeof r?n(r.width)??n(r.height)??n(r.fontSize):null),u=c?{width:c,height:c}:void 0,p=String(a??"").replace(/\bmaterial-symbols-outlined\b/g,"").replace(/\bfill-1\b/g,"").replace(/\s+/g," ").trim();return(0,t.jsx)(l,{className:p,style:u?{...u,...r}:r,"aria-hidden":"true",...d})}function d({name:e,className:a,style:r}){return(0,t.jsx)(o,{name:e,className:a,style:r})}},75669:(e,a,r)=>{"use strict";r.d(a,{BT:()=>d,Wu:()=>c,X9:()=>l,ZB:()=>o,Zp:()=>s,aR:()=>n});var t=r(29798);r(15814);var i=r(5471);function s({className:e,size:a="default",...r}){return(0,t.jsx)("div",{"data-slot":"card","data-size":a,className:(0,i.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function n({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...a})}function o({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...a})}function d({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-description",className:(0,i.cn)("text-sm text-muted-foreground",e),...a})}function l({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-action",className:(0,i.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...a})}function c({className:e,...a}){return(0,t.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...a})}},76103:(e,a,r)=>{Promise.resolve().then(r.bind(r,1689))},77345:(e,a,r)=>{"use strict";r.d(a,{p:()=>s});var t=r(29798);r(15814);var i=r(5471);function s({className:e,type:a,...r}){return(0,t.jsx)("input",{type:a,"data-slot":"input",className:(0,i.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,3577,5862,5113,159,427,9966,7358],()=>e(e.s=76103)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1352:(e,t,n)=>{"use strict";n.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>s,m_:()=>d});var o=n(29798);n(15814);var r=n(5471),a=n(44484);function i({delayDuration:e=0,...t}){return(0,o.jsx)(a.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function d({...e}){return(0,o.jsx)(a.bL,{"data-slot":"tooltip",...e})}function s({...e}){return(0,o.jsx)(a.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:n,...i}){return(0,o.jsx)(a.ZL,{children:(0,o.jsxs)(a.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,r.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[n,(0,o.jsx)(a.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},8872:(e,t,n)=>{Promise.resolve().then(n.bind(n,48565)),Promise.resolve().then(n.bind(n,1693)),Promise.resolve().then(n.bind(n,4780)),Promise.resolve().then(n.t.bind(n,52760,23)),Promise.resolve().then(n.t.bind(n,10414,23)),Promise.resolve().then(n.t.bind(n,65262,23)),Promise.resolve().then(n.t.bind(n,63185,23)),Promise.resolve().then(n.bind(n,84885)),Promise.resolve().then(n.bind(n,33526))},33526:(e,t,n)=>{"use strict";n.d(t,{ThemeProvider:()=>d});var o=n(29798),r=n(15814),a=n(88739),i=n(1352);function d({children:e}){let{initTheme:t}=(0,a.A)();return(0,r.useEffect)(()=>{t()},[t]),(0,o.jsx)(i.Bc,{children:e})}},51660:(e,t,n)=>{"use strict";n.d(t,{Q2:()=>o.Q2,fg:()=>o.fg,vQ:()=>r,_$:()=>i,MA:()=>o.MA,UY:()=>s,Nu:()=>a,zN:()=>o.zN,B2:()=>d});var o=n(13794);n(80159);let r={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.5"},a={changelogUrl:"/api/changelog"},i=20128,d={storageKey:"theme",defaultTheme:"light"},s={maxLines:500,pollIntervalMs:1e3}},51780:(e,t,n)=>{"use strict";n.d(t,{FE:()=>p,Tl:()=>u,kk:()=>c,oQ:()=>m,wn:()=>g});var o=n(66454);let r={},a=o.Xn,i=[];function d(){if("u"<typeof document)return o.Xn;let e=document.cookie.split(";").map(e=>e.trim()).find(e=>e.startsWith(`${o.CL}=`)),t=e?decodeURIComponent(e.split("=").slice(1).join("=")):o.Xn;return(0,o.QC)(t)}function s(e){"u">typeof document&&(document.documentElement.lang=e,document.documentElement.dir="fa"===e?"rtl":"ltr")}async function l(e){if("en"===e){r={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);r=await t.json()}catch(e){console.error("Failed to load translations:",e),r={}}}function u(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==a&&r[t]||e}function c(){return a}function m(e){return i.push(e),()=>{i=i.filter(t=>t!==e)}}function f(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let n=t;for(;n;){if(n.hasAttribute&&n.hasAttribute("data-i18n-skip"))return;n=n.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let o=u(e._originalText);o!==e.nodeValue&&(e.nodeValue=o)}function h(e){let t;if(!e)return;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null),o=[];for(;t=n.nextNode();)o.push(t);o.forEach(f)}async function p(){s(a=d()),await l(a),h(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?h(e):e.nodeType===Node.TEXT_NODE&&f(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function g(){s(a=d()),await l(a),i.forEach(e=>e()),h(document.body)}},63185:()=>{},66454:(e,t,n)=>{"use strict";n.d(t,{CL:()=>a,QC:()=>i,Xn:()=>r,YZ:()=>o});let o=["en","fa"],r="en",a="locale";function i(e){return"fa"===e?"fa":r}},84885:(e,t,n)=>{"use strict";n.d(t,{RuntimeI18nProvider:()=>d});var o=n(29798),r=n(15814),a=n(70782),i=n(51780);function d({children:e}){let t=(0,a.usePathname)();return(0,r.useEffect)(()=>{(0,i.FE)()},[]),(0,r.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,i.wn)()})})},[t]),(0,o.jsx)(o.Fragment,{children:e})}},88739:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var o=n(58013),r=n(47353),a=n(51660);function i(){document.documentElement.classList.remove("dark")}let d=(0,o.v)()((0,r.Zr)(e=>({theme:"light",setTheme:()=>{e({theme:"light"}),i()},toggleTheme:()=>{e({theme:"light"}),i()},initTheme:()=>{e({theme:"light"}),i()}}),{name:a.B2.storageKey}))}},e=>{e.O(0,[165,2262,5166,7552,9980,4484,7287,159,427,9966,7358],()=>e(e.s=8872)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1352:(e,t,n)=>{"use strict";n.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>s,m_:()=>d});var o=n(29798);n(15814);var r=n(5471),a=n(44484);function i({delayDuration:e=0,...t}){return(0,o.jsx)(a.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function d({...e}){return(0,o.jsx)(a.bL,{"data-slot":"tooltip",...e})}function s({...e}){return(0,o.jsx)(a.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:n,...i}){return(0,o.jsx)(a.ZL,{children:(0,o.jsxs)(a.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,r.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[n,(0,o.jsx)(a.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},8872:(e,t,n)=>{Promise.resolve().then(n.bind(n,48565)),Promise.resolve().then(n.bind(n,1693)),Promise.resolve().then(n.bind(n,4780)),Promise.resolve().then(n.t.bind(n,52760,23)),Promise.resolve().then(n.t.bind(n,10414,23)),Promise.resolve().then(n.t.bind(n,65262,23)),Promise.resolve().then(n.t.bind(n,63185,23)),Promise.resolve().then(n.bind(n,84885)),Promise.resolve().then(n.bind(n,33526))},33526:(e,t,n)=>{"use strict";n.d(t,{ThemeProvider:()=>d});var o=n(29798),r=n(15814),a=n(88739),i=n(1352);function d({children:e}){let{initTheme:t}=(0,a.A)();return(0,r.useEffect)(()=>{t()},[t]),(0,o.jsx)(i.Bc,{children:e})}},51660:(e,t,n)=>{"use strict";n.d(t,{Q2:()=>o.Q2,fg:()=>o.fg,vQ:()=>r,_$:()=>i,MA:()=>o.MA,UY:()=>s,Nu:()=>a,zN:()=>o.zN,B2:()=>d});var o=n(13794);n(80159);let r={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.6"},a={changelogUrl:"/api/changelog"},i=20128,d={storageKey:"theme",defaultTheme:"light"},s={maxLines:500,pollIntervalMs:1e3}},51780:(e,t,n)=>{"use strict";n.d(t,{FE:()=>p,Tl:()=>u,kk:()=>c,oQ:()=>m,wn:()=>g});var o=n(66454);let r={},a=o.Xn,i=[];function d(){if("u"<typeof document)return o.Xn;let e=document.cookie.split(";").map(e=>e.trim()).find(e=>e.startsWith(`${o.CL}=`)),t=e?decodeURIComponent(e.split("=").slice(1).join("=")):o.Xn;return(0,o.QC)(t)}function s(e){"u">typeof document&&(document.documentElement.lang=e,document.documentElement.dir="fa"===e?"rtl":"ltr")}async function l(e){if("en"===e){r={};return}try{let t=await fetch(`/i18n/literals/${e}.json`);r=await t.json()}catch(e){console.error("Failed to load translations:",e),r={}}}function u(e){if(!e||"string"!=typeof e)return e;let t=e.trim();return t&&"en"!==a&&r[t]||e}function c(){return a}function m(e){return i.push(e),()=>{i=i.filter(t=>t!==e)}}function f(e){if(!e.nodeValue||!e.nodeValue.trim())return;let t=e.parentElement;if(!t)return;let n=t;for(;n;){if(n.hasAttribute&&n.hasAttribute("data-i18n-skip"))return;n=n.parentElement}if(["script","style","code","pre","colgroup","table","thead","tbody","tfoot","tr","select","datalist","optgroup"].includes(t.tagName?.toLowerCase()))return;e._originalText||(e._originalText=e.nodeValue);let o=u(e._originalText);o!==e.nodeValue&&(e.nodeValue=o)}function h(e){let t;if(!e)return;let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null),o=[];for(;t=n.nextNode();)o.push(t);o.forEach(f)}async function p(){s(a=d()),await l(a),h(document.body),new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{e.nodeType===Node.ELEMENT_NODE?h(e):e.nodeType===Node.TEXT_NODE&&f(e)})})}).observe(document.body,{childList:!0,subtree:!0})}async function g(){s(a=d()),await l(a),i.forEach(e=>e()),h(document.body)}},63185:()=>{},66454:(e,t,n)=>{"use strict";n.d(t,{CL:()=>a,QC:()=>i,Xn:()=>r,YZ:()=>o});let o=["en","fa"],r="en",a="locale";function i(e){return"fa"===e?"fa":r}},84885:(e,t,n)=>{"use strict";n.d(t,{RuntimeI18nProvider:()=>d});var o=n(29798),r=n(15814),a=n(70782),i=n(51780);function d({children:e}){let t=(0,a.usePathname)();return(0,r.useEffect)(()=>{(0,i.FE)()},[]),(0,r.useEffect)(()=>{t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{(0,i.wn)()})})},[t]),(0,o.jsx)(o.Fragment,{children:e})}},88739:(e,t,n)=>{"use strict";n.d(t,{A:()=>d});var o=n(58013),r=n(47353),a=n(51660);function i(){document.documentElement.classList.remove("dark")}let d=(0,o.v)()((0,r.Zr)(e=>({theme:"light",setTheme:()=>{e({theme:"light"}),i()},toggleTheme:()=>{e({theme:"light"}),i()},initTheme:()=>{e({theme:"light"}),i()}}),{name:a.B2.storageKey}))}},e=>{e.O(0,[165,2262,5166,7552,9980,4484,7287,159,427,9966,7358],()=>e(e.s=8872)),_N_E=e.O()}]);
package/CHANGELOG.md ADDED
@@ -0,0 +1,66 @@
1
+ # Changelog
2
+
3
+ All notable changes to 10Router will be documented in this file.
4
+
5
+ ## [0.1.6] — 2026-10-15
6
+
7
+ - Version badge: check npm registry latest instead of GitHub tags for sidebar update notice.
8
+ - OpenCode: merge upstream PR 4860 — free-tier v2 fingerprint and `/inference/v1` endpoint table.
9
+ - OpenCode: restore renamed (fingerprinted) tool names across streaming, SSE-to-JSON, non-streaming, and direct-translate response paths so clients see original names.
10
+ - Changelog API: ship `CHANGELOG.md` into the standalone Docker bundle (`Dockerfile`, `next.config.mjs` tracing, npm `files`) and migrate `/api/changelog` route from JS to TS with read-failure logging.
11
+
12
+ ## [0.1.5] — 2026-10-15
13
+
14
+ - Fix: pin `next` to exact `16.3.5` in package dependencies to prevent runtime ENOENT on `preview-props.json` when npm resolves `next@16.4.0` against a prebuilt `.next` artifact.
15
+ - CLI: add pre-publish package test guard verifying exact `dependencies.next` pin and detecting version skew against the prebuilt bundle.
16
+
17
+ ## [0.1.4] — 2026-10-14
18
+
19
+ - OpenCode Go: catalog synced to v2 API (`grok-4.7`, `gpt-6-luna`, `mimo-v2.6-flash/pro`, `space-bunny-free`, `longcat-2.5-preview-free`; removed `minimax-m2.5`, `qwen3.7-max`, `qwen3.6-plus`; `deepseek-v4.1-flash`).
20
+ - OpenCode Zen: executor routes all responses-family models (GPT/Grok/Muse Spark) to `/zen/v1/responses` from the registry instead of Muse Spark only — fixes GPT/Grok requests hitting `/chat/completions`.
21
+ - OpenCode / Zen: dead `/zen/v1/models` catalog URL and dashboard probe replaced with live `/inference/v1/models` from the v2 docs.
22
+ - Tests: Go catalog synced to the v2 endpoint table; new Zen responses-routing regression test.
23
+
24
+ ## [0.1.3] — 2026-10-14
25
+
26
+ - Prettier formatting fixes (opencode executors, golden test).
27
+ - Golden snapshot updated for `is_error` boolean on Claude `tool_result` blocks.
28
+
29
+ ## [0.1.2] — 2026-10-14
30
+
31
+ - OpenAI→Claude: always emit `is_error` boolean on `tool_result` blocks
32
+ (Zed's strict parser requires it; Anthropic treats it as optional).
33
+ - OpenCode executor: request headers aligned to prevent 403 FreeTierError.
34
+ - CLI: `checkUpdate` tests pass explicit env so `CI=true` guard doesn't silence them.
35
+
36
+ ## [0.1.1] — 2026-09-27
37
+
38
+ - CLI: colored output (NO_COLOR-aware), npm update-check notice (fail-open, cached), npm installs always run prod, `logs` follows, `doctor` removed.
39
+ - `pnpm dev [cmd]` delegates to real CLI with isolated `~/.10router-dev`; new `pnpm dev:update` and `pnpm pkg:test`; prod default port 20128.
40
+ - `custom-server.js`: dropped dead background-refresh import; bootstrap owns scheduler, no src/ coupling.
41
+ - Logging: ANSI-colored SSE log lines; dashboard strips ANSI on ingest; console-log viewer gains per-level badge colors and warn rows.
42
+ - Proxy-pool test route uses native `fetch` instead of undici.
43
+ - `cn()` via `cn` package; pruned `clsx`, `tailwind-merge`, `prop-types`, single Radix packages; pnpm 12.6.0.
44
+ - Config: fixed `distDir` to `.next`, trimmed tsconfig includes, cleaned dev `.env.example` / `.gitignore` docs.
45
+ - Tests: new `cli-update-check` and `colored-log-lines` unit tests.
46
+
47
+ ## [0.1.0] — 2026-09-25
48
+
49
+ Initial public release. Local AI routing gateway + Next.js dashboard.
50
+
51
+ ### Added
52
+
53
+ - One OpenAI-compatible endpoint (`/v1/*`): chat, messages, responses,
54
+ models, embeddings, images, audio, videos, search.
55
+ - Routing across 28 upstream providers with format translation
56
+ (OpenAI pivot, direct routes for fragile pairs).
57
+ - Model-combo and multi-account fallback (subscription → cheap → free).
58
+ - OAuth + API-key connection management with auto token refresh.
59
+ - RTK token saver (`tool_result` compression, fail-open).
60
+ - Usage/cost tracking, request logging, optional cloud sync.
61
+ - Dashboard (`/dashboard`) + `10router` CLI
62
+ (`start`, `stop`, `status`, `logs`, `open`).
63
+ - SQLite persistence (`DATA_DIR/db/data.sqlite`) with legacy JSON import.
64
+ - Docker image + npm package (`@amir83nasr/10router`) distribution.
65
+ - CI: Prettier check on changed files + no-regression test gate
66
+ (`pnpm test`).
package/next.config.mjs CHANGED
@@ -24,6 +24,11 @@ const nextConfig = {
24
24
  root: tracingRoot,
25
25
  },
26
26
  outputFileTracingRoot: tracingRoot,
27
+ // Ship CHANGELOG.md into the standalone bundle so /api/changelog can read
28
+ // it at runtime (dev works by accident — the repo checkout has the file).
29
+ outputFileTracingIncludes: {
30
+ "/api/changelog": ["./CHANGELOG.md"],
31
+ },
27
32
  outputFileTracingExcludes: {
28
33
  "*": ["./gitbook/**/*"],
29
34
  },