llm-simple-router 0.3.7 → 0.4.1

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 (149) hide show
  1. package/README.md +144 -75
  2. package/dist/admin/constants.d.ts +1 -8
  3. package/dist/admin/constants.js +2 -8
  4. package/dist/admin/logs.js +25 -4
  5. package/dist/admin/metrics.js +7 -3
  6. package/dist/admin/recommended.d.ts +7 -0
  7. package/dist/admin/recommended.js +25 -0
  8. package/dist/admin/router-keys.js +1 -2
  9. package/dist/admin/routes.js +4 -0
  10. package/dist/admin/usage.d.ts +7 -0
  11. package/dist/admin/usage.js +66 -0
  12. package/dist/cli.js +0 -0
  13. package/dist/config/recommended.d.ts +24 -0
  14. package/dist/config/recommended.js +30 -0
  15. package/dist/constants.d.ts +8 -0
  16. package/dist/constants.js +9 -0
  17. package/dist/db/index.d.ts +7 -5
  18. package/dist/db/index.js +4 -3
  19. package/dist/db/logs.d.ts +24 -33
  20. package/dist/db/logs.js +52 -17
  21. package/dist/db/metrics.d.ts +36 -3
  22. package/dist/db/metrics.js +57 -42
  23. package/dist/db/migrations/018_add_failover_field.sql +2 -0
  24. package/dist/db/migrations/019_create_usage_windows.sql +11 -0
  25. package/dist/db/retry-rules.d.ts +0 -5
  26. package/dist/db/retry-rules.js +0 -23
  27. package/dist/db/usage-windows.d.ts +19 -0
  28. package/dist/db/usage-windows.js +37 -0
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.js +11 -8
  31. package/dist/monitor/request-tracker.d.ts +6 -0
  32. package/dist/monitor/request-tracker.js +23 -54
  33. package/dist/monitor/stream-extractor.d.ts +11 -0
  34. package/dist/monitor/stream-extractor.js +51 -0
  35. package/dist/proxy/anthropic.js +19 -32
  36. package/dist/proxy/log-helpers.d.ts +11 -4
  37. package/dist/proxy/log-helpers.js +5 -3
  38. package/dist/proxy/openai.js +18 -34
  39. package/dist/proxy/orchestrator.d.ts +52 -0
  40. package/dist/proxy/orchestrator.js +100 -0
  41. package/dist/proxy/proxy-core.d.ts +14 -26
  42. package/dist/proxy/proxy-core.js +40 -337
  43. package/dist/proxy/proxy-handler.d.ts +18 -0
  44. package/dist/proxy/proxy-handler.js +223 -0
  45. package/dist/proxy/proxy-logging.d.ts +28 -0
  46. package/dist/proxy/proxy-logging.js +122 -0
  47. package/dist/proxy/resilience.d.ts +63 -0
  48. package/dist/proxy/resilience.js +188 -0
  49. package/dist/proxy/scope.d.ts +18 -0
  50. package/dist/proxy/scope.js +37 -0
  51. package/dist/proxy/semaphore.d.ts +9 -2
  52. package/dist/proxy/semaphore.js +34 -7
  53. package/dist/proxy/stream-proxy.d.ts +7 -0
  54. package/dist/proxy/stream-proxy.js +263 -0
  55. package/dist/proxy/{upstream-call.d.ts → transport.d.ts} +25 -18
  56. package/dist/proxy/transport.js +128 -0
  57. package/dist/proxy/types.d.ts +58 -0
  58. package/dist/proxy/types.js +30 -0
  59. package/dist/proxy/usage-window-tracker.d.ts +11 -0
  60. package/dist/proxy/usage-window-tracker.js +75 -0
  61. package/dist/utils/datetime.d.ts +4 -0
  62. package/dist/utils/datetime.js +10 -0
  63. package/frontend-dist/assets/CardContent-fmM_iiuR.js +1 -0
  64. package/frontend-dist/assets/CardHeader-BzzFzZ1B.js +1 -0
  65. package/frontend-dist/assets/CardTitle-09d7O-11.js +1 -0
  66. package/frontend-dist/assets/Checkbox-DH8iqXQd.js +1 -0
  67. package/frontend-dist/assets/CollapsibleTrigger-DCRRORrU.js +1 -0
  68. package/frontend-dist/assets/Collection-DY9-Yue9.js +3 -0
  69. package/frontend-dist/assets/Dashboard-BEzoZuSm.js +3 -0
  70. package/frontend-dist/assets/DialogTitle-BeMGJzYO.js +1 -0
  71. package/frontend-dist/assets/Input-BhvZ-Up7.js +1 -0
  72. package/frontend-dist/assets/Label-DjtouWZ7.js +1 -0
  73. package/frontend-dist/assets/LogDetailDialog-BjRsy_FR.js +3 -0
  74. package/frontend-dist/assets/Login-hOCPB-34.js +1 -0
  75. package/frontend-dist/assets/Logs-C5c3BJsg.js +1 -0
  76. package/frontend-dist/assets/ModelMappings-CDjxwyyz.js +1 -0
  77. package/frontend-dist/assets/Monitor-CPAvIREG.js +1 -0
  78. package/frontend-dist/assets/PopperContent-CHNw_qb6.js +1 -0
  79. package/frontend-dist/assets/Providers-C9ZAqHxO.js +1 -0
  80. package/frontend-dist/assets/ProxyEnhancement-Ct5WbiB7.js +5 -0
  81. package/frontend-dist/assets/RetryRules-CbgyrP6w.js +1 -0
  82. package/frontend-dist/assets/RouterKeys-zmqgFEKp.js +1 -0
  83. package/frontend-dist/assets/SelectValue-CP4Sh7LP.js +1 -0
  84. package/frontend-dist/assets/Setup-BXDEPt4o.js +1 -0
  85. package/frontend-dist/assets/Switch-DF6awXqs.js +1 -0
  86. package/frontend-dist/assets/TableHeader-BKE_yVML.js +1 -0
  87. package/frontend-dist/assets/TabsTrigger-D8R7lxaI.js +1 -0
  88. package/frontend-dist/assets/TooltipTrigger-BjQXeFem.js +1 -0
  89. package/frontend-dist/assets/VisuallyHidden-B_NnkONE.js +1 -0
  90. package/frontend-dist/assets/VisuallyHiddenInput-cjeTgyDe.js +1 -0
  91. package/frontend-dist/assets/alert-dialog-BoGRIC1Q.js +1 -0
  92. package/frontend-dist/assets/badge-DIO8W_W9.js +1 -0
  93. package/frontend-dist/assets/button-qxGNBunr.js +12 -0
  94. package/frontend-dist/assets/{createLucideIcon-CCmQ9QKM.js → createLucideIcon-jHUFhqKn.js} +1 -1
  95. package/frontend-dist/assets/dialog-D8pIXeSs.js +1 -0
  96. package/frontend-dist/assets/format-CPdJtjZ5.js +1 -0
  97. package/frontend-dist/assets/index-C_disqMY.js +1 -0
  98. package/frontend-dist/assets/index-DDp6SHfg.css +1 -0
  99. package/frontend-dist/assets/lib-DjpgwSRA.js +1 -0
  100. package/frontend-dist/assets/{ohash.D__AXeF1-p4vp6Svt.js → ohash.D__AXeF1-nmJ7gFbh.js} +1 -1
  101. package/frontend-dist/assets/{useClipboard-DO-38TXr.js → useClipboard-CmLp2YGk.js} +1 -1
  102. package/frontend-dist/assets/useForwardExpose-awoGXQkg.js +1 -0
  103. package/frontend-dist/assets/useNonce-_2e-GL-A.js +1 -0
  104. package/frontend-dist/assets/x-B0G-wIAB.js +1 -0
  105. package/frontend-dist/index.html +7 -7
  106. package/package.json +1 -1
  107. package/dist/admin/services.d.ts +0 -7
  108. package/dist/admin/services.js +0 -63
  109. package/dist/proxy/retry.d.ts +0 -43
  110. package/dist/proxy/retry.js +0 -121
  111. package/dist/proxy/upstream-call.js +0 -208
  112. package/frontend-dist/assets/CardContent-CucI6u41.js +0 -1
  113. package/frontend-dist/assets/CardHeader-d-DYsWxe.js +0 -1
  114. package/frontend-dist/assets/CardTitle-CIDEQkWB.js +0 -1
  115. package/frontend-dist/assets/Checkbox-CybCw3zS.js +0 -1
  116. package/frontend-dist/assets/CollapsibleTrigger-BFNhb19_.js +0 -1
  117. package/frontend-dist/assets/Collection-DUBb4r6h.js +0 -3
  118. package/frontend-dist/assets/Dashboard-DLB6iqH1.js +0 -3
  119. package/frontend-dist/assets/DialogTitle-Dq-5o7nJ.js +0 -1
  120. package/frontend-dist/assets/Input-HN3Il0-c.js +0 -1
  121. package/frontend-dist/assets/Label-CXAeFn-r.js +0 -1
  122. package/frontend-dist/assets/LogResponseViewer-CyBzv02a.js +0 -3
  123. package/frontend-dist/assets/Login-Br3qsdxf.js +0 -1
  124. package/frontend-dist/assets/Logs-Cu_IftdS.js +0 -1
  125. package/frontend-dist/assets/ModelMappings-DXC0sNH5.js +0 -1
  126. package/frontend-dist/assets/Monitor-CKlid1sC.js +0 -1
  127. package/frontend-dist/assets/PopperContent-CnZejY31.js +0 -1
  128. package/frontend-dist/assets/Providers-8CHhW4uH.js +0 -1
  129. package/frontend-dist/assets/ProxyEnhancement-CkYeXwgH.js +0 -5
  130. package/frontend-dist/assets/RetryRules-Csb7u9W4.js +0 -1
  131. package/frontend-dist/assets/RouterKeys-C6YIufmj.js +0 -1
  132. package/frontend-dist/assets/RovingFocusItem-B7ZIkplZ.js +0 -1
  133. package/frontend-dist/assets/SelectValue-B32pgmTJ.js +0 -1
  134. package/frontend-dist/assets/Setup-Df9IQo2x.js +0 -1
  135. package/frontend-dist/assets/Switch-CLeo7H6d.js +0 -1
  136. package/frontend-dist/assets/TableHeader-BpscAtT3.js +0 -1
  137. package/frontend-dist/assets/TabsTrigger-DErAbTuM.js +0 -1
  138. package/frontend-dist/assets/VisuallyHidden-CJBR3YB3.js +0 -1
  139. package/frontend-dist/assets/VisuallyHiddenInput-Cy0VuE1l.js +0 -1
  140. package/frontend-dist/assets/alert-dialog-BAR1JRmT.js +0 -1
  141. package/frontend-dist/assets/button-D54q76GQ.js +0 -1
  142. package/frontend-dist/assets/client-Mb8fy_bC.js +0 -12
  143. package/frontend-dist/assets/dialog-DSH5k5Kj.js +0 -1
  144. package/frontend-dist/assets/index-BQBtSfem.js +0 -1
  145. package/frontend-dist/assets/index-H-lnTkMr.css +0 -1
  146. package/frontend-dist/assets/lib-BgOqOzXI.js +0 -1
  147. package/frontend-dist/assets/useForwardExpose-CzQFheaD.js +0 -1
  148. package/frontend-dist/assets/useNonce-CU-NirfM.js +0 -1
  149. package/frontend-dist/assets/x-DEJ1xpi5.js +0 -1
@@ -0,0 +1,3 @@
1
+ import{B as e,Bt as t,Dt as n,Et as r,Ft as i,G as a,H as o,K as s,L as c,Lt as l,O as u,U as d,V as f,W as p,at as m,mt as h,n as g,r as _,st as v,yt as y,z as b}from"./button-qxGNBunr.js";import{n as x,r as S,t as C}from"./CollapsibleTrigger-DCRRORrU.js";import{a as w,n as ee,r as T,s as E,t as D}from"./dialog-D8pIXeSs.js";import{a as O,i as k,n as A,o as j,r as M,t as N}from"./TableHeader-BKE_yVML.js";import{i as te,n as P,r as F,t as I}from"./TabsTrigger-D8R7lxaI.js";import{t as L}from"./badge-DIO8W_W9.js";import{n as R}from"./lib-DjpgwSRA.js";import{n as z,t as B}from"./CardContent-fmM_iiuR.js";import{t as ne}from"./CardHeader-BzzFzZ1B.js";import{t as re}from"./useClipboard-CmLp2YGk.js";var V=s({__name:`Skeleton`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(m(),d(`div`,{"data-slot":`skeleton`,class:l(i(_)(`bg-muted rounded-md animate-pulse`,t.class))},null,2))}}),H={class:`relative`},U={class:`bg-background text-foreground rounded-md p-3 text-xs overflow-auto max-h-[40vh] whitespace-pre-wrap break-all border`},ie=s({__name:`JsonCopyBlock`,props:{content:{},hideCopyButton:{type:Boolean}},setup(n){let r=n,{copied:a,copy:s}=re();async function c(){await s(r.content)}return(r,s)=>(m(),d(`div`,H,[n.hideCopyButton?o(``,!0):(m(),f(i(g),{key:0,variant:`outline`,size:`sm`,class:`absolute top-2 right-2 h-7 text-xs`,onClick:c},{default:y(()=>[p(t(i(a)?`已复制`:`复制`),1)]),_:1})),e(`pre`,U,t(n.content),1)]))}}),W={class:`opacity-70`},G=s({__name:`StatPill`,props:{label:{},value:{},highlight:{type:Boolean}},setup(n){return(r,a)=>(m(),f(i(L),{variant:n.highlight?`default`:`secondary`,class:`font-mono text-sm px-3 py-1.5 rounded-md gap-1`},{default:y(()=>[e(`span`,W,t(n.label)+`:`,1),p(` `+t(n.value),1)]),_:1},8,[`variant`]))}}),K=s({__name:`TagPill`,props:{label:{}},setup(e){return(n,r)=>(m(),f(i(L),{variant:`outline`,class:`font-mono text-[10px] rounded-full px-2 py-0.5`},{default:y(()=>[p(t(e.label),1)]),_:1}))}}),q={system:`bg-muted text-muted-foreground`,user:`bg-info-light text-info-dark dark:text-info`,assistant:`bg-success-light text-success-dark dark:text-success`,tool:`bg-warning-light text-warning-dark dark:text-warning`},J={thinking:`bg-info-light text-info-dark dark:text-info`,tool_use:`bg-warning-light text-warning-dark dark:text-warning`,tool_result:`bg-success-light text-success-dark dark:text-success`,text:`bg-success-light text-success-dark dark:text-success`,error:`bg-danger-light text-danger-dark dark:text-danger`},Y={thinking:`border-info`,tool_use:`border-warning`,tool_result:`border-success`,text:`border-success`,error:`border-danger`},ae={"system-reminder":`bg-muted text-muted-foreground`,thinking:`bg-info-light text-info-dark dark:text-info`,"antml:function_calls":`bg-warning-light text-warning-dark dark:text-warning`,"antml:function_results":`bg-success-light text-success-dark dark:text-success`,tool_use:`bg-warning-light text-warning-dark dark:text-warning`,tool_result:`bg-success-light text-success-dark dark:text-success`,"env-info":`bg-info-light text-info-dark dark:text-info`,feedback:`bg-warning-light text-warning-dark dark:text-warning`,error:`bg-danger-light text-danger-dark dark:text-danger`,"local-command-caveat":`bg-muted text-muted-foreground`,"local-command-stdout":`bg-muted text-muted-foreground`,"command-name":`bg-info-light text-info-dark dark:text-info`,"command-message":`bg-info-light text-info-dark dark:text-info`,"command-args":`bg-info-light text-info-dark dark:text-info`},X=`bg-muted text-muted-foreground`,oe=e=>q[e]??X,se=e=>J[e]??X,ce=e=>Y[e]??`border-muted`,le=e=>ae[e]??X,ue={class:`w-8 h-8 rounded-full bg-teal-600 text-white flex items-center justify-center text-xs font-bold`},Z={class:`flex-1`},de={class:`text-sm font-medium text-teal-900 dark:text-teal-100`},Q={key:0,class:`text-xs text-teal-700 dark:text-teal-300`},fe={key:0,class:`text-right text-xs text-teal-700 dark:text-teal-300 space-y-0.5`},pe=s({__name:`InfoBanner`,props:{icon:{},title:{},subtitle:{},details:{}},setup(n){return(r,s)=>(m(),f(i(z),{class:`border-teal-200 dark:border-teal-800`},{default:y(()=>[a(i(B),{class:`p-3 flex items-center gap-3 bg-teal-50 dark:bg-teal-900`},{default:y(()=>[e(`div`,ue,t(n.icon),1),e(`div`,Z,[e(`div`,de,t(n.title),1),n.subtitle?(m(),d(`div`,Q,t(n.subtitle),1)):o(``,!0)]),n.details?.length?(m(),d(`div`,fe,[(m(!0),d(c,null,v(n.details,e=>(m(),d(`div`,{key:e},t(e),1))),128))])):o(``,!0)]),_:1})]),_:1}))}}),me=2,he=/<([a-zA-Z][a-zA-Z0-9:_-]*)(?:\s[^>]*)?>([\s\S]*?)<\/\1>/g;function ge(e){let t=new RegExp(he.source,`g`),n=[],r=0,i;for(;(i=t.exec(e))!==null;){let a=e.slice(r,i.index).trim();a&&n.push({type:`text`,text:a}),n.push({type:i[1],text:i[2]}),r=t.lastIndex}let a=e.slice(r).trim();return a&&n.push({type:`text`,text:a}),n.length>0?n:[{type:`text`,text:e}]}function _e(e){return typeof e==`string`?ge(e):Array.isArray(e)?e.flatMap(e=>{let t=e,n=String(t.type||`unknown`);if(n===`text`&&typeof t.text==`string`)return ge(t.text);if(n===`image`)return[{type:`image`,text:``}];if(n===`tool_use`){let e=String(t.name||``);return[{type:`tool_use`,text:t.input?JSON.stringify(t.input,null,me):``,label:e||void 0}]}if(n===`tool_result`){let e=t.content,n=``;return typeof e==`string`?n=e:Array.isArray(e)&&(n=e.map(e=>typeof e.text==`string`?e.text:JSON.stringify(e)).join(`
2
+ `)),[{type:`tool_result`,text:n}]}return n===`thinking`?[{type:`thinking`,text:String(t.thinking||``)}]:[{type:n,text:typeof t.text==`string`?t.text:``}]}):[{type:`text`,text:String(e??``)}]}var ve={key:0,class:`flex items-center justify-between py-2 border-b mb-2 sticky top-0 z-10 bg-background`},ye={key:0,class:`text-destructive text-sm`},be={key:1,class:`text-xs text-muted-foreground break-all`},xe={class:`flex flex-wrap gap-2`},Se={class:`rounded-md border overflow-hidden mt-1`},Ce={key:2,class:`space-y-2`},we={key:0,class:`text-xs text-muted-foreground`},Te={key:0},Ee={key:0,class:`text-sm`},De={key:1,class:`text-sm whitespace-pre-wrap break-all`},Oe={key:1,class:`text-xs text-muted-foreground`},ke={class:`mt-1 whitespace-pre-wrap break-all text-[11px] bg-muted rounded-md p-2 border`},Ae={key:2,class:`text-xs`},je={key:3},Me={class:`flex flex-wrap gap-1`},Ne={key:4},Pe={key:0},Fe={class:`mt-1 whitespace-pre-wrap break-all text-xs bg-muted rounded p-2 border`},Ie=8,Le=1024,Re=s({__name:`LogRequestViewer`,props:{raw:{},apiType:{},showUrl:{type:Boolean},mode:{}},setup(s){let u=s,h=n(!1),_=r({}),w=n(!1),{copied:ee,copy:T}=re(),E=b(()=>{try{return JSON.parse(u.raw)}catch{return{}}}),D=b(()=>{try{return JSON.parse(u.raw),!1}catch{return!0}});async function R(){await T(u.raw)}let V=b(()=>{let e=E.value.headers||{},t=new Set(Object.keys(e));return Object.entries(e).filter(([e])=>t.has(e)).map(([e,t])=>e.toLowerCase()===`authorization`?[e,`Bearer sk-****`]:[e,t])}),H=b(()=>{let e=E.value.body;if(typeof e==`string`)try{return JSON.parse(e)}catch{return{}}return e||{}}),U=b(()=>(E.value.headers?.[`user-agent`]||``).includes(`claude-cli`)),W=b(()=>{let e=(E.value.headers?.[`user-agent`]||``).match(/claude-cli\/[^\s]+\s+\(([^)]+)\)/);return e?e[1]:`external, cli`}),q=b(()=>{let e=H.value.thinking;return e&&typeof e.budget_tokens==`number`?e.budget_tokens:void 0}),J=b(()=>{let e=H.value.tools;return Array.isArray(e)?e.length:void 0}),Y=b(()=>{let e=[];return q.value!=null&&e.push(`thinking: ${q.value} tokens`),J.value!=null&&e.push(`tools: ${J.value} 个`),e}),ae=b(()=>(H.value.messages||[]).map(e=>{let t=_e(e.content),n={};for(let e of t)e.type!==`text`&&e.text&&(n[e.type]=(n[e.type]||0)+1);let r=new Set(Object.keys(n)),i=Object.entries(n).filter(([e])=>r.has(e)).map(([e,t])=>`${e}${t>1?` x${t}`:``}`).join(`, `)||void 0;return{role:e.role,blocks:t,blockSummary:i}})),X=b(()=>(H.value.tools||[]).map(e=>e.function?.name||e.name||`unknown`).filter(Boolean)),se=b(()=>w.value?X.value:X.value.slice(0,Ie)),ce=b(()=>{let e=H.value.system;return e?Array.isArray(e)?e.map(e=>({type:e.type||`text`,text:e.text||``})):typeof e==`string`?[{type:`text`,text:e}]:[{type:`unknown`,text:JSON.stringify(e)}]:[]}),ue=new Set([`model`,`stream`,`max_tokens`,`thinking`,`messages`,`tools`,`system`]),Z=b(()=>{let e={};for(let t of Object.keys(H.value))ue.has(t)||(e[t]=H.value[t]);return e}),de=b(()=>Object.keys(Z.value));function Q(e){let t=new TextEncoder().encode(e).length;return t<Le?`${t}B`:`${(t/Le).toFixed(1)}KB`}return(n,r)=>(m(),f(i(te),{"default-value":s.mode??`structured`,"model-value":s.mode,class:`w-full`},{default:y(()=>[s.mode?o(``,!0):(m(),d(`div`,ve,[a(i(P),null,{default:y(()=>[a(i(I),{value:`structured`},{default:y(()=>[...r[2]||=[p(`结构化`,-1)]]),_:1}),a(i(I),{value:`raw`},{default:y(()=>[...r[3]||=[p(`原始 JSON`,-1)]]),_:1})]),_:1}),a(i(g),{variant:`ghost`,size:`xs`,class:`h-auto py-1`,onClick:R},{default:y(()=>[p(t(i(ee)?`已复制`:`复制 JSON`),1)]),_:1})])),a(i(F),{value:`structured`,class:`space-y-3`},{default:y(()=>[D.value?(m(),d(`div`,ye,`解析失败,请切换到原始 JSON 查看`)):(m(),d(c,{key:1},[U.value?(m(),f(pe,{key:0,icon:`CC`,title:`Claude Code 请求`,subtitle:`user-agent: ${W.value}`,details:Y.value},null,8,[`subtitle`,`details`])):o(``,!0),s.showUrl&&E.value.url?(m(),d(`div`,be,t(E.value.url),1)):o(``,!0),e(`div`,xe,[E.value.body?.model?(m(),f(G,{key:0,label:`model`,value:String(E.value.body.model),highlight:!0},null,8,[`value`])):o(``,!0),E.value.body?.stream==null?o(``,!0):(m(),f(G,{key:1,label:`stream`,value:String(E.value.body.stream)},null,8,[`value`])),E.value.body?.max_tokens==null?o(``,!0):(m(),f(G,{key:2,label:`max_tokens`,value:String(E.value.body.max_tokens)},null,8,[`value`])),E.value.body?.thinking==null?o(``,!0):(m(),f(K,{key:3,label:`thinking`}))]),a(i(S),{open:h.value,"onUpdate:open":r[0]||=e=>h.value=e},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:y(()=>[p(` Headers (`+t(V.value.length)+` 个) `,1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,Se,[a(i(j),null,{default:y(()=>[a(i(N),null,{default:y(()=>[a(i(M),null,{default:y(()=>[a(i(A),{class:`w-1/3`},{default:y(()=>[...r[4]||=[p(`Key`,-1)]]),_:1}),a(i(A),null,{default:y(()=>[...r[5]||=[p(`Value`,-1)]]),_:1})]),_:1})]),_:1}),a(i(O),null,{default:y(()=>[(m(!0),d(c,null,v(V.value,([e,n])=>(m(),f(i(M),{key:e},{default:y(()=>[a(i(k),{class:`font-medium`},{default:y(()=>[p(t(e),1)]),_:2},1024),a(i(k),{class:`break-all`},{default:y(()=>[p(t(n),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})])]),_:1})]),_:1},8,[`open`]),ae.value.length?(m(),d(`div`,Ce,[r[7]||=e(`div`,{class:`text-xs font-medium text-muted-foreground`},`Messages`,-1),(m(!0),d(c,null,v(ae.value,(n,s)=>(m(),f(i(z),{key:s,class:`bg-muted/40`},{default:y(()=>[a(i(ne),{class:`pb-2 flex flex-row items-center gap-2`},{default:y(()=>[a(i(L),{class:l(i(oe)(n.role))},{default:y(()=>[p(t(n.role),1)]),_:2},1032,[`class`]),n.blockSummary?(m(),d(`span`,we,t(n.blockSummary),1)):o(``,!0)]),_:2},1024),a(i(B),{class:`space-y-2`},{default:y(()=>[(m(!0),d(c,null,v(n.blocks,(n,o)=>(m(),d(`div`,{key:o},[n.type===`text`?(m(),d(`div`,Te,[n.text.length>120&&!_[`${s}-${o}`]?(m(),d(`div`,Ee,[p(t(n.text.slice(0,120))+` `,1),a(i(g),{variant:`link`,size:`xs`,class:`px-0 h-auto`,onClick:e=>_[`${s}-${o}`]=!0},{default:y(()=>[...r[6]||=[p(`展开`,-1)]]),_:1},8,[`onClick`])])):(m(),d(`div`,De,t(n.text),1))])):n.text?(m(),d(`div`,Oe,[a(i(S),null,{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:y(()=>[a(i(L),{class:l([i(le)(n.type),`mr-1`])},{default:y(()=>[p(t(n.label||n.type),1)]),_:2},1032,[`class`]),p(` `+t(Q(n.text)),1)]),_:2},1024)]),_:2},1024),a(i(x),null,{default:y(()=>[e(`pre`,ke,t(n.text),1)]),_:2},1024)]),_:2},1024)])):(m(),d(`div`,Ae,[a(i(L),{class:l([i(le)(n.type),`mr-1`])},{default:y(()=>[p(t(n.label||n.type),1)]),_:2},1032,[`class`])]))]))),128))]),_:2},1024)]),_:2},1024))),128))])):o(``,!0),X.value.length?(m(),d(`div`,je,[r[8]||=e(`div`,{class:`text-xs font-medium text-muted-foreground mb-1`},`Tools`,-1),e(`div`,Me,[(m(!0),d(c,null,v(se.value,e=>(m(),f(K,{key:e,label:e},null,8,[`label`]))),128)),X.value.length>8?(m(),f(i(g),{key:0,variant:`ghost`,size:`xs`,class:`px-1 h-5`,onClick:r[1]||=e=>w.value=!w.value},{default:y(()=>[p(t(w.value?`收起`:`+${X.value.length-8}`),1)]),_:1})):o(``,!0)])])):o(``,!0),ce.value.length?(m(),d(`div`,Ne,[r[9]||=e(`div`,{class:`text-xs font-medium text-muted-foreground mb-1`},`System`,-1),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`space-y-2`},{default:y(()=>[(m(!0),d(c,null,v(ce.value,(e,n)=>(m(),d(`div`,{key:n,class:`text-sm whitespace-pre-wrap break-all`},[a(i(L),{variant:`outline`,class:`mb-1`},{default:y(()=>[p(t(e.type),1)]),_:2},1024),e.text?(m(),d(`div`,Pe,t(e.text),1)):o(``,!0)]))),128))]),_:1})]),_:1})])):o(``,!0),de.value.length?(m(),f(i(S),{key:5},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,size:`xs`,class:`px-0 h-auto`},{default:y(()=>[...r[10]||=[p(` 其他字段 `,-1)]]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`pre`,Fe,t(JSON.stringify(Z.value,null,2)),1)]),_:1})]),_:1})):o(``,!0)],64))]),_:1}),a(i(F),{value:`raw`},{default:y(()=>[a(ie,{content:s.raw,"hide-copy-button":``},null,8,[`content`])]),_:1})]),_:1},8,[`default-value`,`model-value`]))}}),ze={class:`text-xs text-foreground`},$=s({__name:`SseEventLine`,props:{eventType:{},summary:{},highlight:{type:Boolean}},setup(n){return(r,i)=>(m(),d(`div`,{class:l([`px-3 py-2 flex items-center gap-2`,n.highlight?`bg-warning/10`:``])},[e(`span`,{class:l([`px-1.5 py-0.5 rounded text-[10px] font-medium`,{"bg-teal-200 text-teal-700 dark:bg-teal-800 dark:text-teal-300":n.eventType===`message_start`,"bg-teal-300 text-teal-700 dark:bg-teal-700 dark:text-teal-200":n.eventType===`content_block_start`,"bg-muted text-muted-foreground":n.eventType===`content_block_delta`,"bg-teal-500 text-white dark:bg-teal-600":n.eventType===`message_delta`,"bg-success-light text-success":n.eventType===`message_stop`}])},t(n.eventType),3),e(`span`,ze,t(n.summary),1)],2))}}),Be=5,Ve=2,He=3;function Ue(e,t,n){let r=b(()=>{if(!t||!e.value)return[];let n=e.value.split(`
3
+ `),r=[];for(let e of n){let t=e.trim();if(!t.startsWith(`data:`))continue;let n=t.slice(Be).trim();if(n===`[DONE]`){r.push({type:`done`,data:n});continue}try{let e=JSON.parse(n);r.push({type:`data`,data:e})}catch{r.push({type:`raw`,data:n})}}return r});return{sseEvents:r,assembledBlocks:b(()=>{if(!t||!e.value)return[];let n=[],i=null;for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`content_block_start`){let e=t.content_block;if(i={type:String(e?.type||``),content:``,eventCount:0,toolName:e?.name?String(e.name):void 0},i.type===`tool_use`&&e?.input){let t=e.input;Object.keys(t).length>0&&(i.content=JSON.stringify(t,null,Ve))}continue}if(t.type===`content_block_delta`&&i){let e=t.delta;i.content+=e.thinking||e.text||e.partial_json||``,i.eventCount++;continue}t.type===`content_block_stop`&&i&&(n.push(i),i=null)}return i&&n.push(i),n}),sseMeta:b(()=>{let e=``,t=``,n=0,i=0,a=``;for(let o of r.value){if(o.type!==`data`)continue;let r=o.data;if(r.type===`message_start`){let i=r.message;e=String(i?.id||``),t=String(i?.model||``),n=Number(i?.usage?.input_tokens??0)}if(r.type===`message_delta`){let e=r.delta,t=r.usage;a=String(e?.stop_reason||``),i=Number(t?.output_tokens??0)}}return{id:e,model:t,inputTokens:n,outputTokens:i,stopReason:a}}),openaiAssembled:b(()=>{if(n!==`openai`||!t)return null;let e=``,i=``,a=``,o=null,s=0;for(let t of r.value){if(t.type!==`data`)continue;let n=t.data,r=n.choices||[],c=r[0]?.delta;c?.role&&(e=String(c.role)),c?.content&&(i+=String(c.content),s++),r[0]?.finish_reason&&(a=String(r[0].finish_reason)),n.usage&&(o=n.usage)}return{role:e,content:i,contentEventCount:s,finishReason:a,usage:o}}),anthropicMessageStart:b(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`message_start`){let e=t.message;return{id:String(e?.id||``),model:String(e?.model||``),input_tokens:Number(e?.usage?.input_tokens??0)}}}return null}),anthropicContentBlockStarts:b(()=>{let e=[];for(let t of r.value){if(t.type!==`data`)continue;let n=t.data;if(n.type===`content_block_start`){let t=n.content_block;e.push({index:Number(n.index??0),type:String(t?.type||``)})}}return e}),anthropicDeltaGroups:b(()=>{let e={};for(let t of r.value){if(t.type!==`data`)continue;let n=t.data;if(n.type!==`content_block_delta`)continue;let r=n.delta,i=String(r?.type||`unknown`);e[i]||(e[i]={deltaType:i,kept:0,folded:0,foldedChars:0});let a=e[i];if(a.kept<He)a.kept++;else{a.folded++;let e=r,t=String(e.thinking||e.text||e.partial_json||``);a.foldedChars+=t.length}}return Object.values(e).filter(e=>e.kept>0||e.folded>0)}),anthropicMessageDelta:b(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=e.data;if(t.type===`message_delta`){let e=t.delta,n=t.usage;return{output_tokens:Number(n?.output_tokens??0),stop_reason:String(e?.stop_reason||``)}}}return null}),anthropicMessageStop:b(()=>r.value.some(e=>e.type===`data`&&e.data.type===`message_stop`)),openaiSseRole:b(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.delta;if(t?.role)return String(t.role)}return null}),openaiSseFirstContent:b(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.delta;if(t?.content)return String(t.content)}return null}),openaiSseFinishReason:b(()=>{for(let e of r.value){if(e.type!==`data`)continue;let t=(e.data.choices||[])[0]?.finish_reason;if(t)return String(t)}return null}),openaiSseCollapsedCount:b(()=>{let e=0,t=!1;for(let n of r.value){if(n.type!==`data`)continue;let r=(n.data.choices||[])[0]?.delta;if(!t){r?.content&&(t=!0);continue}(r?.content||r?.role)&&e++}return e}),openaiSseUsage:b(()=>{for(let e=r.value.length-1;e>=0;e--){let t=r.value[e];if(t.type!==`data`)continue;let n=t.data.usage;if(n)return{prompt_tokens:n.prompt_tokens,completion_tokens:n.completion_tokens,total_tokens:n.total_tokens,cached_tokens:n.cached_tokens??n.prompt_tokens_details?.cached_tokens}}return null})}}var We={key:0,class:`flex items-center justify-between py-2 border-b mb-2 sticky top-0 z-10 bg-background`},Ge={key:0,class:`text-destructive text-sm`},Ke={class:`flex items-center gap-2`},qe={class:`rounded-md border overflow-hidden mt-1`},Je={class:`flex flex-wrap gap-2`},Ye={key:0,class:`space-y-2`},Xe={class:`mt-1 whitespace-pre-wrap break-all text-xs bg-muted rounded-md p-2 border`},Ze={key:1,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},Qe={class:`font-medium`},$e={class:`font-medium`},et={class:`font-medium`},tt={class:`font-medium`},nt={class:`flex flex-wrap gap-2`},rt={key:0,class:`space-y-2`},it={class:`flex items-center gap-2 mb-2`},at={key:0,class:`text-sm`},ot={key:1,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},st={class:`font-medium`},ct={class:`font-medium`},lt={class:`font-medium`},ut={class:`font-medium`},dt={key:1,class:`space-y-3`},ft={class:`flex gap-1`},pt={class:`flex flex-wrap gap-2`},mt={class:`flex items-center gap-2 mb-2`},ht={class:`text-xs text-muted-foreground`},gt={key:0,class:`text-xs font-mono`},_t={class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 border`},vt={key:1,class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 border max-h-[40vh] overflow-auto`},yt={class:`flex flex-wrap gap-2`},bt={class:`flex flex-wrap gap-2`},xt={class:`whitespace-pre-wrap break-all text-sm bg-muted rounded-md p-3 max-h-[40vh] overflow-auto`},St={key:0,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},Ct={class:`font-medium`},wt={class:`font-medium`},Tt={class:`font-medium`},Et={key:0,class:`text-sm`},Dt={key:1,class:`text-sm`},Ot={key:2,class:`text-sm`},kt={key:3,class:`text-xs text-muted-foreground`},At={key:4,class:`grid grid-cols-2 sm:grid-cols-4 gap-2`},jt={class:`font-medium`},Mt={class:`font-medium`},Nt={class:`font-medium`},Pt={class:`font-medium`},Ft=400,It=s({__name:`LogResponseViewer`,props:{raw:{},apiType:{},isStream:{type:Boolean},mode:{}},setup(s){let u=s,h=b(()=>{try{return JSON.parse(u.raw)}catch{return null}}),_=b(()=>h.value===null),w=b(()=>(h.value?.statusCode??0)>=Ft?`destructive`:`default`),ee=b(()=>{let e=h.value?.headers||{};return Object.entries(e)}),T=b(()=>{if(!u.isStream&&h.value?.body)try{return JSON.parse(h.value.body)}catch{return{}}return{}}),E=b(()=>(T.value.choices||[]).map(e=>({role:e.message?.role||`assistant`,content:e.message?.content||``,finish_reason:e.finish_reason||``}))),D=b(()=>{let e=T.value.usage;return e?{prompt_tokens:e.prompt_tokens,completion_tokens:e.completion_tokens,total_tokens:e.total_tokens,cached_tokens:e.cached_tokens??e.prompt_tokens_details?.cached_tokens}:null}),R=b(()=>T.value.content||[]),V=b(()=>{let e=T.value.usage;return e?{input_tokens:e.input_tokens,output_tokens:e.output_tokens,cache_creation_input_tokens:e.cache_creation_input_tokens,cache_read_input_tokens:e.cache_read_input_tokens}:null}),{assembledBlocks:H,sseMeta:U,openaiAssembled:W,anthropicMessageStart:K,anthropicContentBlockStarts:q,anthropicDeltaGroups:J,anthropicMessageDelta:Y,anthropicMessageStop:ae,openaiSseRole:X,openaiSseFirstContent:oe,openaiSseFinishReason:le,openaiSseCollapsedCount:ue,openaiSseUsage:Z}=Ue(b(()=>h.value?.body),u.isStream,u.apiType),de=r({}),Q=n(`assembled`),{copied:fe,copy:pe}=re();async function me(){await pe(u.raw)}return(n,r)=>(m(),f(i(te),{"default-value":s.mode??`structured`,"model-value":s.mode,class:`w-full`},{default:y(()=>[s.mode?o(``,!0):(m(),d(`div`,We,[a(i(P),null,{default:y(()=>[a(i(I),{value:`structured`},{default:y(()=>[...r[2]||=[p(`结构化`,-1)]]),_:1}),a(i(I),{value:`raw`},{default:y(()=>[p(t(s.isStream?`原始 SSE 文本`:`原始 JSON`),1)]),_:1})]),_:1}),a(i(g),{variant:`ghost`,size:`xs`,class:`h-auto py-1`,onClick:me},{default:y(()=>[p(t(i(fe)?`已复制`:`复制`),1)]),_:1})])),a(i(F),{value:`structured`,class:`space-y-3`},{default:y(()=>[_.value?(m(),d(`div`,Ge,`解析失败,请切换到原始 JSON 查看`)):(m(),d(c,{key:1},[e(`div`,Ke,[a(i(L),{variant:w.value},{default:y(()=>[p(`status: `+t(h.value.statusCode),1)]),_:1},8,[`variant`])]),a(i(S),null,{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,size:`xs`,class:`px-0 h-auto text-xs`},{default:y(()=>[p(` Headers (`+t(ee.value.length)+` 个) `,1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,qe,[a(i(j),null,{default:y(()=>[a(i(N),null,{default:y(()=>[a(i(M),null,{default:y(()=>[a(i(A),{class:`w-1/3`},{default:y(()=>[...r[3]||=[p(`Key`,-1)]]),_:1}),a(i(A),null,{default:y(()=>[...r[4]||=[p(`Value`,-1)]]),_:1})]),_:1})]),_:1}),a(i(O),null,{default:y(()=>[(m(!0),d(c,null,v(ee.value,([e,n])=>(m(),f(i(M),{key:e},{default:y(()=>[a(i(k),{class:`font-medium`},{default:y(()=>[p(t(e),1)]),_:2},1024),a(i(k),{class:`break-all`},{default:y(()=>[p(t(n),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})])]),_:1})]),_:1}),s.isStream?(m(),d(`div`,dt,[e(`div`,ft,[a(i(g),{variant:`ghost`,class:l([Q.value===`assembled`?`bg-secondary`:``,`h-auto py-1`]),size:`xs`,onClick:r[0]||=e=>Q.value=`assembled`},{default:y(()=>[...r[16]||=[p(`完整响应`,-1)]]),_:1},8,[`class`]),a(i(g),{variant:`ghost`,class:l([Q.value===`raw-events`?`bg-secondary`:``,`h-auto py-1`]),size:`xs`,onClick:r[1]||=e=>Q.value=`raw-events`},{default:y(()=>[...r[17]||=[p(`原始事件流`,-1)]]),_:1},8,[`class`])]),Q.value===`assembled`?(m(),d(c,{key:0},[s.apiType===`anthropic`?(m(),d(c,{key:0},[e(`div`,pt,[i(U).id?(m(),f(G,{key:0,label:`id`,value:i(U).id},null,8,[`value`])):o(``,!0),i(U).model?(m(),f(G,{key:1,label:`model`,value:i(U).model,highlight:!0},null,8,[`value`])):o(``,!0),a(G,{label:`input`,value:String(i(U).inputTokens)},null,8,[`value`])]),(m(!0),d(c,null,v(i(H),(n,s)=>(m(),d(`div`,{key:s,class:l([`rounded-md border p-3`,i(ce)(n.type)])},[e(`div`,mt,[a(i(L),{class:l(i(se)(n.type))},{default:y(()=>[p(t(n.type),1)]),_:2},1032,[`class`]),e(`span`,ht,t(n.eventCount)+` 个 delta 事件`,1),n.toolName?(m(),d(`span`,gt,t(n.toolName),1)):o(``,!0)]),n.content.length>500&&!de[s]?(m(),d(c,{key:0},[e(`pre`,_t,t(n.content.slice(0,500))+`...`,1),a(i(g),{variant:`link`,size:`xs`,class:`px-0`,onClick:e=>de[s]=!0},{default:y(()=>[...r[18]||=[p(`展开全部`,-1)]]),_:1},8,[`onClick`])],64)):(m(),d(`pre`,vt,t(n.content),1))],2))),128)),e(`div`,yt,[a(G,{label:`stop_reason`,value:i(U).stopReason||`-`},null,8,[`value`]),a(G,{label:`output_tokens`,value:String(i(U).outputTokens||`-`)},null,8,[`value`])])],64)):o(``,!0),s.apiType===`openai`&&i(W)?(m(),d(c,{key:1},[e(`div`,bt,[i(W).role?(m(),f(G,{key:0,label:`role`,value:i(W).role},null,8,[`value`])):o(``,!0),a(G,{label:`content delta`,value:String(i(W).contentEventCount)},null,8,[`value`]),i(W).finishReason?(m(),f(G,{key:1,label:`finish`,value:i(W).finishReason},null,8,[`value`])):o(``,!0)]),e(`div`,{class:l([`rounded-md border p-3`,i(ce)(`text`)])},[e(`pre`,xt,t(i(W).content),1)],2),i(W).usage?(m(),d(`div`,St,[a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[19]||=e(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),e(`div`,Ct,t(i(W).usage.prompt_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[20]||=e(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),e(`div`,wt,t(i(W).usage.completion_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[21]||=e(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),e(`div`,Tt,t(i(W).usage.total_tokens??`-`),1)]),_:1})]),_:1})])):o(``,!0)],64)):o(``,!0)],64)):o(``,!0),Q.value===`raw-events`?(m(),d(c,{key:1},[s.apiType===`openai`?(m(),d(c,{key:0},[i(X)?(m(),d(`div`,Et,[r[22]||=e(`span`,{class:`text-muted-foreground`},`role:`,-1),p(` `+t(i(X)),1)])):o(``,!0),i(oe)?(m(),d(`div`,Dt,[r[23]||=e(`span`,{class:`text-muted-foreground`},`first content delta:`,-1),p(` `+t(i(oe)),1)])):o(``,!0),i(le)?(m(),d(`div`,Ot,[r[24]||=e(`span`,{class:`text-muted-foreground`},`finish_reason:`,-1),p(` `+t(i(le)),1)])):o(``,!0),i(ue)>0?(m(),d(`div`,kt,` +`+t(i(ue))+` 个 delta 事件已折叠 `,1)):o(``,!0),i(Z)?(m(),d(`div`,At,[a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[25]||=e(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),e(`div`,jt,t(i(Z).prompt_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[26]||=e(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),e(`div`,Mt,t(i(Z).completion_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[27]||=e(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),e(`div`,Nt,t(i(Z).total_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[28]||=e(`div`,{class:`text-muted-foreground`},`cached_tokens`,-1),e(`div`,Pt,t(i(Z).cached_tokens??`-`),1)]),_:1})]),_:1})])):o(``,!0)],64)):o(``,!0),s.apiType===`anthropic`?(m(),d(c,{key:1},[i(K)?(m(),f($,{key:0,"event-type":`message_start`,summary:`id=${i(K).id} model=${i(K).model} input_tokens=${i(K).input_tokens}`},null,8,[`summary`])):o(``,!0),(m(!0),d(c,null,v(i(q),(e,t)=>(m(),f($,{key:`cbs-`+t,"event-type":`content_block_start`,summary:`[${e.index}] ${e.type}`},null,8,[`summary`]))),128)),(m(!0),d(c,null,v(i(J),(e,t)=>(m(),f($,{key:`dg-`+t,"event-type":`content_block_delta`,summary:`${e.deltaType} · keep ${e.kept} 个${e.folded>0?` +${e.folded} 个已折叠 (${e.foldedChars} 字符)`:``}`},null,8,[`summary`]))),128)),i(Y)?(m(),f($,{key:1,"event-type":`message_delta`,summary:`output_tokens=${i(Y).output_tokens} stop_reason=${i(Y).stop_reason}`,highlight:!0},null,8,[`summary`])):o(``,!0),i(ae)?(m(),f($,{key:2,"event-type":`message_stop`,summary:`流结束`})):o(``,!0)],64)):o(``,!0)],64)):o(``,!0)])):(m(),d(c,{key:0},[s.apiType===`openai`?(m(),d(c,{key:0},[e(`div`,Je,[T.value.id?(m(),f(G,{key:0,label:`id`,value:String(T.value.id)},null,8,[`value`])):o(``,!0),T.value.model?(m(),f(G,{key:1,label:`model`,value:String(T.value.model),highlight:!0},null,8,[`value`])):o(``,!0),T.value.system_fingerprint?(m(),f(G,{key:2,label:`fingerprint`,value:String(T.value.system_fingerprint)},null,8,[`value`])):o(``,!0)]),E.value.length?(m(),d(`div`,Ye,[r[6]||=e(`div`,{class:`text-xs font-medium text-muted-foreground`},`Choices`,-1),(m(!0),d(c,null,v(E.value,(n,s)=>(m(),f(i(z),{key:s,class:`bg-muted/40`},{default:y(()=>[a(i(ne),{class:`pb-2 flex flex-row items-center gap-2`},{default:y(()=>[a(i(L),{variant:`secondary`},{default:y(()=>[p(t(n.role||`assistant`),1)]),_:2},1024),n.finish_reason?(m(),f(i(L),{key:0,variant:`outline`},{default:y(()=>[p(t(n.finish_reason),1)]),_:2},1024)):o(``,!0)]),_:2},1024),a(i(B),null,{default:y(()=>[a(i(S),null,{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,size:`xs`,class:`px-0 h-auto text-xs`},{default:y(()=>[...r[5]||=[p(`内容`,-1)]]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`pre`,Xe,t(n.content),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))])):o(``,!0),D.value?(m(),d(`div`,Ze,[a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[7]||=e(`div`,{class:`text-muted-foreground`},`prompt_tokens`,-1),e(`div`,Qe,t(D.value.prompt_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[8]||=e(`div`,{class:`text-muted-foreground`},`completion_tokens`,-1),e(`div`,$e,t(D.value.completion_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[9]||=e(`div`,{class:`text-muted-foreground`},`total_tokens`,-1),e(`div`,et,t(D.value.total_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[10]||=e(`div`,{class:`text-muted-foreground`},`cached_tokens`,-1),e(`div`,tt,t(D.value.cached_tokens??`-`),1)]),_:1})]),_:1})])):o(``,!0)],64)):o(``,!0),s.apiType===`anthropic`?(m(),d(c,{key:1},[e(`div`,nt,[T.value.id?(m(),f(G,{key:0,label:`id`,value:String(T.value.id)},null,8,[`value`])):o(``,!0),T.value.type?(m(),f(G,{key:1,label:`type`,value:String(T.value.type)},null,8,[`value`])):o(``,!0),T.value.model?(m(),f(G,{key:2,label:`model`,value:String(T.value.model),highlight:!0},null,8,[`value`])):o(``,!0),T.value.stop_reason?(m(),f(G,{key:3,label:`stop_reason`,value:String(T.value.stop_reason)},null,8,[`value`])):o(``,!0)]),R.value.length?(m(),d(`div`,rt,[r[11]||=e(`div`,{class:`text-xs font-medium text-muted-foreground`},`Content`,-1),(m(!0),d(c,null,v(R.value,(n,r)=>(m(),d(`div`,{key:r,class:`rounded-md border p-3`},[e(`div`,it,[a(i(L),{class:l(i(se)(n.type))},{default:y(()=>[p(t(n.type),1)]),_:2},1032,[`class`]),n.text?(m(),d(`span`,at,t(n.text),1)):o(``,!0)])]))),128))])):o(``,!0),V.value?(m(),d(`div`,ot,[a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[12]||=e(`div`,{class:`text-muted-foreground`},`input_tokens`,-1),e(`div`,st,t(V.value.input_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[13]||=e(`div`,{class:`text-muted-foreground`},`output_tokens`,-1),e(`div`,ct,t(V.value.output_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[14]||=e(`div`,{class:`text-muted-foreground`},`cache_creation`,-1),e(`div`,lt,t(V.value.cache_creation_input_tokens??`-`),1)]),_:1})]),_:1}),a(i(z),{class:`bg-muted/40`},{default:y(()=>[a(i(B),{class:`py-2 px-3 text-xs`},{default:y(()=>[r[15]||=e(`div`,{class:`text-muted-foreground`},`cache_read`,-1),e(`div`,ut,t(V.value.cache_read_input_tokens??`-`),1)]),_:1})]),_:1})])):o(``,!0)],64)):o(``,!0)],64))],64))]),_:1}),a(i(F),{value:`raw`},{default:y(()=>[a(ie,{content:s.raw,"hide-copy-button":``},null,8,[`content`])]),_:1})]),_:1},8,[`default-value`,`model-value`]))}}),Lt={key:0,class:`font-mono text-xs text-muted-foreground font-normal select-all`},Rt={key:0,class:`space-y-3 py-4`},zt={class:`p-4`},Bt={class:`p-4`},Vt={class:`p-4`},Ht={class:`p-4`},Ut={key:2,class:`py-8 text-center text-muted-foreground`},Wt=s({__name:`LogDetailDialog`,props:{open:{type:Boolean,required:!0},openModifiers:{}},emits:[`update:open`],setup(s,{expose:_}){let O=h(s,`open`),k=n(!1),A=n(null),j=n([!0,!1,!1,!1]),M=r({client_request:`structured`,upstream_request:`structured`,upstream_response:`structured`,client_response:`structured`}),N=b(()=>A.value?.api_type===`openai`?`openai`:`anthropic`),te=b(()=>{let e=A.value;if(!e)return`{}`;if(!e.client_request)return e.request_body||`{}`;try{let t=JSON.parse(e.client_request);if(t.body!=null)return e.client_request;if(e.request_body){try{t.body=JSON.parse(e.request_body)}catch{t.body=e.request_body}return JSON.stringify(t)}}catch{return e.client_request}return e.client_request}),P=b(()=>{let e=A.value;return e?e.client_response?e.client_response:e.response_body?JSON.stringify({statusCode:e.status_code,body:e.response_body}):``:``});async function F(e){k.value=!0,A.value=null,j.value=[!0,!1,!1,!1],Object.assign(M,{client_request:`structured`,upstream_request:`structured`,upstream_response:`structured`,client_response:`structured`});try{A.value=(await u.getLogDetail(e)).data}catch(e){console.error(`Failed to load log detail:`,e),R.error(`加载日志详情失败`)}finally{k.value=!1}}return _({load:F}),(n,r)=>(m(),f(i(E),{open:O.value,"onUpdate:open":r[4]||=e=>O.value=e},{default:y(()=>[a(i(ee),{class:`max-w-4xl max-h-[85vh]`},{default:y(()=>[a(i(T),null,{default:y(()=>[a(i(D),null,{default:y(()=>[r[5]||=p(`请求详情 `,-1),A.value?(m(),d(`span`,Lt,t(A.value.id.slice(0,8)),1)):o(``,!0)]),_:1}),a(i(w),{class:`sr-only`},{default:y(()=>[...r[6]||=[p(`请求日志详情`,-1)]]),_:1})]),_:1}),k.value?(m(),d(`div`,Rt,[a(i(V),{class:`h-6 w-48`}),(m(),d(c,null,v(4,e=>a(i(V),{key:e,class:`h-12 w-full`})),64))])):A.value?(m(),d(c,{key:1},[a(i(S),{open:j.value[0],"onUpdate:open":r[0]||=e=>j.value[0]=e,class:`border rounded-md mb-2`},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,j.value[0]?``:`-rotate-90`])},`▼`,2),r[7]||=p(` 客户端原始请求 `,-1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,zt,[a(Re,{raw:te.value,"api-type":N.value,mode:M.client_request},null,8,[`raw`,`api-type`,`mode`])])]),_:1})]),_:1},8,[`open`]),A.value.upstream_request?(m(),f(i(S),{key:0,open:j.value[1],"onUpdate:open":r[1]||=e=>j.value[1]=e,class:`border rounded-md mb-2`},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,j.value[1]?``:`-rotate-90`])},`▼`,2),r[8]||=p(` Router → LLM API 请求 `,-1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,Bt,[a(Re,{raw:A.value.upstream_request,"api-type":N.value,"show-url":!0,mode:M.upstream_request},null,8,[`raw`,`api-type`,`mode`])])]),_:1})]),_:1},8,[`open`])):o(``,!0),A.value.upstream_response||A.value.response_body?(m(),f(i(S),{key:1,open:j.value[2],"onUpdate:open":r[2]||=e=>j.value[2]=e,class:`border rounded-md mb-2`},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,j.value[2]?``:`-rotate-90`])},`▼`,2),r[9]||=p(` LLM API 返回的原始响应 `,-1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,Vt,[a(It,{raw:A.value.upstream_response||A.value.response_body||`{}`,"api-type":N.value,"is-stream":!!A.value.is_stream,mode:M.upstream_response},null,8,[`raw`,`api-type`,`is-stream`,`mode`])])]),_:1})]),_:1},8,[`open`])):o(``,!0),P.value?(m(),f(i(S),{key:2,open:j.value[3],"onUpdate:open":r[3]||=e=>j.value[3]=e,class:`border rounded-md`},{default:y(()=>[a(i(C),{"as-child":``},{default:y(()=>[a(i(g),{variant:`ghost`,class:`w-full px-4 py-3 text-left text-sm font-medium text-foreground bg-muted/50 hover:bg-muted rounded-md flex items-center gap-2`},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,j.value[3]?``:`-rotate-90`])},`▼`,2),r[10]||=p(` Router → 客户端响应 `,-1)]),_:1})]),_:1}),a(i(x),null,{default:y(()=>[e(`div`,Ht,[a(It,{raw:P.value,"api-type":N.value,"is-stream":!!A.value.is_stream,mode:M.client_response},null,8,[`raw`,`api-type`,`is-stream`,`mode`])])]),_:1})]),_:1},8,[`open`])):o(``,!0),A.value.error_message?(m(),f(i(z),{key:3,class:`bg-destructive/10 ring-destructive/20 mt-2`},{default:y(()=>[a(i(B),{class:`py-3 text-sm text-destructive`},{default:y(()=>[p(t(A.value.error_message),1)]),_:1})]),_:1})):o(``,!0)],64)):(m(),d(`div`,Ut,`未找到日志`))]),_:1})]),_:1},8,[`open`]))}});export{V as n,Wt as t};
@@ -0,0 +1 @@
1
+ import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as o,K as s,O as c,U as l,W as u,at as d,j as f,n as p,yt as m}from"./button-qxGNBunr.js";import{t as h}from"./Label-DjtouWZ7.js";import{n as g,t as _}from"./CardContent-fmM_iiuR.js";import{t as v}from"./Input-BhvZ-Up7.js";var y={class:`min-h-screen flex items-center justify-center bg-background`},b={key:0,class:`text-destructive text-sm`},x=s({__name:`Login`,setup(s){let x=f(),S=n(``),C=n(``),w=n(!1);async function T(){if(S.value){C.value=``,w.value=!0;try{await c.login(S.value),x.push(`/`)}catch(e){C.value=e.response?.data?.error?.message||`登录失败`}finally{w.value=!1}}}return(n,s)=>(d(),l(`div`,y,[i(r(g),{class:`w-full max-w-sm shadow-lg`},{default:m(()=>[i(r(_),{class:`pt-6`},{default:m(()=>[s[2]||=e(`div`,{class:`text-center mb-6`},[e(`div`,{class:`w-12 h-12 bg-primary rounded-lg mx-auto mb-3 flex items-center justify-center`},[e(`svg`,{class:`w-7 h-7 text-white`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])]),e(`h1`,{class:`text-xl font-semibold text-foreground`},`LLM Simple Router`),e(`p`,{class:`text-sm text-muted-foreground mt-1`},`管理后台登录`)],-1),e(`form`,{onSubmit:o(T,[`prevent`]),class:`space-y-4`},[e(`div`,null,[i(r(h),{class:`block text-sm font-medium text-foreground mb-1`},{default:m(()=>[...s[1]||=[u(`密码`,-1)]]),_:1}),i(r(v),{modelValue:S.value,"onUpdate:modelValue":s[0]||=e=>S.value=e,type:`password`,placeholder:`输入管理员密码`,disabled:w.value},null,8,[`modelValue`,`disabled`])]),C.value?(d(),l(`p`,b,t(C.value),1)):a(``,!0),i(r(p),{type:`submit`,class:`w-full`,disabled:w.value},{default:m(()=>[u(t(w.value?`登录中...`:`登 录`),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})]))}});export{x as default};
@@ -0,0 +1 @@
1
+ import{B as e,Bt as t,Ct as n,Dt as r,Ft as i,G as a,H as o,K as s,L as c,Lt as l,O as u,U as d,V as f,W as p,at as m,gt as h,n as g,nt as _,st as v,yt as y,z as b}from"./button-qxGNBunr.js";import{a as x,i as S,n as C,r as w,t as T}from"./SelectValue-CP4Sh7LP.js";import{i as ee,o as te,r as ne,s as re,t as ie}from"./dialog-D8pIXeSs.js";import{a as ae,i as E,n as D,o as oe,r as O,t as se}from"./TableHeader-BKE_yVML.js";import{t as ce}from"./Label-DjtouWZ7.js";import{t as k}from"./badge-DIO8W_W9.js";import{n as A}from"./lib-DjpgwSRA.js";import{t as j}from"./Input-BhvZ-Up7.js";import{n as le,t as ue}from"./LogDetailDialog-BjRsy_FR.js";import{t as M}from"./format-CPdJtjZ5.js";var N={key:1,class:`ml-4 text-muted-foreground text-xs`},P={class:`font-mono`},F={key:2,class:`text-muted-foreground`},I={key:1,class:`text-muted-foreground`},L={key:1,class:`text-muted-foreground`},R=s({__name:`LogTableRow`,props:{log:{},isChild:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:[`toggleExpand`,`openDetail`],setup(n,{emit:r}){let s=r;function u(e){if(!e)return`未知`;try{let t=JSON.parse(e);return t.action?t.detail?`${t.action}: ${t.detail}`:t.action:e}catch{return`未知`}}return(r,h)=>(m(),f(i(O),{class:l({"bg-destructive/10":!n.isChild&&(n.log.status_code??0)>=400,"bg-muted/20":n.isChild})},{default:y(()=>[a(i(E),{class:`w-10`},{default:y(()=>[!n.isChild&&n.log.child_count?(m(),f(i(g),{key:0,variant:`ghost`,size:`xs`,onClick:h[0]||=e=>s(`toggleExpand`,n.log)},{default:y(()=>[e(`span`,{class:l([`text-xs transition-transform`,n.expanded?``:`-rotate-90`])},`▼`,2)]),_:1})):o(``,!0),n.isChild?(m(),d(`span`,N,`└`)):o(``,!0)]),_:1}),a(i(E),{class:`font-mono text-xs text-muted-foreground`,title:n.log.id},{default:y(()=>[p(t(n.log.id.slice(0,8)),1)]),_:1},8,[`title`]),a(i(E),{class:`text-muted-foreground`},{default:y(()=>[p(t(i(M)(n.log.created_at)),1)]),_:1}),a(i(E),null,{default:y(()=>[a(i(k),{variant:n.log.api_type===`openai`?`default`:`secondary`},{default:y(()=>[p(t(n.log.api_type),1)]),_:1},8,[`variant`])]),_:1}),a(i(E),{class:`font-mono text-xs`},{default:y(()=>[p(t(n.log.model||`-`)+` `,1),!n.isChild&&n.log.original_model?(m(),f(i(k),{key:0,variant:`secondary`,class:`ml-1 text-xs`},{default:y(()=>[...h[2]||=[p(`已替换`,-1)]]),_:1})):o(``,!0)]),_:1}),a(i(E),{class:`text-xs`},{default:y(()=>[!n.isChild&&n.log.provider_id===i(`router`)?(m(),f(i(k),{key:0,variant:`secondary`,class:`text-[10px] px-1 py-0`},{default:y(()=>[p(` 代理增强:`+t(u(n.log.upstream_request)),1)]),_:1})):n.log.backend_model||n.log.provider_name?(m(),d(c,{key:1},[e(`span`,P,t(n.log.backend_model||`-`),1),h[3]||=e(`span`,{class:`text-muted-foreground`},` @ `,-1),a(i(k),{variant:`outline`,class:`text-[10px] px-1 py-0`},{default:y(()=>[p(t(n.log.provider_name||n.log.provider_id||`-`),1)]),_:1})],64)):(m(),d(`span`,F,`-`))]),_:1}),a(i(E),null,{default:y(()=>[a(i(k),{variant:(n.log.status_code??0)<400?`default`:`destructive`},{default:y(()=>[p(t(n.log.status_code||`-`),1)]),_:1},8,[`variant`])]),_:1}),a(i(E),null,{default:y(()=>[p(t(n.log.latency_ms?n.log.latency_ms+`ms`:`-`),1)]),_:1}),a(i(E),null,{default:y(()=>[p(t(n.log.is_stream?`Yes`:`No`),1)]),_:1}),a(i(E),null,{default:y(()=>[n.log.is_retry?(m(),f(i(k),{key:0,variant:`outline`,class:`text-warning-dark border-warning`},{default:y(()=>[...h[4]||=[p(`重试`,-1)]]),_:1})):(m(),d(`span`,I,`-`))]),_:1}),a(i(E),null,{default:y(()=>[n.log.is_failover?(m(),f(i(k),{key:0,variant:`outline`,class:`text-danger-dark border-danger`},{default:y(()=>[...h[5]||=[p(`故障转移`,-1)]]),_:1})):(m(),d(`span`,L,`-`))]),_:1}),a(i(E),{class:`text-destructive text-xs`},{default:y(()=>[p(t(n.log.error_message||`-`),1)]),_:1}),a(i(E),null,{default:y(()=>[a(i(g),{variant:`ghost`,size:`sm`,onClick:h[1]||=e=>s(`openDetail`,n.log.id)},{default:y(()=>[...h[6]||=[p(`详情`,-1)]]),_:1})]),_:1})]),_:1},8,[`class`]))}}),z=[{label:`1h`,value:`1h`},{label:`5h`,value:`5h`},{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`}];function de(){let e=r(`5h`),t=r({start:``,end:``}),n=r(`all`),i=r(`all`),a=r(`all`),o=r(`all`),s=r([]),c=r([]),l=r([]),d=b(()=>t.value.start&&t.value.end&&t.value.start<t.value.end),f=b(()=>{let{start:e,end:n}=t.value;return!e||!n?``:e>=n?`结束时间须晚于开始时间`:``}),p=b(()=>{if(n.value===`all`)return l.value;let e=s.value.find(e=>e.id===n.value);if(!e)return l.value;let t=new Set(e.models);return l.value.filter(e=>t.has(e))});function m(e){return e.includes(`T`)?`${e}:00.000Z`:`${e}T00:00:00.000Z`}function h(e){return e.includes(`T`)?`${e}:59.999Z`:`${e}T23:59:59.999Z`}let g={"1h":36e5,"5h":18e6,"24h":864e5,"7d":6048e5,"30d":2592e6};function v(){let r={};if(d.value)r.start_time=m(t.value.start),r.end_time=h(t.value.end);else{let t=g[e.value];t&&(r.start_time=new Date(Date.now()-t).toISOString())}return o.value!==`all`&&(r.api_type=o.value),n.value!==`all`&&(r.provider_id=n.value),i.value!==`all`&&(r.model=i.value),a.value!==`all`&&(r.router_key_id=a.value),r}function y(){t.value={start:``,end:``}}async function x(){try{s.value=await u.getProviders()}catch(e){console.error(`Failed to load providers:`,e),A.error(`加载供应商列表失败`)}}async function S(){try{c.value=await u.getRouterKeys()}catch(e){console.error(`Failed to load router keys:`,e),A.error(`加载密钥列表失败`)}}async function C(){try{let e=await u.getMetricsSummary({period:`30d`});l.value=[...new Set(e.map(e=>e.backend_model))]}catch{l.value=[]}}return _(()=>{Promise.allSettled([x(),S(),C()])}),{PERIODS:z,period:e,dateRange:t,dateRangeError:f,providerFilter:n,modelFilter:i,keyFilter:a,apiTypeFilter:o,providers:s,routerKeys:c,filteredModelOptions:p,hasDateRange:d,clearDateRange:y,buildFilterParams:v}}var fe={class:`p-6`},pe={class:`flex items-center justify-between mb-4`},me={class:`flex flex-wrap items-center gap-2 mb-4`},he={class:`flex gap-1`},ge={class:`flex items-center gap-1`},_e={key:1,class:`text-xs text-destructive whitespace-nowrap`},ve={class:`bg-card rounded-lg border overflow-hidden`},ye={class:`flex items-center justify-between mt-4`},be={class:`text-sm text-muted-foreground`},xe={class:`flex gap-1`},Se={class:`px-3 py-1 text-sm text-muted-foreground`},Ce={class:`mb-4`},B=20,V=13,we=300,H=s({__name:`Logs`,setup(s){let{PERIODS:l,period:b,dateRange:k,dateRangeError:M,providerFilter:N,modelFilter:P,keyFilter:F,providers:I,routerKeys:L,filteredModelOptions:z,clearDateRange:H,buildFilterParams:Te}=de(),U=r([]),W=r(0),G=r(1),K=r(!1),q=r(30),J=r(new Set),Y=r({}),X=r({}),Z=r(!1),Ee=r(null);async function De(e){let t=e.id;if(J.value.has(t)){J.value.delete(t);return}if(J.value.add(t),!Y.value[t]){X.value[t]=!0;try{let e=await u.getLogChildren(t);Y.value[t]=e.data}catch(e){console.error(`Failed to load child logs:`,e),A.error(`加载子请求失败`)}finally{X.value[t]=!1}}}function Oe(e){Z.value=!0,Ee.value?.load(e)}async function Q(){try{let e=Te(),t=await u.getLogs({page:G.value,limit:B,view:`grouped`,...e});U.value=t.data,W.value=t.total,J.value.clear(),Y.value={},X.value={}}catch(e){console.error(`Failed to load logs:`,e),A.error(`加载日志失败`)}}function ke(){G.value>1&&(G.value--,Q())}function Ae(){G.value++,Q()}async function je(){try{let e=new Date(Date.now()-q.value*864e5).toISOString(),t=await u.deleteLogsBefore(e);K.value=!1,G.value=1,await Q(),A.success(`已清理 ${t.deleted} 条日志`)}catch(e){console.error(`Failed to cleanup logs:`,e),A.error(`清理日志失败`)}}let $=null;return h([b,k,N,P,F],()=>{G.value=1,$&&clearTimeout($),$=setTimeout(()=>Q(),we)},{deep:!0}),_(()=>{Q()}),(r,s)=>(m(),d(`div`,fe,[e(`div`,pe,[s[11]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`请求日志`,-1),a(i(g),{variant:`outline`,class:`text-destructive border-destructive hover:bg-destructive/10`,onClick:s[0]||=e=>K.value=!0},{default:y(()=>[...s[10]||=[p(` 清理日志 `,-1)]]),_:1})]),e(`div`,me,[e(`div`,he,[(m(!0),d(c,null,v(i(l),e=>(m(),f(i(g),{key:e.value,variant:i(b)===e.value?`default`:`ghost`,size:`sm`,onClick:t=>b.value=e.value},{default:y(()=>[p(t(e.label),1)]),_:2},1032,[`variant`,`onClick`]))),128))]),e(`div`,ge,[a(i(j),{type:`datetime-local`,modelValue:i(k).start,"onUpdate:modelValue":s[1]||=e=>i(k).start=e,class:`w-44`},null,8,[`modelValue`]),s[13]||=e(`span`,{class:`text-muted-foreground text-sm`},`-`,-1),a(i(j),{type:`datetime-local`,modelValue:i(k).end,"onUpdate:modelValue":s[2]||=e=>i(k).end=e,class:`w-44`},null,8,[`modelValue`]),i(k).start||i(k).end?(m(),f(i(g),{key:0,variant:`ghost`,size:`sm`,onClick:i(H)},{default:y(()=>[...s[12]||=[p(`清除`,-1)]]),_:1},8,[`onClick`])):o(``,!0),i(M)?(m(),d(`span`,_e,t(i(M)),1)):o(``,!0)]),a(i(x),{modelValue:i(N),"onUpdate:modelValue":s[3]||=e=>n(N)?N.value=e:null},{default:y(()=>[a(i(C),{class:`w-28 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部供应商`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[14]||=[p(`全部供应商`,-1)]]),_:1}),(m(!0),d(c,null,v(i(I),e=>(m(),f(i(w),{key:e.id,value:e.id},{default:y(()=>[p(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),a(i(x),{modelValue:i(P),"onUpdate:modelValue":s[4]||=e=>n(P)?P.value=e:null},{default:y(()=>[a(i(C),{class:`w-32 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部模型`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[15]||=[p(`全部模型`,-1)]]),_:1}),(m(!0),d(c,null,v(i(z),e=>(m(),f(i(w),{key:e,value:e},{default:y(()=>[p(t(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),a(i(x),{modelValue:i(F),"onUpdate:modelValue":s[5]||=e=>n(F)?F.value=e:null},{default:y(()=>[a(i(C),{class:`w-32 truncate`},{default:y(()=>[a(i(T),{placeholder:`全部密钥`})]),_:1}),a(i(S),null,{default:y(()=>[a(i(w),{value:`all`},{default:y(()=>[...s[16]||=[p(`全部密钥`,-1)]]),_:1}),(m(!0),d(c,null,v(i(L),e=>(m(),f(i(w),{key:e.id,value:e.id},{default:y(()=>[p(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`])]),e(`div`,ve,[a(i(oe),null,{default:y(()=>[a(i(se),null,{default:y(()=>[a(i(O),{class:`bg-muted`},{default:y(()=>[a(i(D),{class:`w-10`}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[17]||=[p(`ID`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[18]||=[p(`时间`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[19]||=[p(`类型`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[20]||=[p(`模型`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[21]||=[p(`实际转发`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[22]||=[p(`状态码`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[23]||=[p(`延迟`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[24]||=[p(`流式`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[25]||=[p(`重试`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[26]||=[p(`故障转移`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[27]||=[p(`错误`,-1)]]),_:1}),a(i(D),{class:`text-muted-foreground`},{default:y(()=>[...s[28]||=[p(`操作`,-1)]]),_:1})]),_:1})]),_:1}),a(i(ae),null,{default:y(()=>[(m(!0),d(c,null,v(U.value,e=>(m(),d(c,{key:e.id},[a(R,{log:e,expanded:J.value.has(e.id),onToggleExpand:De,onOpenDetail:Oe},null,8,[`log`,`expanded`]),J.value.has(e.id)?(m(),d(c,{key:0},[X.value[e.id]?(m(),f(i(O),{key:0},{default:y(()=>[a(i(E),{colspan:V,class:`text-center py-2 pl-10`},{default:y(()=>[a(i(le),{class:`h-4 w-32 mx-auto`})]),_:1})]),_:1})):Y.value[e.id]?.length?(m(!0),d(c,{key:1},v(Y.value[e.id],e=>(m(),f(R,{key:e.id,log:e,"is-child":!0,onOpenDetail:Oe},null,8,[`log`]))),128)):o(``,!0)],64)):o(``,!0)],64))),128)),U.value.length===0?(m(),f(i(O),{key:0},{default:y(()=>[a(i(E),{colspan:V,class:`text-center text-muted-foreground py-8`},{default:y(()=>[...s[29]||=[p(`暂无日志`,-1)]]),_:1})]),_:1})):o(``,!0)]),_:1})]),_:1})]),e(`div`,ye,[e(`p`,be,`共 `+t(W.value)+` 条`,1),e(`div`,xe,[a(i(g),{variant:`outline`,size:`sm`,onClick:ke,disabled:G.value<=1},{default:y(()=>[...s[30]||=[p(`上一页`,-1)]]),_:1},8,[`disabled`]),e(`span`,Se,`第 `+t(G.value)+` 页`,1),a(i(g),{variant:`outline`,size:`sm`,onClick:Ae,disabled:U.value.length<B},{default:y(()=>[...s[31]||=[p(`下一页`,-1)]]),_:1},8,[`disabled`])])]),a(ue,{ref_key:`logDetailRef`,ref:Ee,open:Z.value,"onUpdate:open":s[6]||=e=>Z.value=e},null,8,[`open`]),a(i(re),{open:K.value,"onUpdate:open":s[9]||=e=>K.value=e},{default:y(()=>[a(i(te),null,{default:y(()=>[a(i(ne),null,{default:y(()=>[a(i(ie),null,{default:y(()=>[...s[32]||=[p(`清理日志`,-1)]]),_:1})]),_:1}),s[36]||=e(`p`,{class:`text-sm text-muted-foreground`},`删除指定天数之前的日志`,-1),e(`div`,Ce,[a(i(ce),{class:`block text-sm font-medium text-foreground mb-1`},{default:y(()=>[...s[33]||=[p(`保留最近天数`,-1)]]),_:1}),a(i(j),{modelValue:q.value,"onUpdate:modelValue":s[7]||=e=>q.value=e,modelModifiers:{number:!0},type:`number`,min:1},null,8,[`modelValue`])]),a(i(ee),null,{default:y(()=>[a(i(g),{variant:`outline`,onClick:s[8]||=e=>K.value=!1},{default:y(()=>[...s[34]||=[p(`取消`,-1)]]),_:1}),a(i(g),{variant:`destructive`,onClick:je},{default:y(()=>[...s[35]||=[p(`确认清理`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{H as default};
@@ -0,0 +1 @@
1
+ import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,I as o,K as s,L as c,O as l,U as u,V as d,W as f,at as p,gt as m,n as h,nt as g,st as _,yt as v,z as y}from"./button-qxGNBunr.js";import{a as b,i as x,n as S,r as C,t as w}from"./SelectValue-CP4Sh7LP.js";import{n as T,r as E,t as D}from"./CollapsibleTrigger-DCRRORrU.js";import{a as O,i as k,o as A,r as j,s as M,t as N}from"./dialog-D8pIXeSs.js";import{a as P,c as F,i as I,n as L,o as R,r as z,t as B}from"./alert-dialog-BoGRIC1Q.js";import{t as V}from"./Label-DjtouWZ7.js";import{t as H}from"./badge-DIO8W_W9.js";import{n as U}from"./lib-DjpgwSRA.js";import{n as W,t as ee}from"./CardContent-fmM_iiuR.js";import{t as te}from"./CardHeader-BzzFzZ1B.js";import{t as G}from"./CardTitle-09d7O-11.js";import{t as K}from"./Input-BhvZ-Up7.js";var q={key:0,class:`text-sm text-destructive mt-1`},J={class:`border rounded-lg p-3 space-y-3`},Y={class:`flex gap-3`},X={class:`flex-1`},Z={key:0,class:`text-sm text-destructive mt-1`},Q={class:`flex-1`},ne={key:0,class:`text-sm text-destructive mt-1`},re={class:`border rounded-lg p-3 space-y-3`},ie={class:`flex items-center justify-between`},ae={class:`flex items-end gap-2`},oe={class:`w-24`},se={key:0,class:`text-sm text-destructive mt-1`},ce={class:`w-24`},le={key:0,class:`text-sm text-destructive mt-1`},ue={class:`flex gap-3`},de={class:`flex-1`},fe={key:0,class:`text-sm text-destructive mt-1`},pe={class:`flex-1`},me={key:0,class:`text-sm text-destructive mt-1`},he={key:0,class:`text-sm text-muted-foreground`},ge={key:1,class:`border rounded-lg p-3 space-y-3`},_e={class:`flex items-center justify-between`},ve={key:0,class:`text-sm text-destructive`},ye={class:`flex gap-3`},be={class:`flex-1`},xe={key:0,class:`text-sm text-destructive mt-1`},Se={class:`flex-1`},Ce={key:0,class:`text-sm text-destructive mt-1`},we={class:`flex justify-end gap-1`},Te={key:1,class:`text-sm text-muted-foreground`},Ee=s({__name:`MappingGroupFormDialog`,props:{open:{type:Boolean},editingId:{},form:{},providers:{},providerModels:{}},emits:[`update:open`,`save`,`addWindow`,`removeWindow`,`addTarget`,`removeTarget`,`moveTargetUp`,`moveTargetDown`],setup(s,{emit:l}){let g=s,T=l,E=y(()=>g.providerModels.get(g.form.default.provider_id)||[]);function D(e){let t=g.form.windows[e]?.target?.provider_id;return t&&g.providerModels.get(t)||[]}function P(e){if(typeof e!=`string`)return;g.form.default.provider_id=e;let t=g.providerModels.get(e)||[];g.form.default.backend_model=t[0]||``}function F(e,t){if(typeof t!=`string`)return;g.form.windows[e].target.provider_id=t;let n=g.providerModels.get(t)||[];g.form.windows[e].target.backend_model=n[0]||``}function I(e){let t=g.form.targets[e]?.provider_id;return t&&g.providerModels.get(t)||[]}function L(e,t){if(typeof t!=`string`)return;g.form.targets[e].provider_id=t;let n=g.providerModels.get(t)||[];g.form.targets[e].backend_model=n[0]||``}function R(){H()&&T(`save`)}let z=/^\d{2}:\d{2}$/,B=n({});function H(){let e={};return g.form.client_model.trim()||(e.client_model=`请输入客户端模型名称`),g.form.strategy===`scheduled`?(g.form.default.provider_id||(e[`default.provider_id`]=`请选择供应商`),g.form.default.backend_model||(e[`default.backend_model`]=`请选择后端模型`),g.form.windows.forEach((t,n)=>{z.test(t.start)||(e[`window.${n}.start`]=`格式:HH:MM`),z.test(t.end)||(e[`window.${n}.end`]=`格式:HH:MM`),t.target.provider_id||(e[`window.${n}.provider_id`]=`请选择供应商`),t.target.backend_model||(e[`window.${n}.backend_model`]=`请选择后端模型`)})):(g.form.targets.length===0&&(e.targets=`至少添加一个目标`),g.form.targets.forEach((t,n)=>{t.provider_id||(e[`target.${n}.provider_id`]=`请选择供应商`),t.backend_model||(e[`target.${n}.backend_model`]=`请选择后端模型`)})),B.value=e,Object.keys(e).length===0}return m(()=>g.open,e=>{e&&(B.value={})}),(n,l)=>(p(),d(r(M),{open:s.open,"onUpdate:open":l[7]||=e=>T(`update:open`,e)},{default:v(()=>[i(r(A),{class:`max-w-2xl`},{default:v(()=>[i(r(j),null,{default:v(()=>[i(r(N),null,{default:v(()=>[f(t(s.editingId?`编辑分组`:`添加分组`),1)]),_:1}),i(r(O),null,{default:v(()=>[...l[8]||=[f(`配置客户端模型到后端供应商模型的映射规则`,-1)]]),_:1})]),_:1}),e(`form`,{onSubmit:o(R,[`prevent`]),class:`space-y-4`},[e(`div`,null,[i(r(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[...l[9]||=[f(`客户端模型`,-1)]]),_:1}),i(r(K),{modelValue:s.form.client_model,"onUpdate:modelValue":l[0]||=e=>s.form.client_model=e,type:`text`,required:``,onInput:l[1]||=e=>delete B.value.client_model},null,8,[`modelValue`]),B.value.client_model?(p(),u(`p`,q,t(B.value.client_model),1)):a(``,!0)]),e(`div`,null,[i(r(V),{class:`block text-sm font-medium text-foreground mb-1`},{default:v(()=>[...l[10]||=[f(`策略`,-1)]]),_:1}),i(r(b),{modelValue:s.form.strategy,"onUpdate:modelValue":l[2]||=e=>s.form.strategy=e},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择策略`})]),_:1}),i(r(x),null,{default:v(()=>[i(r(C),{value:`scheduled`},{default:v(()=>[...l[11]||=[f(`定时切换 (scheduled)`,-1)]]),_:1}),i(r(C),{value:`round-robin`},{default:v(()=>[...l[12]||=[f(`轮询 (round-robin)`,-1)]]),_:1}),i(r(C),{value:`random`},{default:v(()=>[...l[13]||=[f(`随机 (random)`,-1)]]),_:1}),i(r(C),{value:`failover`},{default:v(()=>[...l[14]||=[f(`故障转移 (failover)`,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),s.form.strategy===`scheduled`?(p(),u(c,{key:0},[e(`div`,J,[l[17]||=e(`div`,{class:`text-sm font-medium text-foreground`},`默认目标`,-1),e(`div`,Y,[e(`div`,X,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[15]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":s.form.default.provider_id,"onUpdate:modelValue":P},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`]),B.value[`default.provider_id`]?(p(),u(`p`,Z,t(B.value[`default.provider_id`]),1)):a(``,!0)]),e(`div`,Q,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[16]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:s.form.default.backend_model,"onUpdate:modelValue":l[3]||=e=>s.form.default.backend_model=e,disabled:E.value.length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:E.value.length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(E.value,e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`,`disabled`]),B.value[`default.backend_model`]?(p(),u(`p`,ne,t(B.value[`default.backend_model`]),1)):a(``,!0)])])]),e(`div`,re,[e(`div`,ie,[l[19]||=e(`div`,{class:`text-sm font-medium text-foreground`},`时间窗口`,-1),i(r(h),{type:`button`,variant:`outline`,size:`sm`,onClick:l[4]||=e=>T(`addWindow`)},{default:v(()=>[...l[18]||=[f(`添加窗口`,-1)]]),_:1})]),(p(!0),u(c,null,_(s.form.windows,(n,o)=>(p(),u(`div`,{key:o,class:`border rounded-md p-2 space-y-2`},[e(`div`,ae,[e(`div`,oe,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[20]||=[f(`开始`,-1)]]),_:1}),i(r(K),{modelValue:n.start,"onUpdate:modelValue":e=>n.start=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${o}.start`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${o}.start`]?(p(),u(`p`,se,t(B.value[`window.${o}.start`]),1)):a(``,!0)]),l[23]||=e(`span`,{class:`text-muted-foreground pb-1.5`},`-`,-1),e(`div`,ce,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[21]||=[f(`结束`,-1)]]),_:1}),i(r(K),{modelValue:n.end,"onUpdate:modelValue":e=>n.end=e,type:`text`,placeholder:`HH:MM`,required:``,onInput:e=>delete B.value[`window.${o}.end`]},null,8,[`modelValue`,`onUpdate:modelValue`,`onInput`]),B.value[`window.${o}.end`]?(p(),u(`p`,le,t(B.value[`window.${o}.end`]),1)):a(``,!0)]),l[24]||=e(`div`,{class:`flex-1`},null,-1),i(r(h),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeWindow`,o)},{default:v(()=>[...l[22]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])]),e(`div`,ue,[e(`div`,de,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[25]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":n.target.provider_id,"onUpdate:modelValue":e=>F(o,e)},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`window.${o}.provider_id`]?(p(),u(`p`,fe,t(B.value[`window.${o}.provider_id`]),1)):a(``,!0)]),e(`div`,pe,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[26]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:n.target.backend_model,"onUpdate:modelValue":e=>n.target.backend_model=e,disabled:D(o).length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:D(o).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(D(o),e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`window.${o}.backend_model`]?(p(),u(`p`,me,t(B.value[`window.${o}.backend_model`]),1)):a(``,!0)])])]))),128)),s.form.windows.length===0?(p(),u(`div`,he,`暂无窗口`)):a(``,!0)])],64)):(p(),u(`div`,ge,[e(`div`,_e,[l[28]||=e(`div`,{class:`text-sm font-medium text-foreground`},`目标列表`,-1),i(r(h),{type:`button`,variant:`outline`,size:`sm`,onClick:l[5]||=e=>T(`addTarget`)},{default:v(()=>[...l[27]||=[f(`添加目标`,-1)]]),_:1})]),B.value.targets?(p(),u(`p`,ve,t(B.value.targets),1)):a(``,!0),(p(!0),u(c,null,_(s.form.targets,(n,o)=>(p(),u(`div`,{key:o,class:`border rounded-md p-2 space-y-2`},[e(`div`,ye,[e(`div`,be,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[29]||=[f(`供应商`,-1)]]),_:1}),i(r(b),{"model-value":n.provider_id,"onUpdate:modelValue":e=>L(o,e)},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:`选择供应商`})]),_:1}),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(s.providers,e=>(p(),d(r(C),{key:e.id,value:e.id},{default:v(()=>[f(t(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`]),B.value[`target.${o}.provider_id`]?(p(),u(`p`,xe,t(B.value[`target.${o}.provider_id`]),1)):a(``,!0)]),e(`div`,Se,[i(r(V),{class:`block text-xs text-muted-foreground mb-1`},{default:v(()=>[...l[30]||=[f(`后端模型`,-1)]]),_:1}),i(r(b),{modelValue:n.backend_model,"onUpdate:modelValue":e=>n.backend_model=e,disabled:I(o).length===0},{default:v(()=>[i(r(S),null,{default:v(()=>[i(r(w),{placeholder:I(o).length===0?`暂无可用模型`:`选择后端模型`},null,8,[`placeholder`])]),_:2},1024),i(r(x),null,{default:v(()=>[(p(!0),u(c,null,_(I(o),e=>(p(),d(r(C),{key:e,value:e},{default:v(()=>[f(t(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1024)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`disabled`]),B.value[`target.${o}.backend_model`]?(p(),u(`p`,Ce,t(B.value[`target.${o}.backend_model`]),1)):a(``,!0)])]),e(`div`,we,[s.form.strategy===`failover`?(p(),d(r(h),{key:0,type:`button`,variant:`ghost`,size:`sm`,disabled:o===0,onClick:e=>T(`moveTargetUp`,o)},{default:v(()=>[...l[31]||=[f(`↑`,-1)]]),_:1},8,[`disabled`,`onClick`])):a(``,!0),s.form.strategy===`failover`?(p(),d(r(h),{key:1,type:`button`,variant:`ghost`,size:`sm`,disabled:o===s.form.targets.length-1,onClick:e=>T(`moveTargetDown`,o)},{default:v(()=>[...l[32]||=[f(`↓`,-1)]]),_:1},8,[`disabled`,`onClick`])):a(``,!0),i(r(h),{type:`button`,variant:`ghost`,size:`sm`,class:`text-destructive shrink-0`,onClick:e=>T(`removeTarget`,o)},{default:v(()=>[...l[33]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])])]))),128)),s.form.targets.length===0?(p(),u(`div`,Te,`暂无目标`)):a(``,!0)])),i(r(k),null,{default:v(()=>[i(r(h),{type:`button`,variant:`outline`,onClick:l[6]||=e=>T(`update:open`,!1)},{default:v(()=>[...l[34]||=[f(`取消`,-1)]]),_:1}),i(r(h),{type:`submit`},{default:v(()=>[...l[35]||=[f(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]))}}),De=s({__name:`MappingGroupDeleteDialog`,props:{target:{}},emits:[`confirm`,`cancel`],setup(e,{emit:n}){let a=n;return(n,o)=>(p(),d(r(F),{open:!!e.target,"onUpdate:open":o[1]||=e=>{e||a(`cancel`)}},{default:v(()=>[i(r(P),null,{default:v(()=>[i(r(L),null,{default:v(()=>[i(r(B),null,{default:v(()=>[...o[2]||=[f(`确认删除`,-1)]]),_:1}),i(r(I),null,{default:v(()=>[f(`确定要删除分组「`+t(e.target?.client_model)+`」吗?`,1)]),_:1})]),_:1}),i(r(z),null,{default:v(()=>[i(r(R),null,{default:v(()=>[...o[3]||=[f(`取消`,-1)]]),_:1}),i(r(h),{variant:`destructive`,onClick:o[0]||=e=>a(`confirm`)},{default:v(()=>[...o[4]||=[f(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]))}}),Oe={class:`p-6`},ke={class:`flex items-center justify-between mb-4`},Ae={class:`space-y-4`},je={class:`flex items-center gap-3`},Me={class:`flex items-center gap-2`},Ne={key:0,class:`space-y-3`},Pe={class:`flex items-center gap-2 text-sm`},$={class:`font-mono`},Fe={key:0,class:`space-y-2`},Ie={class:`font-mono text-xs bg-muted px-2 py-0.5 rounded`},Le={class:`font-mono`},Re={key:1,class:`text-sm text-muted-foreground`},ze={key:1,class:`space-y-2`},Be={key:0,class:`text-muted-foreground text-xs`},Ve={class:`font-mono`},He={key:0,class:`text-sm text-muted-foreground`},Ue={key:0,class:`text-center text-muted-foreground py-12 bg-card rounded-xl border`},We=s({__name:`ModelMappings`,setup(o){let s={client_model:``,strategy:`scheduled`,default:{backend_model:``,provider_id:``},windows:[],targets:[]},m=n([]),b=n([]),x=n(!1),S=n(null),C=n(null),w=n({...s}),O=y(()=>{let e=new Map;for(let t of b.value)e.set(t.id,t.name);return e}),k=y(()=>{let e=new Map;for(let t of b.value){let n=t.models;Array.isArray(n)&&n.length>0&&e.set(t.id,[...n])}return e}),A=y(()=>m.value.map(e=>{let t={};try{t=JSON.parse(e.rule)}catch{}return{...e,parsedRule:t}}));async function j(){let e=await Promise.allSettled([l.getMappingGroups(),l.getProviders()]);e[0].status===`fulfilled`?m.value=e[0].value:console.error(`Failed to load groups:`,e[0].reason),e[1].status===`fulfilled`?b.value=e[1].value:(console.error(`Failed to load providers:`,e[1].reason),U.error(`加载供应商失败`))}function M(){S.value=null;let e=b.value[0]?.id||``;w.value={client_model:``,strategy:`scheduled`,default:{backend_model:(k.value.get(e)||[])[0]||``,provider_id:e},windows:[],targets:[]},x.value=!0}function N(e){S.value=e.id;let t={};try{t=JSON.parse(e.rule)}catch{}if(e.strategy===`scheduled`)w.value={...s,client_model:e.client_model,strategy:e.strategy,default:{backend_model:t.default?.backend_model||``,provider_id:t.default?.provider_id||b.value[0]?.id||``},windows:t.windows?JSON.parse(JSON.stringify(t.windows)):[]};else{let n=b.value[0]?.id||``,r=k.value.get(n)||[];w.value={...s,client_model:e.client_model,strategy:e.strategy,targets:Array.isArray(t.targets)?t.targets.map(e=>({backend_model:e.backend_model||``,provider_id:e.provider_id||n})):[{backend_model:r[0]||``,provider_id:n}]}}x.value=!0}function P(){let e=b.value[0]?.id||``,t=k.value.get(e)||[];w.value.windows.push({start:``,end:``,target:{backend_model:t[0]||``,provider_id:e}})}function F(e){w.value.windows.splice(e,1)}function I(){let e=b.value[0]?.id||``,t=k.value.get(e)||[];w.value.targets.push({backend_model:t[0]||``,provider_id:e})}function L(e){w.value.targets.splice(e,1)}function R(e){if(e<=0)return;let t=w.value.targets;[t[e-1],t[e]]=[t[e],t[e-1]]}function z(e){let t=w.value.targets;e>=t.length-1||([t[e],t[e+1]]=[t[e+1],t[e]])}async function B(){try{let e;e=w.value.strategy===`scheduled`?JSON.stringify({default:w.value.default,windows:w.value.windows}):JSON.stringify({targets:w.value.targets});let t={client_model:w.value.client_model,strategy:w.value.strategy,rule:e};S.value?await l.updateMappingGroup(S.value,t):await l.createMappingGroup(t),x.value=!1,await j()}catch(e){console.error(`Failed to save mapping group:`,e),U.error(`保存分组失败`)}}async function V(){let e=C.value;if(e){C.value=null;try{await l.deleteMappingGroup(e.id),await j()}catch(e){console.error(`Failed to delete mapping group:`,e),U.error(`删除分组失败`)}}}return g(j),(n,o)=>(p(),u(`div`,Oe,[e(`div`,ke,[o[3]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`模型映射`,-1),i(r(h),{onClick:M,class:`flex items-center gap-1`},{default:v(()=>[...o[2]||=[e(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),f(` 添加分组 `,-1)]]),_:1})]),e(`div`,Ae,[(p(!0),u(c,null,_(A.value,n=>(p(),d(r(W),{key:n.id},{default:v(()=>[i(r(E),{"default-open":!0},{default:v(()=>[i(r(te),{class:`flex flex-row items-center justify-between gap-4`},{default:v(()=>[e(`div`,je,[i(r(G),{class:`font-mono text-sm`},{default:v(()=>[f(t(n.client_model),1)]),_:2},1024),i(r(H),{variant:`secondary`},{default:v(()=>[f(t(n.strategy),1)]),_:2},1024)]),e(`div`,Me,[i(r(D),{"as-child":``},{default:v(()=>[i(r(h),{variant:`ghost`,size:`sm`},{default:v(()=>[...o[4]||=[f(` 展开 `,-1)]]),_:1})]),_:1}),i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>N(n)},{default:v(()=>[...o[5]||=[f(`编辑`,-1)]]),_:1},8,[`onClick`]),i(r(h),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>C.value=n},{default:v(()=>[...o[6]||=[f(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:2},1024),i(r(T),null,{default:v(()=>[i(r(ee),null,{default:v(()=>[n.strategy===`scheduled`?(p(),u(`div`,Ne,[e(`div`,Pe,[o[7]||=e(`span`,{class:`text-muted-foreground`},`默认模型:`,-1),e(`span`,$,t(n.parsedRule.default?.backend_model||`-`),1),o[8]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(n.parsedRule.default?.provider_id||``)||`-`),1)]),n.parsedRule.windows?.length?(p(),u(`div`,Fe,[o[10]||=e(`div`,{class:`text-sm text-muted-foreground`},`时间窗口`,-1),(p(!0),u(c,null,_(n.parsedRule.windows,(n,r)=>(p(),u(`div`,{key:r,class:`flex items-center gap-2 text-sm`},[e(`span`,Ie,t(n.start)+` - `+t(n.end),1),e(`span`,Le,t(n.target.backend_model),1),o[9]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(n.target.provider_id)||n.target.provider_id),1)]))),128))])):(p(),u(`div`,Re,`无时间窗口`))])):(p(),u(`div`,ze,[(p(!0),u(c,null,_(n.parsedRule.targets||[],(r,i)=>(p(),u(`div`,{key:i,class:`flex items-center gap-2 text-sm`},[n.strategy===`failover`?(p(),u(`span`,Be,t(i+1)+`.`,1)):a(``,!0),e(`span`,Ve,t(r.backend_model),1),o[11]||=e(`span`,{class:`text-muted-foreground`},`/`,-1),e(`span`,null,t(O.value.get(r.provider_id)||r.provider_id),1)]))),128)),(n.parsedRule.targets||[]).length?a(``,!0):(p(),u(`div`,He,`无目标`))]))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128)),m.value.length===0?(p(),u(`div`,Ue,` 暂无映射分组 `)):a(``,!0)]),i(Ee,{open:x.value,"onUpdate:open":o[0]||=e=>x.value=e,"editing-id":S.value,form:w.value,providers:b.value,"provider-models":k.value,onSave:B,onAddWindow:P,onRemoveWindow:F,onAddTarget:I,onRemoveTarget:L,onMoveTargetUp:R,onMoveTargetDown:z},null,8,[`open`,`editing-id`,`form`,`providers`,`provider-models`]),i(De,{target:C.value,onConfirm:V,onCancel:o[1]||=e=>C.value=null},null,8,[`target`])]))}});export{We as default};
@@ -0,0 +1 @@
1
+ import{$ as e,B as t,Bt as n,Ct as r,Dt as i,E as a,Ft as o,G as s,H as c,J as l,K as u,L as d,Lt as f,Mt as p,O as m,Rt as h,U as g,V as _,W as v,_t as y,at as b,b as x,ct as S,et as C,f as w,gt as T,i as E,n as ee,nt as D,r as O,rt as k,st as A,w as j,yt as M,z as N,zt as P}from"./button-qxGNBunr.js";import{t as F}from"./createLucideIcon-jHUFhqKn.js";import{n as I,t as te}from"./useNonce-_2e-GL-A.js";import{S as L,c as R,h as ne,l as z}from"./Collection-DY9-Yue9.js";import{t as B}from"./useForwardExpose-awoGXQkg.js";import{n as re,r as ie,t as ae}from"./CollapsibleTrigger-DCRRORrU.js";import{n as oe,r as se,s as ce,t as le}from"./dialog-D8pIXeSs.js";import{a as ue,i as V,n as H,o as de,r as fe,t as pe}from"./TableHeader-BKE_yVML.js";import{i as me,n as he,r as ge,t as _e}from"./TabsTrigger-D8R7lxaI.js";import{t as U}from"./badge-DIO8W_W9.js";import{n as W,t as G}from"./CardContent-fmM_iiuR.js";import{t as K}from"./CardHeader-BzzFzZ1B.js";import{t as q}from"./CardTitle-09d7O-11.js";import{t as ve}from"./LogDetailDialog-BjRsy_FR.js";var ye=F(`brain`,[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]),be=F(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),xe=F(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),Se=F(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),[J,Ce]=L(`ScrollAreaRoot`),we=u({__name:`ScrollAreaRoot`,props:{type:{type:String,required:!1,default:`hover`},dir:{type:String,required:!1},scrollHideDelay:{type:Number,required:!1,default:600},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:t}){let n=e,r=i(0),a=i(0),s=i(),c=i(),l=i(),u=i(),d=i(!1),f=i(!1),{type:m,dir:h,scrollHideDelay:g}=p(n),v=ne(h);function y(){s.value?.scrollTo({top:0})}function x(){s.value?.scrollTo({top:0,left:0})}t({viewport:s,scrollTop:y,scrollTopLeft:x});let{forwardRef:C,currentElement:w}=B();return Ce({type:m,dir:v,scrollHideDelay:g,scrollArea:w,viewport:s,onViewportChange:e=>{s.value=e||void 0},content:c,onContentChange:e=>{c.value=e},scrollbarX:l,scrollbarXEnabled:d,scrollbarY:u,scrollbarYEnabled:f,onScrollbarXChange:e=>{l.value=e||void 0},onScrollbarYChange:e=>{u.value=e||void 0},onScrollbarXEnabledChange:e=>{d.value=e},onScrollbarYEnabledChange:e=>{f.value=e},onCornerWidthChange:e=>{r.value=e},onCornerHeightChange:e=>{a.value=e}}),(e,t)=>(b(),_(o(E),{ref:o(C),"as-child":n.asChild,as:e.as,dir:o(v),style:P({position:`relative`,"--reka-scroll-area-corner-width":`${r.value}px`,"--reka-scroll-area-corner-height":`${a.value}px`})},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`dir`,`style`]))}}),Te=u({__name:`ScrollAreaCornerImpl`,setup(t){let n=J(),r=i(0),a=i(0),s=N(()=>!!r.value&&!!a.value);function l(){let e=n.scrollbarX.value?.offsetHeight||0;n.onCornerHeightChange(e),a.value=e}function u(){let e=n.scrollbarY.value?.offsetWidth||0;n.onCornerWidthChange(e),r.value=e}return w(n.scrollbarX.value,l),w(n.scrollbarY.value,u),T(()=>n.scrollbarX.value,l),T(()=>n.scrollbarY.value,u),(t,i)=>s.value?(b(),_(o(E),e({key:0,style:{width:`${r.value}px`,height:`${a.value}px`,position:`absolute`,right:o(n).dir.value===`ltr`?0:void 0,left:o(n).dir.value===`rtl`?0:void 0,bottom:0}},t.$parent?.$props),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`style`])):c(`v-if`,!0)}}),Ee=u({__name:`ScrollAreaCorner`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t,{forwardRef:r}=B(),i=J(),a=N(()=>!!i.scrollbarX.value&&!!i.scrollbarY.value),s=N(()=>i.type.value!==`scroll`&&a.value);return(t,i)=>s.value?(b(),_(Te,e({key:0},n,{ref:o(r)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):c(`v-if`,!0)}});function De(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Y(e){let t=Oe(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Oe(e,t){let n=e/t;return Number.isNaN(n)?0:n}function ke(e,t=()=>{}){let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)}function Ae(e,t,n=`ltr`){let r=Y(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=n===`ltr`?[0,o]:[o*-1,0],l=I(e,c[0],c[1]);return De([0,o],[0,s])(l)}function X(e){return e?Number.parseInt(e,10):0}function je(e,t,n,r=`ltr`){let i=Y(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return De([c,l],d)(e)}function Me(e,t){return e>0&&e<t}var Ne=u({__name:`ScrollAreaScrollbarX`,setup(e){let t=J(),n=Q(),{forwardRef:r,currentElement:i}=B();D(()=>{i.value&&t.onScrollbarXChange(i.value)});let a=N(()=>n.sizes.value);return(e,i)=>(b(),_(Ue,{ref:o(r),"is-horizontal":!0,"data-orientation":`horizontal`,style:P({bottom:0,left:o(t).dir.value===`rtl`?`var(--reka-scroll-area-corner-width)`:0,right:o(t).dir.value===`ltr`?`var(--reka-scroll-area-corner-width)`:0,"--reka-scroll-area-thumb-width":a.value?`${o(Y)(a.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>o(n).onDragScroll(e.x)},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`style`]))}}),Pe=u({__name:`ScrollAreaScrollbarY`,setup(e){let t=J(),n=Q(),{forwardRef:r,currentElement:i}=B();D(()=>{i.value&&t.onScrollbarYChange(i.value)});let a=N(()=>n.sizes.value);return(e,i)=>(b(),_(Ue,{ref:o(r),"is-horizontal":!1,"data-orientation":`vertical`,style:P({top:0,right:o(t).dir.value===`ltr`?0:void 0,left:o(t).dir.value===`rtl`?0:void 0,bottom:`var(--reka-scroll-area-corner-height)`,"--reka-scroll-area-thumb-height":a.value?`${o(Y)(a.value)}px`:void 0}),onOnDragScroll:i[0]||=e=>o(n).onDragScroll(e.y)},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`style`]))}}),Fe=u({__name:`ScrollAreaScrollbarAuto`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:a}=B(),c=i(!1),l=j(()=>{if(n.viewport.value){let e=n.viewport.value.offsetWidth<n.viewport.value.scrollWidth,t=n.viewport.value.offsetHeight<n.viewport.value.scrollHeight;c.value=r.isHorizontal.value?e:t}},10);return D(()=>l()),w(n.viewport,l),w(n.content,l),(t,n)=>(b(),_(o(R),{present:t.forceMount||c.value},{default:M(()=>[s(He,e(t.$attrs,{ref:o(a),"data-state":c.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Ie=u({inheritAttrs:!1,__name:`ScrollAreaScrollbarGlimpse`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:i}=B(),{state:a,dispatch:c}=z(`hidden`,{hidden:{POINTER_ENTER:`glimpse`,SCROLL:`scrolling`},glimpse:{HIDE:`hidden`,POINTER_LEAVE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`glimpse`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}}),l=N(()=>a.value!==`hidden`);function u(){c(`POINTER_ENTER`)}function d(){c(`POINTER_LEAVE`)}let f=j(()=>c(`SCROLL_END`),100);return y(e=>{if(a.value===`glimpse`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),y(e=>{if(a.value===`idle`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}}),y(e=>{let t=n.viewport.value,i=r.isHorizontal.value?`scrollLeft`:`scrollTop`;if(t){let n=t[i],r=()=>{let e=t[i];n!==e&&(c(`SCROLL`),f()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),D(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,u),e.addEventListener(`pointerleave`,d))}),k(()=>{let e=n.scrollArea.value;e&&(e.removeEventListener(`pointerenter`,u),e.removeEventListener(`pointerleave`,d))}),(t,n)=>(b(),_(o(R),{present:t.forceMount||l.value},{default:M(()=>[s(Fe,e(t.$attrs,{ref:o(i),"data-state":l.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Le=u({inheritAttrs:!1,__name:`ScrollAreaScrollbarHover`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),{forwardRef:r}=B(),a,c=i(!1);function l(){window.clearTimeout(a),c.value=!0}function u(){a=window.setTimeout(()=>{c.value=!1},n.scrollHideDelay.value)}return D(()=>{let e=n.scrollArea.value;e&&(e.addEventListener(`pointerenter`,l),e.addEventListener(`pointerleave`,u))}),k(()=>{let e=n.scrollArea.value;e&&(window.clearTimeout(a),e.removeEventListener(`pointerenter`,l),e.removeEventListener(`pointerleave`,u))}),(t,n)=>(b(),_(o(R),{present:t.forceMount||c.value},{default:M(()=>[s(Fe,e(t.$attrs,{ref:o(r),"data-state":c.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),Re=u({__name:`ScrollAreaScrollbarScroll`,props:{forceMount:{type:Boolean,required:!1}},setup(t){let n=J(),r=Z(),{forwardRef:i}=B(),{state:a,dispatch:c}=z(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}}),l=N(()=>a.value!==`hidden`);y(e=>{if(a.value===`idle`){let t=window.setTimeout(c,n.scrollHideDelay.value,`HIDE`);e(()=>{window.clearTimeout(t)})}});let u=j(()=>c(`SCROLL_END`),100);return y(e=>{let t=n.viewport.value,i=r.isHorizontal.value?`scrollLeft`:`scrollTop`;if(t){let n=t[i],r=()=>{let e=t[i];n!==e&&(c(`SCROLL`),u()),n=e};t.addEventListener(`scroll`,r),e(()=>{t.removeEventListener(`scroll`,r)})}}),(t,n)=>(b(),_(o(R),{present:t.forceMount||l.value},{default:M(()=>[s(He,e(t.$attrs,{ref:o(i),"data-state":l.value?`visible`:`hidden`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`data-state`])]),_:3},8,[`present`]))}}),[Z,ze]=L(`ScrollAreaScrollbar`),Be=u({inheritAttrs:!1,__name:`ScrollAreaScrollbar`,props:{orientation:{type:String,required:!1,default:`vertical`},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`div`}},setup(t){let n=t,{forwardRef:r}=B(),i=J(),a=N(()=>n.orientation===`horizontal`);T(a,()=>{a.value?i.onScrollbarXEnabledChange(!0):i.onScrollbarYEnabledChange(!0)},{immediate:!0}),k(()=>{i.onScrollbarXEnabledChange(!1),i.onScrollbarYEnabledChange(!1)});let{orientation:s,forceMount:l,asChild:u,as:d}=p(n);return ze({orientation:s,forceMount:l,isHorizontal:a,as:d,asChild:u}),(t,n)=>o(i).type.value===`hover`?(b(),_(Le,e({key:0},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`scroll`?(b(),_(Re,e({key:1},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`glimpse`?(b(),_(Ie,e({key:2},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`auto`?(b(),_(Fe,e({key:3},t.$attrs,{ref:o(r),"force-mount":o(l)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`force-mount`])):o(i).type.value===`always`?(b(),_(He,e({key:4},t.$attrs,{ref:o(r),"data-state":`visible`}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):c(`v-if`,!0)}}),[Q,Ve]=L(`ScrollAreaScrollbarVisible`),He=u({__name:`ScrollAreaScrollbarVisible`,setup(t){let n=J(),r=Z(),{forwardRef:a}=B(),s=i({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),c=N(()=>{let e=Oe(s.value.viewport,s.value.content);return e>0&&e<1}),l=i(),u=i(0);function d(e,t){if(g.value){let r=n.viewport.value.scrollLeft+e.deltaY;n.viewport.value.scrollLeft=r,Me(r,t)&&e.preventDefault()}else{let r=n.viewport.value.scrollTop+e.deltaY;n.viewport.value.scrollTop=r,Me(r,t)&&e.preventDefault()}}function f(e,t){g.value?u.value=t.x:u.value=t.y}function p(e){u.value=0}function m(e){s.value=e}function h(e,t){return je(e,u.value,s.value,t)}let g=N(()=>r.isHorizontal.value);function v(e){g.value?n.viewport.value.scrollLeft=h(e,n.dir.value):n.viewport.value.scrollTop=h(e)}function y(){if(g.value){if(n.viewport.value&&l.value){let e=n.viewport.value.scrollLeft,t=Ae(e,s.value,n.dir.value);l.value.style.transform=`translate3d(${t}px, 0, 0)`}}else if(n.viewport.value&&l.value){let e=n.viewport.value.scrollTop,t=Ae(e,s.value);l.value.style.transform=`translate3d(0, ${t}px, 0)`}}function x(e){l.value=e}return Ve({sizes:s,hasThumb:c,handleWheelScroll:d,handleThumbDown:f,handleThumbUp:p,handleSizeChange:m,onThumbPositionChange:y,onThumbChange:x,onDragScroll:v}),(t,n)=>g.value?(b(),_(Ne,e({key:0},t.$attrs,{ref:o(a)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16)):(b(),_(Pe,e({key:1},t.$attrs,{ref:o(a)}),{default:M(()=>[S(t.$slots,`default`)]),_:3},16))}}),Ue=u({__name:`ScrollAreaScrollbarImpl`,props:{isHorizontal:{type:Boolean,required:!0}},emits:[`onDragScroll`,`onWheelScroll`,`onThumbPointerDown`],setup(e,{emit:t}){let n=e,r=t,a=J(),s=Q(),c=Z(),{forwardRef:l,currentElement:u}=B(),d=i(``),f=i();function p(e){f.value&&r(`onDragScroll`,{x:e.clientX-f.value?.left,y:e.clientY-f.value?.top})}function m(e){e.button===0&&(e.target.setPointerCapture(e.pointerId),f.value=u.value.getBoundingClientRect(),d.value=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,a.viewport&&(a.viewport.value.style.scrollBehavior=`auto`),p(e))}function h(e){p(e)}function g(e){let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=d.value,a.viewport&&(a.viewport.value.style.scrollBehavior=``),f.value=void 0}function v(e){let t=e.target,n=u.value?.contains(t),r=s.sizes.value.content-s.sizes.value.viewport;n&&s.handleWheelScroll(e,r)}D(()=>{document.addEventListener(`wheel`,v,{passive:!1})}),k(()=>{document.removeEventListener(`wheel`,v)});function y(){u.value&&(n.isHorizontal?s.handleSizeChange({content:a.viewport.value?.scrollWidth??0,viewport:a.viewport.value?.offsetWidth??0,scrollbar:{size:u.value.clientWidth??0,paddingStart:X(getComputedStyle(u.value).paddingLeft),paddingEnd:X(getComputedStyle(u.value).paddingRight)}}):s.handleSizeChange({content:a.viewport.value?.scrollHeight??0,viewport:a.viewport.value?.offsetHeight??0,scrollbar:{size:u.value?.clientHeight??0,paddingStart:X(getComputedStyle(u.value).paddingTop),paddingEnd:X(getComputedStyle(u.value).paddingBottom)}}),s.onThumbPositionChange())}return w(u,y),w(a.content,y),(e,t)=>(b(),_(o(E),{ref:o(l),style:{position:`absolute`},"data-scrollbarimpl":``,as:o(c).as.value,"as-child":o(c).asChild.value,onPointerdown:m,onPointermove:h,onPointerup:g},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}}),We=u({__name:`ScrollAreaThumb`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=J(),r=Q();function s(e){let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,i=e.clientY-t.top;r.handleThumbDown(e,{x:n,y:i})}function c(e){r.handleThumbUp(e)}let{forwardRef:l,currentElement:u}=B(),d=i(),f=N(()=>n.viewport.value);function p(){d.value||(d.value=ke(f.value,r.onThumbPositionChange),r.onThumbPositionChange())}return a(N(()=>r.sizes.value),()=>{r.onThumbChange(u.value),f.value&&(r.onThumbPositionChange(),f.value.addEventListener(`scroll`,p))}),k(()=>{f.value.removeEventListener(`scroll`,p),n.viewport.value?.removeEventListener(`scroll`,p)}),(e,n)=>(b(),_(o(E),{ref:o(l),"data-state":o(r).hasThumb?`visible`:`hidden`,style:{width:`var(--reka-scroll-area-thumb-width)`,height:`var(--reka-scroll-area-thumb-height)`},"as-child":t.asChild,as:e.as,onPointerdown:s,onPointerup:c},{default:M(()=>[S(e.$slots,`default`)]),_:3},8,[`data-state`,`as-child`,`as`]))}}),Ge=u({inheritAttrs:!1,__name:`ScrollAreaViewport`,props:{nonce:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n,{expose:r}){let a=n,{nonce:c}=p(a),l=te(c),u=J(),f=i();D(()=>{u.onViewportChange(f.value),u.onContentChange(h.value)}),r({viewportElement:f});let{forwardRef:m,currentElement:h}=B();return(n,r)=>(b(),g(d,null,[t(`div`,e({ref_key:`viewportElement`,ref:f,"data-reka-scroll-area-viewport":``,style:{overflowX:o(u).scrollbarXEnabled.value?`scroll`:`hidden`,overflowY:o(u).scrollbarYEnabled.value?`scroll`:`hidden`}},n.$attrs,{tabindex:0}),[s(o(E),{ref:o(m),style:P({minWidth:o(u).scrollbarXEnabled.value?`fit-content`:void 0}),"as-child":a.asChild,as:n.as},{default:M(()=>[S(n.$slots,`default`)]),_:3},8,[`style`,`as-child`,`as`])],16),s(o(E),{as:`style`,nonce:o(l)},{default:M(()=>r[0]||=[v(` /* Hide scrollbars cross-browser and enable momentum scroll for touch devices */ [data-reka-scroll-area-viewport] { scrollbar-width:none; -ms-overflow-style:none; -webkit-overflow-scrolling:touch; } [data-reka-scroll-area-viewport]::-webkit-scrollbar { display:none; } `)]),_:1,__:[0]},8,[`nonce`])],64))}}),Ke=u({__name:`BaseSeparator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let n=t,r=[`horizontal`,`vertical`];function i(e){return r.includes(e)}let a=N(()=>i(n.orientation)?n.orientation:`horizontal`),s=N(()=>a.value===`vertical`?n.orientation:void 0),c=N(()=>n.decorative?{role:`none`}:{"aria-orientation":s.value,role:`separator`});return(t,n)=>(b(),_(o(E),e({as:t.as,"as-child":t.asChild,"data-orientation":a.value},c.value),{default:M(()=>[S(t.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),qe=u({__name:`Separator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return(e,n)=>(b(),_(Ke,h(l(t)),{default:M(()=>[S(e.$slots,`default`)]),_:3},16))}}),Je=u({__name:`ScrollBar`,props:{orientation:{default:`vertical`},forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(i,a)=>(b(),_(o(Be),e({"data-slot":`scroll-area-scrollbar`,"data-orientation":t.orientation},o(r),{class:o(O)(`data-[orientation=horizontal]:h-2.5 data-[orientation=horizontal]:flex-col data-[orientation=horizontal]:border-t data-[orientation=horizontal]:border-t-transparent data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2.5 data-[orientation=vertical]:border-l data-[orientation=vertical]:border-l-transparent flex touch-none p-px transition-colors select-none`,n.class)}),{default:M(()=>[s(o(We),{"data-slot":`scroll-area-thumb`,class:`rounded-full relative flex-1 bg-border`})]),_:1},16,[`data-orientation`,`class`]))}}),Ye=u({__name:`ScrollArea`,props:{type:{},dir:{},scrollHideDelay:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(t,i)=>(b(),_(o(we),e({"data-slot":`scroll-area`},o(r),{class:o(O)(`relative`,n.class)}),{default:M(()=>[s(o(Ge),{"data-slot":`scroll-area-viewport`,class:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1`},{default:M(()=>[S(t.$slots,`default`)]),_:3}),s(Je),s(o(Ee))]),_:3},16,[`class`]))}}),Xe={class:`grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6`},Ze={class:`text-2xl font-bold text-foreground mt-1`},Qe={class:`text-xs text-muted-foreground mt-1`},$e={class:`text-2xl font-bold text-foreground mt-1`},et={class:`text-xs text-muted-foreground mt-1`},tt={class:`text-2xl font-bold text-foreground mt-1`},nt={class:`text-xs text-muted-foreground mt-1`},rt={class:`text-2xl font-bold text-foreground mt-1`},it={class:`text-xs text-muted-foreground mt-1`},at=u({__name:`MonitorHeader`,props:{stats:{},activeCount:{},streamCount:{}},setup(e){let r=e,i=N(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.errorCount/r.stats.totalRequests*100).toFixed(1)),a=N(()=>!r.stats||r.stats.totalRequests===0?`0.0`:(r.stats.retryCount/r.stats.totalRequests*100).toFixed(1)),c=N(()=>r.stats?r.stats.p50LatencyMs.toFixed(0):`--`);return(r,l)=>(b(),g(`div`,Xe,[s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[0]||=t(`p`,{class:`text-sm text-muted-foreground`},`活跃请求`,-1),t(`p`,Ze,n(e.activeCount),1),t(`p`,Qe,n(e.streamCount)+` 流式 / `+n(e.activeCount-e.streamCount)+` 非流式 `,1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[1]||=t(`p`,{class:`text-sm text-muted-foreground`},`错误率`,-1),t(`p`,$e,n(i.value)+`%`,1),t(`p`,et,n(e.stats?.errorCount??0)+` / `+n(e.stats?.totalRequests??0),1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[2]||=t(`p`,{class:`text-sm text-muted-foreground`},`P50 延迟`,-1),t(`p`,tt,n(c.value)+`ms`,1),t(`p`,nt,` 平均 `+n(e.stats?.avgLatencyMs?.toFixed(0)??`--`)+`ms `,1)]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(G),{class:`p-4`},{default:M(()=>[l[3]||=t(`p`,{class:`text-sm text-muted-foreground`},`重试率`,-1),t(`p`,rt,n(a.value)+`%`,1),t(`p`,it,n(e.stats?.retryCount??0)+` / `+n(e.stats?.totalRequests??0),1)]),_:1})]),_:1})]))}}),ot={class:`space-y-3`},st={key:0,class:`text-sm text-muted-foreground`},ct={class:`flex items-center justify-between text-sm`},lt={class:`font-medium text-foreground`},ut={class:`text-muted-foreground`},dt={key:0,class:`h-2 bg-muted rounded-full overflow-hidden`},ft={key:1,class:`flex gap-3 text-xs text-muted-foreground`},pt=u({__name:`ConcurrencyPanel`,props:{providers:{}},setup(e){function r(e,t){let n=e/t;return n>=1?`bg-red-500`:n>=.8?`bg-orange-500`:n>=.5?`bg-yellow-500`:`bg-green-500`}return(i,a)=>(b(),g(`div`,ot,[e.providers.length===0?(b(),g(`div`,st,` 暂无并发数据 `)):c(``,!0),(b(!0),g(d,null,A(e.providers,e=>(b(),g(`div`,{key:e.providerId,class:`space-y-1`},[t(`div`,ct,[t(`span`,lt,n(e.providerName),1),t(`span`,ut,[e.maxConcurrency===0?(b(),g(d,{key:0},[v(`未限制`)],64)):(b(),g(d,{key:1},[v(n(e.active)+` / `+n(e.maxConcurrency),1)],64))])]),e.maxConcurrency>0?(b(),g(`div`,dt,[t(`div`,{class:f([`h-full rounded-full transition-all duration-300`,r(e.active,e.maxConcurrency)]),style:P({width:`${Math.min(100,e.active/e.maxConcurrency*100)}%`})},null,6)])):c(``,!0),e.maxConcurrency>0?(b(),g(`div`,ft,[t(`span`,null,`排队: `+n(e.queued),1),t(`span`,null,`队列上限: `+n(e.maxQueueSize),1)])):c(``,!0)]))),128))]))}}),mt={key:0,class:`text-sm text-muted-foreground`},ht={key:1,class:`grid grid-cols-2 gap-3 text-sm`},gt={class:`font-medium text-foreground`},_t={class:`font-medium text-foreground`},vt={class:`col-span-2`},yt={class:`flex items-center justify-between`},bt={class:`text-muted-foreground`},xt={class:`h-2 bg-muted rounded-full overflow-hidden mt-1`},St={class:`font-medium text-foreground`},Ct={class:`font-medium text-foreground`},wt={class:`col-span-2`},Tt={class:`font-medium text-foreground`},Et=u({__name:`RuntimePanel`,props:{runtime:{}},setup(e){let r=e,i=N(()=>!r.runtime||r.runtime.memoryUsage.heapTotal===0?0:Math.min(100,r.runtime.memoryUsage.heapUsed/r.runtime.memoryUsage.heapTotal*100));function a(e){let t=Math.floor(e/1e3);return`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function o(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}return(r,s)=>e.runtime?(b(),g(`div`,ht,[t(`div`,null,[s[0]||=t(`p`,{class:`text-muted-foreground`},`运行时间`,-1),t(`p`,gt,n(a(e.runtime.uptimeMs)),1)]),t(`div`,null,[s[1]||=t(`p`,{class:`text-muted-foreground`},`内存 RSS`,-1),t(`p`,_t,n(o(e.runtime.memoryUsage.rss)),1)]),t(`div`,vt,[t(`div`,yt,[s[2]||=t(`p`,{class:`text-muted-foreground`},`Heap 使用`,-1),t(`p`,bt,n(o(e.runtime.memoryUsage.heapUsed))+` / `+n(o(e.runtime.memoryUsage.heapTotal)),1)]),t(`div`,xt,[t(`div`,{class:`h-full bg-blue-500 rounded-full transition-all duration-300`,style:P({width:`${i.value}%`})},null,4)])]),t(`div`,null,[s[3]||=t(`p`,{class:`text-muted-foreground`},`Active Handles`,-1),t(`p`,St,n(e.runtime.activeHandles),1)]),t(`div`,null,[s[4]||=t(`p`,{class:`text-muted-foreground`},`Active Requests`,-1),t(`p`,Ct,n(e.runtime.activeRequests),1)]),t(`div`,wt,[s[5]||=t(`p`,{class:`text-muted-foreground`},`Event Loop 延迟`,-1),t(`p`,Tt,n(e.runtime.eventLoopDelayMs.toFixed(2))+`ms`,1)])])):(b(),g(`div`,mt,`暂无运行时数据`))}}),Dt={key:0,class:`text-sm text-muted-foreground`},Ot={key:1,class:`space-y-2`},kt={class:`flex items-center justify-between text-sm`},At={class:`text-muted-foreground`},jt={class:`h-2 bg-muted rounded-full overflow-hidden`},Mt=u({__name:`StatusCodePanel`,props:{byStatusCode:{}},setup(e){let r=e,i=N(()=>Object.values(r.byStatusCode).reduce((e,t)=>e+t,0)),a=N(()=>{let e=r.byStatusCode,t=i.value||1,n=o(e,200,299),a=o(e,400,499)-(e[429]||0),s=e[429]||0,c=o(e,500,599);return[{label:`2xx 成功`,count:n,percent:(n/t*100).toFixed(1),textClass:`text-green-600 dark:text-green-400`,barClass:`bg-green-500`},{label:`4xx 客户端错误`,count:a,percent:(a/t*100).toFixed(1),textClass:`text-yellow-600 dark:text-yellow-400`,barClass:`bg-yellow-500`},{label:`429 限流`,count:s,percent:(s/t*100).toFixed(1),textClass:`text-orange-600 dark:text-orange-400`,barClass:`bg-orange-500`},{label:`5xx 服务端错误`,count:c,percent:(c/t*100).toFixed(1),textClass:`text-red-600 dark:text-red-400`,barClass:`bg-red-500`}].filter(e=>e.count>0)});function o(e,t,n){let r=0;for(let[i,a]of Object.entries(e)){let e=Number(i);e>=t&&e<=n&&(r+=a)}return r}return(e,r)=>i.value===0?(b(),g(`div`,Dt,`暂无状态码数据`)):(b(),g(`div`,Ot,[(b(!0),g(d,null,A(a.value,e=>(b(),g(`div`,{key:e.label,class:`space-y-1`},[t(`div`,kt,[t(`span`,{class:f(e.textClass)},n(e.label),3),t(`span`,At,n(e.count)+` (`+n(e.percent)+`%) `,1)]),t(`div`,jt,[t(`div`,{class:f([`h-full rounded-full transition-all duration-300`,e.barClass]),style:P({width:`${e.percent}%`})},null,6)])]))),128))]))}}),$=u({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t,r=x(n,`class`);return(t,i)=>(b(),_(o(qe),e({"data-slot":`separator`},o(r),{class:o(O)(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch`,n.class)}),null,16,[`class`]))}}),Nt={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Pt={key:1,class:`space-y-3`},Ft={class:`flex items-center gap-2`},It={class:`font-medium text-foreground`},Lt={class:`text-xs text-muted-foreground font-mono`},Rt={class:`space-y-1.5 text-sm`},zt={class:`flex justify-between`},Bt={class:`font-medium text-foreground`},Vt={class:`flex justify-between`},Ht={class:`font-medium text-foreground text-right max-w-[140px] truncate`},Ut={class:`flex justify-between`},Wt={class:`font-medium text-foreground`},Gt={class:`flex justify-between`},Kt={class:`font-medium text-foreground`},qt={class:`flex justify-between`},Jt={class:`font-medium text-foreground`},Yt={class:`flex justify-between`},Xt={class:`font-medium text-foreground`},Zt={class:`flex justify-between`},Qt={class:`font-medium text-foreground`},$t={key:0,class:`flex items-center gap-1.5`},en={key:1,class:`flex items-center gap-1.5`},tn={key:2},nn={class:`space-y-1`},rn={class:`text-muted-foreground w-4`},an={class:`text-muted-foreground`},on={key:0,class:`text-red-500 truncate`},sn={key:3,class:`text-xs text-muted-foreground`},cn={key:4,class:`pt-2`},ln=u({__name:`RequestDetailPanel`,props:{request:{}},emits:[`viewDetail`],setup(e){let r=e,i=N(()=>r.request?(((r.request.completedAt??Date.now())-r.request.startTime)/1e3).toFixed(1):`--`),a=N(()=>{if(!r.request?.streamMetrics)return`--`;let e=r.request.streamMetrics;if(e.outputTokens==null||e.ttftMs==null)return`--`;let t=(r.request.completedAt??Date.now())-r.request.startTime;return t<=0?`--`:`${(e.outputTokens/(t/1e3)).toFixed(1)} tok/s`});function l(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function u(e){switch(e){case`pending`:return`进行中`;case`failed`:return`失败`;case`completed`:return`完成`;default:return e}}return(r,p)=>e.request?(b(),g(`div`,Pt,[t(`div`,Ft,[t(`span`,It,n(e.request.model),1),e.request.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`text-xs`},{default:M(()=>[...p[1]||=[v(`SSE`,-1)]]),_:1})):c(``,!0),s(o(U),{variant:l(e.request.status)},{default:M(()=>[v(n(u(e.request.status)),1)]),_:1},8,[`variant`])]),t(`p`,Lt,n(e.request.id.slice(0,8)),1),t(`div`,Rt,[t(`div`,zt,[p[2]||=t(`span`,{class:`text-muted-foreground`},`API 类型`,-1),t(`span`,Bt,n(e.request.apiType.toUpperCase()),1)]),s(o($)),t(`div`,Vt,[p[3]||=t(`span`,{class:`text-muted-foreground`},`Provider`,-1),t(`span`,Ht,n(e.request.providerName),1)]),s(o($)),t(`div`,Ut,[p[4]||=t(`span`,{class:`text-muted-foreground`},`耗时`,-1),t(`span`,Wt,n(i.value)+`s`,1)]),s(o($)),t(`div`,Gt,[p[5]||=t(`span`,{class:`text-muted-foreground`},`TTFT`,-1),t(`span`,Kt,n(e.request.streamMetrics?.ttftMs==null?`--`:`${e.request.streamMetrics.ttftMs.toFixed(0)}ms`),1)]),s(o($)),t(`div`,qt,[p[6]||=t(`span`,{class:`text-muted-foreground`},`Input Tokens`,-1),t(`span`,Jt,n(e.request.streamMetrics?.inputTokens??`--`),1)]),s(o($)),t(`div`,Yt,[p[7]||=t(`span`,{class:`text-muted-foreground`},`Output Tokens`,-1),t(`span`,Xt,n(e.request.streamMetrics?.outputTokens==null?`--`:e.request.streamMetrics.outputTokens),1)]),s(o($)),t(`div`,Zt,[p[8]||=t(`span`,{class:`text-muted-foreground`},`速度`,-1),t(`span`,Qt,n(a.value),1)])]),e.request.streamMetrics?.isComplete?(b(),g(`div`,$t,[s(o(U),{variant:`secondary`},{default:M(()=>[...p[9]||=[v(`已完成`,-1)]]),_:1}),e.request.streamMetrics.stopReason?(b(),_(o(U),{key:0,variant:`outline`},{default:M(()=>[v(n(e.request.streamMetrics.stopReason),1)]),_:1})):c(``,!0)])):e.request.status===`pending`?(b(),g(`div`,en,[s(o(U),null,{default:M(()=>[...p[10]||=[v(`进行中`,-1)]]),_:1})])):c(``,!0),e.request.attempts.length>0?(b(),g(`div`,tn,[p[11]||=t(`p`,{class:`text-xs text-muted-foreground mb-1`},`尝试历史`,-1),t(`div`,nn,[(b(!0),g(d,null,A(e.request.attempts,(e,r)=>(b(),g(`div`,{key:r,class:`flex items-center gap-2 text-xs bg-muted/50 rounded px-2 py-1`},[t(`span`,rn,`#`+n(r+1),1),t(`span`,{class:f(e.statusCode&&e.statusCode<400?`text-green-600`:`text-red-500`)},n(e.statusCode??`N/A`),3),t(`span`,an,n(e.latencyMs.toFixed(0))+`ms`,1),e.error?(b(),g(`span`,on,n(e.error),1)):c(``,!0)]))),128))])])):c(``,!0),e.request.clientIp?(b(),g(`div`,sn,` IP: `+n(e.request.clientIp),1)):c(``,!0),e.request.status===`completed`||e.request.status===`failed`?(b(),g(`div`,cn,[s(o(ee),{variant:`outline`,size:`sm`,class:`w-full`,onClick:p[0]||=t=>r.$emit(`viewDetail`,e.request.id)},{default:M(()=>[...p[12]||=[v(` 查看完整日志 `,-1)]]),_:1})])):c(``,!0)])):(b(),g(`div`,Nt,` 点击请求查看详情 `))}}),un={key:0},dn={key:0,class:`rounded-md border bg-card`},fn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},pn={class:`px-2.5 py-2`},mn={class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-80`},hn={key:1,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},gn={key:2,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},_n={key:1,class:`flex items-center justify-center h-full text-sm text-muted-foreground`},vn={key:0,class:`space-y-2`},yn={class:`rounded-md border bg-card`},bn={class:`flex items-center gap-1.5 px-2.5 py-1.5 cursor-pointer hover:bg-muted/50 rounded-t-md`},xn={class:`text-xs text-muted-foreground`},Sn={class:`px-2.5 pb-2`},Cn={class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-60 text-muted-foreground italic`},wn={key:1,class:`rounded-md border bg-card`},Tn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},En={class:`px-2.5 py-2`},Dn={class:`rounded-md border bg-card`},On={class:`flex items-center gap-1.5 px-2.5 py-1.5 cursor-pointer hover:bg-muted/50 rounded-t-md`},kn={class:`px-2.5 pb-2`},An={class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-60`},jn={key:1},Mn={class:`rounded-md border bg-card`},Nn={class:`flex items-center gap-1.5 px-2.5 py-1.5 border-b`},Pn={class:`px-2.5 py-2`},Fn={key:2,class:`text-sm text-muted-foreground py-4 text-center`},In={key:0,class:`text-xs bg-muted/50 rounded p-2 overflow-y-auto whitespace-pre-wrap break-words max-h-[60vh]`},Ln={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Rn=u({__name:`StreamResponseViewer`,props:{metrics:{},isStream:{type:Boolean},streamContent:{},nonStreamBody:{},loadingBody:{type:Boolean}},setup(e){let r=e,a=i(null),l=i([]),u=i({}),p=i({}),m=N(()=>{let e=r.streamContent?.blocks;return!!(e&&e.length>0&&e.some(e=>e.type!==`text`||e.content.length>0))});return T(()=>r.streamContent?.textContent,()=>{C(()=>{a.value&&(a.value.scrollTop=a.value.scrollHeight);for(let e of l.value)e.scrollTop=e.scrollHeight})}),(r,i)=>e.isStream?e.streamContent?(b(),_(o(me),{key:2,"default-value":`structured`,class:`flex flex-col h-full`},{default:M(()=>[s(o(he),{class:`w-fit`},{default:M(()=>[s(o(_e),{value:`structured`},{default:M(()=>[...i[1]||=[v(`响应内容`,-1)]]),_:1}),s(o(_e),{value:`raw`},{default:M(()=>[...i[2]||=[v(`原始 SSE`,-1)]]),_:1})]),_:1}),s(o(ge),{value:`structured`,class:`flex-1 overflow-y-auto mt-2`},{default:M(()=>[m.value?(b(),g(`div`,vn,[(b(!0),g(d,null,A(e.streamContent.blocks,(e,r)=>(b(),g(d,{key:r},[e.type===`thinking`&&e.content?(b(),_(o(ie),{key:0,open:u.value[r]??!0,"onUpdate:open":e=>u.value[r]=e},{default:M(()=>[t(`div`,yn,[s(o(ae),{"as-child":``},{default:M(()=>[t(`div`,bn,[s(o(be),{class:f([`h-3 w-3 transition-transform`,{"rotate-90":u.value[r]??!0}])},null,8,[`class`]),s(o(ye),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[3]||=t(`span`,{class:`text-xs font-medium`},`Thinking`,-1),t(`span`,xn,`(`+n(e.content.length)+` 字符)`,1)])]),_:2},1024),s(o(re),null,{default:M(()=>[t(`div`,Sn,[t(`pre`,Cn,[t(`code`,null,n(e.content),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):e.type===`text`&&e.content?(b(),g(`div`,wn,[t(`div`,Tn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[4]||=t(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),t(`div`,En,[t(`pre`,{ref_for:!0,ref_key:`textContentRefs`,ref:l,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-60`},[t(`code`,null,n(e.content),1)],512)])])):e.type===`tool_use`?(b(),_(o(ie),{key:2,open:p.value[r]??!1,"onUpdate:open":e=>p.value[r]=e},{default:M(()=>[t(`div`,Dn,[s(o(ae),{"as-child":``},{default:M(()=>[t(`div`,On,[s(o(be),{class:f([`h-3 w-3 transition-transform`,{"rotate-90":p.value[r]??!1}])},null,8,[`class`]),s(o(Se),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[5]||=t(`span`,{class:`text-xs font-medium`},`Tool Use`,-1),e.name?(b(),_(o(U),{key:0,variant:`outline`,class:`text-xs`},{default:M(()=>[v(n(e.name),1)]),_:2},1024)):c(``,!0)])]),_:2},1024),s(o(re),null,{default:M(()=>[t(`div`,kn,[t(`pre`,An,[t(`code`,null,n(e.content||`(等待数据...)`),1)])])]),_:2},1024)])]),_:2},1032,[`open`,`onUpdate:open`])):c(``,!0)],64))),128))])):e.streamContent.textContent?(b(),g(`div`,jn,[t(`div`,Mn,[t(`div`,Nn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[6]||=t(`span`,{class:`text-xs font-medium`},`Reply`,-1)]),t(`div`,Pn,[t(`pre`,{ref_key:`textContentRef`,ref:a,class:`text-xs overflow-y-auto whitespace-pre-wrap break-words max-h-80`},[t(`code`,null,n(e.streamContent.textContent),1)],512)])])])):(b(),g(`div`,Fn,` 暂无内容 `))]),_:1}),s(o(ge),{value:`raw`,class:`flex-1 overflow-y-auto mt-2`},{default:M(()=>[e.streamContent.rawChunks?(b(),g(`pre`,In,[t(`code`,null,n(e.streamContent.rawChunks),1)])):(b(),g(`div`,Ln,` 暂无数据 `))]),_:1})]),_:1})):(b(),g(`div`,_n,` 等待流数据... `)):(b(),g(`div`,un,[e.nonStreamBody?(b(),g(`div`,dn,[t(`div`,fn,[s(o(xe),{class:`h-3.5 w-3.5 text-muted-foreground`}),i[0]||=t(`span`,{class:`text-xs font-medium`},`Response`,-1)]),t(`div`,pn,[t(`pre`,mn,[t(`code`,null,n(e.nonStreamBody),1)])])])):e.loadingBody?(b(),g(`div`,hn,` 加载中... `)):(b(),g(`div`,gn,` 非流式请求无实时内容 `))]))}}),zn={key:0,class:`text-sm text-muted-foreground py-4 text-center`},Bn={key:1,class:`text-sm text-muted-foreground py-4 text-center`},Vn={class:`flex flex-wrap gap-1`},Hn={key:0,class:`text-xs text-muted-foreground`},Un=u({__name:`ProviderStatsTable`,props:{stats:{}},setup(e){let r=e,i=N(()=>r.stats?Object.entries(r.stats.byProvider).filter(([e])=>typeof e==`string`).map(([e,t])=>({id:e,name:t.providerName,stats:t,successRate:t.totalRequests>0?t.successCount/t.totalRequests*100:0,retryRate:t.totalRequests>0?t.retryCount/t.totalRequests*100:0,p99Latency:r.stats.p99LatencyMs.toFixed(0)+`ms`})):[]);return(r,a)=>e.stats?i.value.length===0?(b(),g(`div`,Bn,` 暂无 Provider 统计 `)):(b(),_(o(de),{key:2},{default:M(()=>[s(o(pe),null,{default:M(()=>[s(o(fe),null,{default:M(()=>[s(o(H),null,{default:M(()=>[...a[0]||=[v(`Provider`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[1]||=[v(`请求数`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[2]||=[v(`成功率`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[3]||=[v(`平均延迟`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[4]||=[v(`P99 延迟`,-1)]]),_:1}),s(o(H),{class:`text-right`},{default:M(()=>[...a[5]||=[v(`重试率`,-1)]]),_:1}),s(o(H),null,{default:M(()=>[...a[6]||=[v(`Top Errors`,-1)]]),_:1})]),_:1})]),_:1}),s(o(ue),null,{default:M(()=>[(b(!0),g(d,null,A(i.value,e=>(b(),_(o(fe),{key:e.id},{default:M(()=>[s(o(V),{class:`font-medium`},{default:M(()=>[v(n(e.name),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.stats.totalRequests),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[t(`span`,{class:f(e.successRate>=95?`text-green-600`:e.successRate>=80?`text-yellow-600`:`text-red-500`)},n(e.successRate.toFixed(1))+`% `,3)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.stats.avgLatencyMs.toFixed(0))+`ms`,1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[v(n(e.p99Latency),1)]),_:2},1024),s(o(V),{class:`text-right`},{default:M(()=>[t(`span`,{class:f(e.retryRate>10?`text-yellow-600`:``)},n(e.retryRate.toFixed(1))+`% `,3)]),_:2},1024),s(o(V),null,{default:M(()=>[t(`div`,Vn,[(b(!0),g(d,null,A(e.stats.topErrors.slice(0,3),e=>(b(),_(o(U),{key:e.code,variant:`destructive`,class:`text-xs`},{default:M(()=>[v(n(e.code)+` (`+n(e.count)+`) `,1)]),_:2},1024))),128)),e.stats.topErrors.length===0?(b(),g(`span`,Hn,`--`)):c(``,!0)])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):(b(),g(`div`,zn,` 暂无数据 `))}});function Wn(e,t,n){let r=null,i=null;function a(){if(!r){r=new EventSource(e),r.onopen=()=>{n?.onOpen?.()};for(let[e,n]of Object.entries(t))r.addEventListener(e,n);r.onerror=()=>{o(),n?.onClose?.(),i=setTimeout(a,3e3)}}}function o(){i&&=(clearTimeout(i),null),r&&=(r.close(),null)}return k(()=>{o(),n?.onClose?.()}),{connect:a,disconnect:o}}var Gn=200;function Kn(){let e=i([]),t=i([]),n=i(null),r=i([]),a=i(null),o=i(!1),s=N(()=>e.value.filter(e=>e.isStream).length),c=N(()=>e.value.filter(e=>!e.queued)),l=N(()=>e.value.filter(e=>e.queued===!0));function u(i){let o;try{o=JSON.parse(i.data)}catch{return}switch(i.type){case`request_start`:{let n=o;t.value.some(e=>e.id===n.id)||e.value.unshift(n);break}case`request_update`:e.value=o;break;case`request_complete`:{let n=o;e.value=e.value.filter(e=>e.id!==n.id),t.value.unshift(n),t.value.length>Gn&&(t.value.length=Gn);break}case`concurrency_update`:r.value=o;break;case`stats_update`:n.value=o;break;case`runtime_update`:a.value=o;break}}function d(){o.value=!0}function f(){o.value=!1}async function p(){try{let[i,o,s,c,l]=await Promise.allSettled([m.getMonitorActive(),m.getMonitorRecent(),m.getMonitorStats(),m.getMonitorConcurrency(),m.getMonitorRuntime()]);i.status===`fulfilled`&&(e.value=i.value),o.status===`fulfilled`&&(t.value=o.value),s.status===`fulfilled`&&(n.value=s.value),c.status===`fulfilled`&&(r.value=c.value),l.status===`fulfilled`&&(a.value=l.value)}catch(e){console.error(`Failed to load initial monitor data:`,e),n.value=null,r.value=[],a.value=null}}let h=i(void 0),g=i(!1),_=i(0);async function v(n){let r=++_.value,i=e.value.find(e=>e.id===n)??t.value.find(e=>e.id===n);if(!i||i.isStream||i.status===`pending`){h.value=void 0;return}g.value=!0,h.value=void 0;try{let e=await m.getLogDetail(n);if(r!==_.value)return;h.value=e.response_body??void 0}catch(e){if(r!==_.value)return;console.warn(`Failed to load non-stream body:`,e),h.value=void 0}finally{r===_.value&&(g.value=!1)}}let y=i(null),b=i(!1);function x(e){y.value=e,b.value=!0,v(e)}return{activeRequests:e,recentCompleted:t,stats:n,concurrency:r,runtime:a,connected:o,streamCount:s,streamingRequests:c,queuedRequests:l,selectedRequestId:y,selectedRequest:N(()=>y.value?e.value.find(e=>e.id===y.value)??t.value.find(e=>e.id===y.value)??null:null),requestDetailOpen:b,selectRequest:x,nonStreamBody:h,nonStreamBodyLoading:g,handleSSEMessage:u,handleSSEOpen:d,handleSSEClose:f,loadInitialData:p}}var qn={class:`p-6`},Jn={class:`flex items-center justify-between mb-4`},Yn={class:`flex items-center gap-2`},Xn={class:`grid grid-cols-3 gap-4 mb-6`},Zn={class:`flex items-center justify-between`},Qn={key:0,class:`text-sm text-muted-foreground py-2`},$n=[`onClick`],er={class:`text-sm text-foreground truncate flex-1`},tr={class:`text-xs text-muted-foreground shrink-0`},nr={class:`flex items-center justify-between`},rr={key:0,class:`text-sm text-muted-foreground py-2`},ir=[`onClick`],ar={class:`text-sm text-foreground truncate flex-1`},or={class:`text-xs text-muted-foreground shrink-0`},sr={class:`flex items-center justify-between`},cr={key:0,class:`text-sm text-muted-foreground py-2`},lr=[`onClick`],ur={class:`text-sm text-foreground truncate flex-1`},dr={class:`grid grid-cols-1 lg:grid-cols-3 gap-4`},fr={key:0,class:`flex gap-4 min-h-0`},pr={class:`w-[260px] shrink-0 overflow-y-auto pr-2 border-r`},mr={class:`flex-1 min-w-0 overflow-y-auto`},hr={key:1,class:`text-sm text-muted-foreground py-4 text-center`},gr=1e3,_r=u({__name:`Monitor`,setup(e){let{activeRequests:a,recentCompleted:l,stats:u,concurrency:p,runtime:m,connected:h,streamCount:y,streamingRequests:x,queuedRequests:S,selectedRequestId:C,selectedRequest:w,requestDetailOpen:T,selectRequest:E,nonStreamBody:ee,nonStreamBodyLoading:O,handleSSEMessage:k,handleSSEOpen:j,handleSSEClose:N,loadInitialData:P}=Kn(),{connect:F}=Wn(`/admin/api/monitor/stream`,{request_start:k,request_update:k,request_complete:k,concurrency_update:k,stats_update:k,runtime_update:k},{onOpen:j,onClose:N}),I=i(!1),te=i(null);function L(e){T.value=!1,I.value=!0,te.value?.load(e)}function R(e){switch(e){case`pending`:return`default`;case`failed`:return`destructive`;case`completed`:return`secondary`;default:return`outline`}}function ne(e){switch(e){case`pending`:return`进行中`;case`failed`:return`失败`;case`completed`:return`完成`;default:return e}}function z(e){return((Date.now()-e)/gr).toFixed(1)}return D(async()=>{await P(),F()}),(e,i)=>(b(),g(`div`,qn,[t(`div`,Jn,[i[2]||=t(`h2`,{class:`text-lg font-semibold text-foreground`},`实时监控`,-1),t(`div`,Yn,[s(o(U),{variant:o(h)?`default`:`destructive`},{default:M(()=>[v(n(o(h)?`已连接`:`未连接`),1)]),_:1},8,[`variant`])])]),s(at,{stats:o(u),"active-count":o(a).length,"stream-count":o(y)},null,8,[`stats`,`active-count`,`stream-count`]),t(`div`,Xn,[s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,Zn,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[3]||=[v(`活跃请求`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(x).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(x).length===0?(b(),g(`div`,Qn,` 暂无活跃请求 `)):c(``,!0),(b(!0),g(d,null,A(o(x),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:R(e.status),class:`shrink-0`},{default:M(()=>[v(n(ne(e.status)),1)]),_:2},1032,[`variant`]),t(`span`,er,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),t(`span`,tr,n(z(e.startTime))+`s`,1),e.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[...i[4]||=[v(`SSE`,-1)]]),_:1})):c(``,!0)],10,$n))),128))]),_:1})]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,nr,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[5]||=[v(`队列请求`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(S).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(S).length===0?(b(),g(`div`,rr,` 暂无排队请求 `)):c(``,!0),(b(!0),g(d,null,A(o(S),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-2 px-2 rounded cursor-pointer hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:`outline`,class:`shrink-0`},{default:M(()=>[...i[6]||=[v(` 排队 `,-1)]]),_:1}),t(`span`,ar,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),t(`span`,or,n(z(e.startTime))+`s`,1)],10,ir))),128))]),_:1})]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),{class:`pb-2`},{default:M(()=>[t(`div`,sr,[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[7]||=[v(`已完成`,-1)]]),_:1}),s(o(U),{variant:`secondary`},{default:M(()=>[v(n(o(l).length),1)]),_:1})])]),_:1}),s(o(G),null,{default:M(()=>[s(o(Ye),{class:`h-64`},{default:M(()=>[o(l).length===0?(b(),g(`div`,cr,` 暂无已完成请求 `)):c(``,!0),(b(!0),g(d,null,A(o(l),e=>(b(),g(`div`,{key:e.id,class:f([`flex items-center gap-2 py-1.5 px-2 rounded cursor-pointer opacity-60 hover:opacity-80 hover:bg-muted/50 transition-colors`,{"bg-muted":o(C)===e.id}]),onClick:t=>o(E)(e.id)},[s(o(U),{variant:R(e.status),class:`shrink-0`},{default:M(()=>[v(n(ne(e.status)),1)]),_:2},1032,[`variant`]),t(`span`,ur,n(e.model),1),s(o(U),{variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[v(n(e.providerName),1)]),_:2},1024),e.isStream?(b(),_(o(U),{key:0,variant:`outline`,class:`shrink-0 text-xs`},{default:M(()=>[...i[8]||=[v(`SSE`,-1)]]),_:1})):c(``,!0)],10,lr))),128))]),_:1})]),_:1})]),_:1})]),s(o(W),{class:`mb-4`},{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[9]||=[v(`Provider 统计`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Un,{stats:o(u)},null,8,[`stats`])]),_:1})]),_:1}),t(`div`,dr,[s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[10]||=[v(`并发度`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(pt,{providers:o(p)},null,8,[`providers`])]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[11]||=[v(`状态码分布`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Mt,{"by-status-code":o(u)?.byStatusCode??{}},null,8,[`by-status-code`])]),_:1})]),_:1}),s(o(W),null,{default:M(()=>[s(o(K),null,{default:M(()=>[s(o(q),{class:`text-sm font-medium text-foreground`},{default:M(()=>[...i[12]||=[v(`运行时`,-1)]]),_:1})]),_:1}),s(o(G),null,{default:M(()=>[s(Et,{runtime:o(m)},null,8,[`runtime`])]),_:1})]),_:1})]),s(o(ce),{open:o(T),"onUpdate:open":i[0]||=e=>r(T)?T.value=e:null},{default:M(()=>[s(o(oe),{class:`max-w-5xl max-h-[80vh]`},{default:M(()=>[s(o(se),null,{default:M(()=>[s(o(le),null,{default:M(()=>[...i[13]||=[v(`请求详情`,-1)]]),_:1})]),_:1}),o(w)?(b(),g(`div`,fr,[t(`div`,pr,[s(ln,{request:o(w),onViewDetail:L},null,8,[`request`])]),t(`div`,mr,[s(Rn,{metrics:o(w).streamMetrics??null,"is-stream":o(w).isStream,"stream-content":o(w).streamContent??void 0,"non-stream-body":o(ee),"loading-body":o(O)},null,8,[`metrics`,`is-stream`,`stream-content`,`non-stream-body`,`loading-body`])])])):(b(),g(`div`,hr,` 点击请求查看详情 `))]),_:1})]),_:1},8,[`open`]),s(ve,{ref_key:`logDetailDialog`,ref:te,open:I.value,"onUpdate:open":i[1]||=e=>I.value=e},null,8,[`open`])]))}});export{_r as default};
@@ -0,0 +1 @@
1
+ import{$ as e,Dt as t,Ft as n,G as r,K as i,Ot as a,Q as o,Tt as s,U as c,V as l,_t as u,at as d,ct as f,gt as p,i as m,kt as h,l as g,m as _,nt as v,vt as y,xt as b,yt as x,z as S,zt as C}from"./button-qxGNBunr.js";import{S as w}from"./Collection-DY9-Yue9.js";import{t as T}from"./useForwardExpose-awoGXQkg.js";function E(e){let n=t(),r=S(()=>n.value?.width??0),i=S(()=>n.value?.height??0);return v(()=>{let t=g(e);if(t){n.value={width:t.offsetWidth,height:t.offsetHeight};let e=new ResizeObserver(e=>{if(!Array.isArray(e)||!e.length)return;let r=e[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=t.offsetWidth,a=t.offsetHeight;n.value={width:i,height:a}});return e.observe(t,{box:`border-box`}),()=>e.unobserve(t)}else n.value=void 0}),{width:r,height:i}}var[D,O]=w(`PopperRoot`),ee=i({inheritAttrs:!1,__name:`PopperRoot`,setup(e){let n=t();return O({anchor:n,onAnchorChange:e=>n.value=e}),(e,t)=>f(e.$slots,`default`)}}),k=i({__name:`PopperAnchor`,props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,{forwardRef:r,currentElement:i}=T(),a=D();return y(()=>{a.onAnchorChange(t.reference??i.value)}),(e,t)=>(d(),l(n(m),{ref:n(r),as:e.as,"as-child":e.asChild},{default:x(()=>[f(e.$slots,`default`)]),_:3},8,[`as`,`as-child`]))}});function te(e){return e!==null}function ne(e){return{name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=A(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}}}function A(e){let[t,n=`center`]=e.split(`-`);return[t,n]}var j=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,P=Math.round,F=Math.floor,I=e=>({x:e,y:e}),L={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function re(e,t,n){return N(e,M(t,n))}function R(e,t){return typeof e==`function`?e(t):e}function z(e){return e.split(`-`)[0]}function B(e){return e.split(`-`)[1]}function ie(e){return e===`x`?`y`:`x`}function ae(e){return e===`y`?`height`:`width`}function V(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function oe(e){return ie(V(e))}function se(e,t,n){n===void 0&&(n=!1);let r=B(e),i=oe(e),a=ae(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=ge(o)),[o,ge(o)]}function ce(e){let t=ge(e);return[le(e),t,le(t)]}function le(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var ue=[`left`,`right`],de=[`right`,`left`],fe=[`top`,`bottom`],pe=[`bottom`,`top`];function me(e,t,n){switch(e){case`top`:case`bottom`:return n?t?de:ue:t?ue:de;case`left`:case`right`:return t?fe:pe;default:return[]}}function he(e,t,n,r){let i=B(e),a=me(z(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(le)))),a}function ge(e){let t=z(e);return L[t]+e.slice(t.length)}function _e(e){return{top:0,right:0,bottom:0,left:0,...e}}function ve(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:_e(e)}function ye(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function be(e,t,n){let{reference:r,floating:i}=e,a=V(t),o=oe(t),s=ae(o),c=z(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(B(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function xe(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=R(t,e),p=ve(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ye(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=ye(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var Se=50,Ce=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:xe},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=be(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<Se&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=be(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},we=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=R(e,t)||{};if(l==null)return{};let d=ve(u),f={x:n,y:r},p=oe(i),m=ae(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),D=M(d[v],T),O=E,ee=C-h[m]-D,k=C/2-h[m]/2+w,te=re(O,k,ee),ne=!c.arrow&&B(i)!=null&&k!==te&&a.reference[m]/2-(k<O?E:D)-h[m]/2<0,A=ne?k<O?k-O:k-ee:0;return{[p]:f[p]+A,data:{[p]:te,centerOffset:k-te-A,...ne&&{alignmentOffset:A}},reset:ne}}}),Te=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=R(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=z(r),_=V(o),v=z(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[ge(o)]:ce(o)),x=p!==`none`;!d&&x&&b.push(...he(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=se(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==V(t))||T.every(e=>V(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=V(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}};function Ee(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function De(e){return j.some(t=>e[t]>=0)}var Oe=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=R(e,t);switch(i){case`referenceHidden`:{let e=Ee(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:De(e)}}}case`escaped`:{let e=Ee(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:De(e)}}}default:return{}}}}},ke=new Set([`left`,`top`]);async function Ae(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=z(n),s=B(n),c=V(n)===`y`,l=ke.has(o)?-1:1,u=a&&c?-1:1,d=R(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var je=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Ae(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},Me=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=R(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=V(z(i)),p=ie(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=re(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=re(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},Ne=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=R(e,t),u={x:n,y:r},d=V(i),f=ie(d),p=u[f],m=u[d],h=R(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=ke.has(z(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}},Pe=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=R(e,t),u=await o.detectOverflow(t,l),d=z(i),f=B(i),p=V(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=M(h-u[g],v),x=M(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=N(u.left,0),t=N(u.right,0),n=N(u.top,0),r=N(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:N(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:N(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function Fe(){return typeof window<`u`}function H(e){return Ie(e)?(e.nodeName||``).toLowerCase():`#document`}function U(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function W(e){return((Ie(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Ie(e){return Fe()?e instanceof Node||e instanceof U(e).Node:!1}function G(e){return Fe()?e instanceof Element||e instanceof U(e).Element:!1}function K(e){return Fe()?e instanceof HTMLElement||e instanceof U(e).HTMLElement:!1}function Le(e){return!Fe()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof U(e).ShadowRoot}function Re(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function ze(e){return/^(table|td|th)$/.test(H(e))}function Be(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ve=/transform|translate|scale|rotate|perspective|filter/,He=/paint|layout|strict|content/,q=e=>!!e&&e!==`none`,Ue;function We(e){let t=G(e)?Y(e):e;return q(t.transform)||q(t.translate)||q(t.scale)||q(t.rotate)||q(t.perspective)||!Ke()&&(q(t.backdropFilter)||q(t.filter))||Ve.test(t.willChange||``)||He.test(t.contain||``)}function Ge(e){let t=X(e);for(;K(t)&&!J(t);){if(We(t))return t;if(Be(t))return null;t=X(t)}return null}function Ke(){return Ue??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Ue}function J(e){return/^(html|body|#document)$/.test(H(e))}function Y(e){return U(e).getComputedStyle(e)}function qe(e){return G(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function X(e){if(H(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||Le(e)&&e.host||W(e);return Le(t)?t.host:t}function Je(e){let t=X(e);return J(t)?e.ownerDocument?e.ownerDocument.body:e.body:K(t)&&Re(t)?t:Je(t)}function Ye(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Je(e),i=r===e.ownerDocument?.body,a=U(r);if(i){let e=Xe(a);return t.concat(a,a.visualViewport||[],Re(r)?r:[],e&&n?Ye(e):[])}else return t.concat(r,Ye(r,[],n))}function Xe(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ze(e){let t=Y(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=K(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=P(n)!==a||P(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Qe(e){return G(e)?e:e.contextElement}function Z(e){let t=Qe(e);if(!K(t))return I(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Ze(t),o=(a?P(n.width):n.width)/r,s=(a?P(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var $e=I(0);function et(e){let t=U(e);return!Ke()||!t.visualViewport?$e:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function tt(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==U(e)?!1:t}function Q(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Qe(e),o=I(1);t&&(r?G(r)&&(o=Z(r)):o=Z(e));let s=tt(a,n,r)?et(a):I(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=U(a),t=r&&G(r)?U(r):r,n=e,i=Xe(n);for(;i&&r&&t!==n;){let e=Z(i),t=i.getBoundingClientRect(),r=Y(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=U(i),i=Xe(n)}}return ye({width:u,height:d,x:c,y:l})}function nt(e,t){let n=qe(e).scrollLeft;return t?t.left+n:Q(W(e)).left+n}function rt(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-nt(e,n),y:n.top+t.scrollTop}}function it(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=W(r),s=t?Be(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=I(1),u=I(0),d=K(r);if((d||!d&&!a)&&((H(r)!==`body`||Re(o))&&(c=qe(r)),d)){let e=Q(r);l=Z(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?rt(o,c):I(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function at(e){return Array.from(e.getClientRects())}function ot(e){let t=W(e),n=qe(e),r=e.ownerDocument.body,i=N(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=N(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+nt(e),s=-n.scrollTop;return Y(r).direction===`rtl`&&(o+=N(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var st=25;function ct(e,t){let n=U(e),r=W(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=Ke();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=nt(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=st&&(a-=o)}else l<=st&&(a+=l);return{width:a,height:o,x:s,y:c}}function lt(e,t){let n=Q(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=K(e)?Z(e):I(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function ut(e,t,n){let r;if(t===`viewport`)r=ct(e,n);else if(t===`document`)r=ot(W(e));else if(G(t))r=lt(t,n);else{let n=et(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return ye(r)}function dt(e,t){let n=X(e);return n===t||!G(n)||J(n)?!1:Y(n).position===`fixed`||dt(n,t)}function ft(e,t){let n=t.get(e);if(n)return n;let r=Ye(e,[],!1).filter(e=>G(e)&&H(e)!==`body`),i=null,a=Y(e).position===`fixed`,o=a?X(e):e;for(;G(o)&&!J(o);){let t=Y(o),n=We(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||Re(o)&&!n&&dt(e,o))?r=r.filter(e=>e!==o):i=t,o=X(o)}return t.set(e,r),r}function pt(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Be(t)?[]:ft(t,this._c):[].concat(n),r],o=ut(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e<a.length;e++){let n=ut(t,a[e],i);s=N(n.top,s),c=M(n.right,c),l=M(n.bottom,l),u=N(n.left,u)}return{width:c-u,height:l-s,x:u,y:s}}function mt(e){let{width:t,height:n}=Ze(e);return{width:t,height:n}}function ht(e,t,n){let r=K(t),i=W(t),a=n===`fixed`,o=Q(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=I(0);function l(){c.x=nt(i)}if(r||!r&&!a)if((H(t)!==`body`||Re(i))&&(s=qe(t)),r){let e=Q(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else i&&l();a&&!r&&i&&l();let u=i&&!r&&!a?rt(i,s):I(0);return{x:o.left+s.scrollLeft-c.x-u.x,y:o.top+s.scrollTop-c.y-u.y,width:o.width,height:o.height}}function gt(e){return Y(e).position===`static`}function _t(e,t){if(!K(e)||Y(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return W(e)===n&&(n=n.ownerDocument.body),n}function vt(e,t){let n=U(e);if(Be(e))return n;if(!K(e)){let t=X(e);for(;t&&!J(t);){if(G(t)&&!gt(t))return t;t=X(t)}return n}let r=_t(e,t);for(;r&&ze(r)&&gt(r);)r=_t(r,t);return r&&J(r)&&gt(r)&&!We(r)?n:r||Ge(e)||n}var yt=async function(e){let t=this.getOffsetParent||vt,n=this.getDimensions,r=await n(e.floating);return{reference:ht(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function bt(e){return Y(e).direction===`rtl`}var xt={convertOffsetParentRelativeRectToViewportRelativeRect:it,getDocumentElement:W,getClippingRect:pt,getOffsetParent:vt,getElementRects:yt,getClientRects:at,getDimensions:mt,getScale:Z,isElement:G,isRTL:bt};function St(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Ct(e,t){let n=null,r,i=W(e);function a(){var e;clearTimeout(r),(e=n)==null||e.disconnect(),n=null}function o(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),a();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(s||t(),!f||!p)return;let m=F(d),h=F(i.clientWidth-(u+f)),g=F(i.clientHeight-(d+p)),_=F(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:N(0,M(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(n!==c){if(!y)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}n===1&&!St(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function wt(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Qe(e),u=i||a?[...l?Ye(l):[],...t?Ye(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?Ct(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Q(e):null;c&&g();function g(){let t=Q(e);h&&!St(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Tt=je,Et=Me,Dt=Te,Ot=Pe,kt=Oe,At=we,jt=Ne,Mt=(e,t,n)=>{let r=new Map,i={platform:xt,...n},a={...i.platform,_c:r};return Ce(e,t,{...i,platform:a})};function Nt(e){return typeof e==`object`&&!!e&&`$el`in e}function Pt(e){if(Nt(e)){let t=e.$el;return Ie(t)&&H(t)===`#comment`?null:t}return e}function $(e){return typeof e==`function`?e():n(e)}function Ft(e){return{name:`arrow`,options:e,fn(t){let n=Pt($(e.element));return n==null?{}:At({element:n,padding:e.padding}).fn(t)}}}function It(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Lt(e,t){let n=It(e);return Math.round(t*n)/n}function Rt(e,n,r){r===void 0&&(r={});let i=r.whileElementsMounted,o=S(()=>$(r.open)??!0),c=S(()=>$(r.middleware)),l=S(()=>$(r.placement)??`bottom`),u=S(()=>$(r.strategy)??`absolute`),d=S(()=>$(r.transform)??!0),f=S(()=>Pt(e.value)),m=S(()=>Pt(n.value)),g=t(0),_=t(0),v=t(u.value),y=t(l.value),x=h({}),C=t(!1),w=S(()=>{let e={position:v.value,left:`0`,top:`0`};if(!m.value)return e;let t=Lt(m.value,g.value),n=Lt(m.value,_.value);return d.value?{...e,transform:`translate(`+t+`px, `+n+`px)`,...It(m.value)>=1.5&&{willChange:`transform`}}:{position:v.value,left:t+`px`,top:n+`px`}}),T;function E(){if(f.value==null||m.value==null)return;let e=o.value;Mt(f.value,m.value,{middleware:c.value,placement:l.value,strategy:u.value}).then(t=>{g.value=t.x,_.value=t.y,v.value=t.strategy,y.value=t.placement,x.value=t.middlewareData,C.value=e!==!1})}function D(){typeof T==`function`&&(T(),T=void 0)}function O(){if(D(),i===void 0){E();return}if(f.value!=null&&m.value!=null){T=i(f.value,m.value,E);return}}function ee(){o.value||(C.value=!1)}return p([c,l,u,o],E,{flush:`sync`}),p([f,m],O,{flush:`sync`}),p(o,ee,{flush:`sync`}),b()&&s(D),{x:a(g),y:a(_),strategy:a(v),placement:a(y),middlewareData:a(x),isPositioned:a(C),floatingStyles:w,update:E}}var zt={side:`bottom`,sideOffset:0,sideFlip:!0,align:`center`,alignOffset:0,alignFlip:!0,arrowPadding:0,hideShiftedArrow:!0,avoidCollisions:!0,collisionBoundary:()=>[],collisionPadding:0,sticky:`partial`,hideWhenDetached:!1,positionStrategy:`fixed`,updatePositionStrategy:`optimized`,prioritizePosition:!1},[Bt,Vt]=w(`PopperContent`),Ht=i({inheritAttrs:!1,__name:`PopperContent`,props:o({side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},{...zt}),emits:[`placed`],setup(i,{emit:a}){let o=i,s=a,l=D(),{forwardRef:p,currentElement:h}=T(),g=t(),v=t(),{width:b,height:w}=E(v),O=S(()=>o.side+(o.align===`center`?``:`-${o.align}`)),ee=S(()=>typeof o.collisionPadding==`number`?o.collisionPadding:{top:0,right:0,bottom:0,left:0,...o.collisionPadding}),k=S(()=>Array.isArray(o.collisionBoundary)?o.collisionBoundary:[o.collisionBoundary]),j=S(()=>({padding:ee.value,boundary:k.value.filter(te),altBoundary:k.value.length>0})),M=S(()=>({mainAxis:o.sideFlip,crossAxis:o.alignFlip})),N=_(()=>[Tt({mainAxis:o.sideOffset+w.value,alignmentAxis:o.alignOffset}),o.prioritizePosition&&o.avoidCollisions&&Dt({...j.value,...M.value}),o.avoidCollisions&&Et({mainAxis:!0,crossAxis:!!o.prioritizePosition,limiter:o.sticky===`partial`?jt():void 0,...j.value}),!o.prioritizePosition&&o.avoidCollisions&&Dt({...j.value,...M.value}),Ot({...j.value,apply:({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--reka-popper-available-width`,`${n}px`),o.setProperty(`--reka-popper-available-height`,`${r}px`),o.setProperty(`--reka-popper-anchor-width`,`${i}px`),o.setProperty(`--reka-popper-anchor-height`,`${a}px`)}}),v.value&&Ft({element:v.value,padding:o.arrowPadding}),ne({arrowWidth:b.value,arrowHeight:w.value}),o.hideWhenDetached&&kt({strategy:`referenceHidden`,...j.value})]),{floatingStyles:P,placement:F,isPositioned:I,middlewareData:L,update:re}=Rt(S(()=>o.reference??l.anchor.value),g,{strategy:o.positionStrategy,placement:O,whileElementsMounted:(...e)=>wt(...e,{layoutShift:!o.disableUpdateOnLayoutShift,animationFrame:o.updatePositionStrategy===`always`}),middleware:N}),R=S(()=>A(F.value)[0]),z=S(()=>A(F.value)[1]);y(()=>{I.value&&s(`placed`)});let B=S(()=>{let e=L.value.arrow?.centerOffset!==0;return o.hideShiftedArrow&&e}),ie=t(``);return u(()=>{h.value&&(ie.value=window.getComputedStyle(h.value).zIndex)}),Vt({placedSide:R,onArrowChange:e=>v.value=e,arrowX:S(()=>L.value.arrow?.x??0),arrowY:S(()=>L.value.arrow?.y??0),shouldHideArrow:B}),(t,i)=>(d(),c(`div`,{ref_key:`floatingRef`,ref:g,"data-reka-popper-content-wrapper":``,style:C({...n(P),transform:n(I)?n(P).transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:ie.value,"--reka-popper-transform-origin":[n(L).transformOrigin?.x,n(L).transformOrigin?.y].join(` `),...n(L).hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}})},[r(n(m),e({ref:n(p)},t.$attrs,{"as-child":o.asChild,as:t.as,"data-side":R.value,"data-align":z.value,style:{animation:n(I)?void 0:`none`}}),{default:x(()=>[f(t.$slots,`default`)]),_:3},16,[`as-child`,`as`,`data-side`,`data-align`,`style`])],4))}});export{ee as i,Bt as n,k as r,Ht as t};
@@ -0,0 +1 @@
1
+ import{B as e,Bt as t,Dt as n,F as r,Ft as i,G as a,H as o,I as s,K as c,L as l,Lt as ee,O as u,U as d,V as f,W as p,at as m,n as h,nt as te,st as g,ut as ne,yt as _,z as re}from"./button-qxGNBunr.js";import{t as ie}from"./createLucideIcon-jHUFhqKn.js";import{n as ae}from"./ohash.D__AXeF1-nmJ7gFbh.js";import{a as oe,i as se,n as ce,r as le,t as ue}from"./SelectValue-CP4Sh7LP.js";import{t as de}from"./Checkbox-DH8iqXQd.js";import{i as fe,o as pe,r as me,s as he,t as ge}from"./dialog-D8pIXeSs.js";import{a as _e,c as ve,i as ye,n as be,o as xe,r as Se,t as Ce}from"./alert-dialog-BoGRIC1Q.js";import{a as we,i as v,n as y,o as Te,r as Ee,t as De}from"./TableHeader-BKE_yVML.js";import{t as b}from"./Label-DjtouWZ7.js";import{t as Oe}from"./Switch-DF6awXqs.js";import{t as x}from"./badge-DIO8W_W9.js";import{n as ke}from"./lib-DjpgwSRA.js";import{t as S}from"./Input-BhvZ-Up7.js";var Ae=ie(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),C;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(C||={});var je;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(je||={});var w=C.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),T=e=>{switch(typeof e){case`undefined`:return w.undefined;case`string`:return w.string;case`number`:return Number.isNaN(e)?w.nan:w.number;case`boolean`:return w.boolean;case`function`:return w.function;case`bigint`:return w.bigint;case`symbol`:return w.symbol;case`object`:return Array.isArray(e)?w.array:e===null?w.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?w.promise:typeof Map<`u`&&e instanceof Map?w.map:typeof Set<`u`&&e instanceof Set?w.set:typeof Date<`u`&&e instanceof Date?w.date:w.object;default:return w.unknown}},E=C.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),D=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;r<i.path.length;){let n=i.path[r];r===i.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(i))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,C.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=e=>e.message){let t={},n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};D.create=e=>new D(e);var O=(e,t)=>{let n;switch(e.code){case E.invalid_type:n=e.received===w.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case E.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,C.jsonStringifyReplacer)}`;break;case E.unrecognized_keys:n=`Unrecognized key(s) in object: ${C.joinValues(e.keys,`, `)}`;break;case E.invalid_union:n=`Invalid input`;break;case E.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${C.joinValues(e.options)}`;break;case E.invalid_enum_value:n=`Invalid enum value. Expected ${C.joinValues(e.options)}, received '${e.received}'`;break;case E.invalid_arguments:n=`Invalid function arguments`;break;case E.invalid_return_type:n=`Invalid function return type`;break;case E.invalid_date:n=`Invalid date`;break;case E.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:C.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case E.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case E.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case E.custom:n=`Invalid input`;break;case E.invalid_intersection_types:n=`Intersection results could not be merged`;break;case E.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case E.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,C.assertNever(e)}return{message:n}},k=O;function A(){return k}var j=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function M(e,t){let n=A(),r=j({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===O?void 0:O].filter(e=>!!e)});e.common.issues.push(r)}var N=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return P;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return P;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},P=Object.freeze({status:`aborted`}),Me=e=>({status:`dirty`,value:e}),F=e=>({status:`valid`,value:e}),I=e=>e.status===`aborted`,Ne=e=>e.status===`dirty`,L=e=>e.status===`valid`,R=e=>typeof Promise<`u`&&e instanceof Promise,z;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(z||={});var B=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Pe=(e,t)=>{if(L(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){return this._error||=new D(e.common.issues),this._error}}};function V(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var H=class{get description(){return this._def.description}_getType(e){return T(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:T(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new N,ctx:{common:e.parent.common,data:e.data,parsedType:T(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(R(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:T(e)};return Pe(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:T(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return L(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>L(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:T(e)},r=this._parse({data:e,path:n.path,parent:n});return Pe(n,await(R(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:E.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new X({schema:this,typeName:$.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return Z.create(this,this._def)}nullable(){return Q.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return G.create(this)}promise(){return kt.create(this,this._def)}or(e){return gt.create([this,e],this._def)}and(e){return yt.create(this,e,this._def)}transform(e){return new X({...V(this._def),schema:this,typeName:$.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new At({...V(this._def),innerType:this,defaultValue:t,typeName:$.ZodDefault})}brand(){return new Nt({typeName:$.ZodBranded,type:this,...V(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new jt({...V(this._def),innerType:this,catchValue:t,typeName:$.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Pt.create(this,e)}readonly(){return Ft.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Fe=/^c[^\s-]{8,}$/i,Ie=/^[0-9a-z]+$/,Le=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Re=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,ze=/^[a-z0-9_-]{21}$/i,Be=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ve=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,He=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Ue=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,We,Ge=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Ke=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,qe=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Je=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ye=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Xe=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ze=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,Qe=RegExp(`^${Ze}$`);function $e(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function et(e){return RegExp(`^${$e(e)}$`)}function tt(e){let t=`${Ze}T${$e(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function nt(e,t){return!!((t===`v4`||!t)&&Ge.test(e)||(t===`v6`||!t)&&qe.test(e))}function rt(e,t){if(!Be.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function it(e,t){return!!((t===`v4`||!t)&&Ke.test(e)||(t===`v6`||!t)&&Je.test(e))}var at=class e extends H{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==w.string){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.string,received:t.parsedType}),P}let t=new N,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.length<r.value&&(n=this._getOrReturnCtx(e,n),M(n,{code:E.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`max`)e.data.length>r.value&&(n=this._getOrReturnCtx(e,n),M(n,{code:E.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.length<r.value;(i||a)&&(n=this._getOrReturnCtx(e,n),i?M(n,{code:E.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}):a&&M(n,{code:E.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}),t.dirty())}else if(r.kind===`email`)He.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`email`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`emoji`)We||=new RegExp(Ue,`u`),We.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`emoji`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`uuid`)Re.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`uuid`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`nanoid`)ze.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`nanoid`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid`)Fe.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`cuid`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid2`)Ie.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`cuid2`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`ulid`)Le.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`ulid`,code:E.invalid_string,message:r.message}),t.dirty());else if(r.kind===`url`)try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),M(n,{validation:`url`,code:E.invalid_string,message:r.message}),t.dirty()}else r.kind===`regex`?(r.regex.lastIndex=0,r.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`regex`,code:E.invalid_string,message:r.message}),t.dirty())):r.kind===`trim`?e.data=e.data.trim():r.kind===`includes`?e.data.includes(r.value,r.position)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:{includes:r.value,position:r.position},message:r.message}),t.dirty()):r.kind===`toLowerCase`?e.data=e.data.toLowerCase():r.kind===`toUpperCase`?e.data=e.data.toUpperCase():r.kind===`startsWith`?e.data.startsWith(r.value)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:{startsWith:r.value},message:r.message}),t.dirty()):r.kind===`endsWith`?e.data.endsWith(r.value)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:{endsWith:r.value},message:r.message}),t.dirty()):r.kind===`datetime`?tt(r).test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:`datetime`,message:r.message}),t.dirty()):r.kind===`date`?Qe.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:`date`,message:r.message}),t.dirty()):r.kind===`time`?et(r).test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{code:E.invalid_string,validation:`time`,message:r.message}),t.dirty()):r.kind===`duration`?Ve.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`duration`,code:E.invalid_string,message:r.message}),t.dirty()):r.kind===`ip`?nt(e.data,r.version)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`ip`,code:E.invalid_string,message:r.message}),t.dirty()):r.kind===`jwt`?rt(e.data,r.alg)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`jwt`,code:E.invalid_string,message:r.message}),t.dirty()):r.kind===`cidr`?it(e.data,r.version)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`cidr`,code:E.invalid_string,message:r.message}),t.dirty()):r.kind===`base64`?Ye.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`base64`,code:E.invalid_string,message:r.message}),t.dirty()):r.kind===`base64url`?Xe.test(e.data)||(n=this._getOrReturnCtx(e,n),M(n,{validation:`base64url`,code:E.invalid_string,message:r.message}),t.dirty()):C.assertNever(r);return{status:t.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:E.invalid_string,...z.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...z.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...z.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...z.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...z.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...z.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...z.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...z.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...z.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...z.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...z.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...z.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...z.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...z.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...z.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...z.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...z.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...z.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...z.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...z.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...z.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...z.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...z.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...z.errToObj(t)})}nonempty(e){return this.min(1,z.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};at.create=e=>new at({checks:[],typeName:$.ZodString,coerce:e?.coerce??!1,...V(e)});function ot(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var st=class e extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==w.number){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.number,received:t.parsedType}),P}let t,n=new N;for(let r of this._def.checks)r.kind===`int`?C.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),M(t,{code:E.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.too_small,minimum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?ot(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),M(t,{code:E.not_finite,message:r.message}),n.dirty()):C.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,z.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,z.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,z.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,z.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:z.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:z.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:z.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:z.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:z.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:z.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:z.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:z.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:z.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:z.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind===`int`||e.kind===`multipleOf`&&C.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.value<e)&&(e=n.value);return Number.isFinite(t)&&Number.isFinite(e)}};st.create=e=>new st({checks:[],typeName:$.ZodNumber,coerce:e?.coerce||!1,...V(e)});var ct=class e extends H{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==w.bigint)return this._getInvalidInput(e);let t,n=new N;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.too_small,type:`bigint`,minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),M(t,{code:E.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):C.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.bigint,received:t.parsedType}),P}gte(e,t){return this.setLimit(`min`,e,!0,z.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,z.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,z.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,z.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:z.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:z.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:z.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:z.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:z.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:z.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};ct.create=e=>new ct({checks:[],typeName:$.ZodBigInt,coerce:e?.coerce??!1,...V(e)});var lt=class extends H{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==w.boolean){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.boolean,received:t.parsedType}),P}return F(e.data)}};lt.create=e=>new lt({typeName:$.ZodBoolean,coerce:e?.coerce||!1,...V(e)});var ut=class e extends H{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==w.date){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.date,received:t.parsedType}),P}if(Number.isNaN(e.data.getTime()))return M(this._getOrReturnCtx(e),{code:E.invalid_date}),P;let t=new N,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()<r.value&&(n=this._getOrReturnCtx(e,n),M(n,{code:E.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:`date`}),t.dirty()):r.kind===`max`?e.data.getTime()>r.value&&(n=this._getOrReturnCtx(e,n),M(n,{code:E.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):C.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:z.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:z.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e==null?null:new Date(e)}};ut.create=e=>new ut({checks:[],coerce:e?.coerce||!1,typeName:$.ZodDate,...V(e)});var dt=class extends H{_parse(e){if(this._getType(e)!==w.symbol){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.symbol,received:t.parsedType}),P}return F(e.data)}};dt.create=e=>new dt({typeName:$.ZodSymbol,...V(e)});var ft=class extends H{_parse(e){if(this._getType(e)!==w.undefined){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.undefined,received:t.parsedType}),P}return F(e.data)}};ft.create=e=>new ft({typeName:$.ZodUndefined,...V(e)});var pt=class extends H{_parse(e){if(this._getType(e)!==w.null){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.null,received:t.parsedType}),P}return F(e.data)}};pt.create=e=>new pt({typeName:$.ZodNull,...V(e)});var mt=class extends H{constructor(){super(...arguments),this._any=!0}_parse(e){return F(e.data)}};mt.create=e=>new mt({typeName:$.ZodAny,...V(e)});var U=class extends H{constructor(){super(...arguments),this._unknown=!0}_parse(e){return F(e.data)}};U.create=e=>new U({typeName:$.ZodUnknown,...V(e)});var W=class extends H{_parse(e){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.never,received:t.parsedType}),P}};W.create=e=>new W({typeName:$.ZodNever,...V(e)});var ht=class extends H{_parse(e){if(this._getType(e)!==w.undefined){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.void,received:t.parsedType}),P}return F(e.data)}};ht.create=e=>new ht({typeName:$.ZodVoid,...V(e)});var G=class e extends H{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==w.array)return M(t,{code:E.invalid_type,expected:w.array,received:t.parsedType}),P;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.length<r.exactLength.value;(e||i)&&(M(t,{code:e?E.too_big:E.too_small,minimum:i?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(r.minLength!==null&&t.data.length<r.minLength.value&&(M(t,{code:E.too_small,minimum:r.minLength.value,type:`array`,inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),r.maxLength!==null&&t.data.length>r.maxLength.value&&(M(t,{code:E.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new B(t,e,t.path,n)))).then(e=>N.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new B(t,e,t.path,n)));return N.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:z.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:z.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:z.toString(n)}})}nonempty(e){return this.min(1,e)}};G.create=(e,t)=>new G({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$.ZodArray,...V(t)});function K(e){if(e instanceof q){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Z.create(K(r))}return new q({...e._def,shape:()=>t})}else if(e instanceof G)return new G({...e._def,type:K(e.element)});else if(e instanceof Z)return Z.create(K(e.unwrap()));else if(e instanceof Q)return Q.create(K(e.unwrap()));else if(e instanceof Y)return Y.create(e.items.map(e=>K(e)));else return e}var q=class e extends H{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape();return this._cached={shape:e,keys:C.objectKeys(e)},this._cached}_parse(e){if(this._getType(e)!==w.object){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.object,received:t.parsedType}),P}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof W&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new B(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof W){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(M(n,{code:E.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new B(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>N.mergeObjectSync(t,e)):N.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return z.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:z.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of C.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of C.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return K(this)}partial(t){let n={};for(let e of C.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of C.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof Z;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return Et(C.objectKeys(this.shape))}};q.create=(e,t)=>new q({shape:()=>e,unknownKeys:`strip`,catchall:W.create(),typeName:$.ZodObject,...V(t)}),q.strictCreate=(e,t)=>new q({shape:()=>e,unknownKeys:`strict`,catchall:W.create(),typeName:$.ZodObject,...V(t)}),q.lazycreate=(e,t)=>new q({shape:e,unknownKeys:`strip`,catchall:W.create(),typeName:$.ZodObject,...V(t)});var gt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new D(e.ctx.common.issues));return M(t,{code:E.invalid_union,unionErrors:n}),P}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new D(e));return M(t,{code:E.invalid_union,unionErrors:i}),P}}get options(){return this._def.options}};gt.create=(e,t)=>new gt({options:e,typeName:$.ZodUnion,...V(t)});var J=e=>e instanceof wt?J(e.schema):e instanceof X?J(e.innerType()):e instanceof Tt?[e.value]:e instanceof Dt?e.options:e instanceof Ot?C.objectValues(e.enum):e instanceof At?J(e._def.innerType):e instanceof ft?[void 0]:e instanceof pt?[null]:e instanceof Z?[void 0,...J(e.unwrap())]:e instanceof Q?[null,...J(e.unwrap())]:e instanceof Nt||e instanceof Ft?J(e.unwrap()):e instanceof jt?J(e._def.innerType):[],_t=class e extends H{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==w.object)return M(t,{code:E.invalid_type,expected:w.object,received:t.parsedType}),P;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(M(t,{code:E.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),P)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=J(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:$.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...V(r)})}};function vt(e,t){let n=T(e),r=T(t);if(e===t)return{valid:!0,data:e};if(n===w.object&&r===w.object){let n=C.objectKeys(t),r=C.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=vt(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===w.array&&r===w.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=vt(i,a);if(!o.valid)return{valid:!1};n.push(o.data)}return{valid:!0,data:n}}else if(n===w.date&&r===w.date&&+e==+t)return{valid:!0,data:e};else return{valid:!1}}var yt=class extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if(I(e)||I(r))return P;let i=vt(e.value,r.value);return i.valid?((Ne(e)||Ne(r))&&t.dirty(),{status:t.value,value:i.data}):(M(n,{code:E.invalid_intersection_types}),P)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};yt.create=(e,t,n)=>new yt({left:e,right:t,typeName:$.ZodIntersection,...V(n)});var Y=class e extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==w.array)return M(n,{code:E.invalid_type,expected:w.array,received:n.parsedType}),P;if(n.data.length<this._def.items.length)return M(n,{code:E.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),P;!this._def.rest&&n.data.length>this._def.items.length&&(M(n,{code:E.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new B(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>N.mergeArray(t,e)):N.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Y.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new Y({items:e,typeName:$.ZodTuple,rest:null,...V(t)})};var bt=class e extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==w.object)return M(n,{code:E.invalid_type,expected:w.object,received:n.parsedType}),P;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new B(n,e,n.path,e)),value:a._parse(new B(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?N.mergeObjectAsync(t,r):N.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof H?new e({keyType:t,valueType:n,typeName:$.ZodRecord,...V(r)}):new e({keyType:at.create(),valueType:t,typeName:$.ZodRecord,...V(n)})}},xt=class extends H{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==w.map)return M(n,{code:E.invalid_type,expected:w.map,received:n.parsedType}),P;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new B(n,e,n.path,[a,`key`])),value:i._parse(new B(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return P;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return P;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};xt.create=(e,t,n)=>new xt({valueType:t,keyType:e,typeName:$.ZodMap,...V(n)});var St=class e extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==w.set)return M(n,{code:E.invalid_type,expected:w.set,received:n.parsedType}),P;let r=this._def;r.minSize!==null&&n.data.size<r.minSize.value&&(M(n,{code:E.too_small,minimum:r.minSize.value,type:`set`,inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),r.maxSize!==null&&n.data.size>r.maxSize.value&&(M(n,{code:E.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return P;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new B(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:z.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:z.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};St.create=(e,t)=>new St({valueType:e,minSize:null,maxSize:null,typeName:$.ZodSet,...V(t)});var Ct=class e extends H{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==w.function)return M(t,{code:E.invalid_type,expected:w.function,received:t.parsedType}),P;function n(e,n){return j({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,A(),O].filter(e=>!!e),issueData:{code:E.invalid_arguments,argumentsError:n}})}function r(e,n){return j({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,A(),O].filter(e=>!!e),issueData:{code:E.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof kt){let e=this;return F(async function(...t){let o=new D([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return F(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new D([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new D([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Y.create(t).rest(U.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||Y.create([]).rest(U.create()),returns:n||U.create(),typeName:$.ZodFunction,...V(r)})}},wt=class extends H{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};wt.create=(e,t)=>new wt({getter:e,typeName:$.ZodLazy,...V(t)});var Tt=class extends H{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return M(t,{received:t.data,code:E.invalid_literal,expected:this._def.value}),P}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Tt.create=(e,t)=>new Tt({value:e,typeName:$.ZodLiteral,...V(t)});function Et(e,t){return new Dt({values:e,typeName:$.ZodEnum,...V(t)})}var Dt=class e extends H{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return M(t,{expected:C.joinValues(n),received:t.parsedType,code:E.invalid_type}),P}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return M(t,{received:t.data,code:E.invalid_enum_value,options:n}),P}return F(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Dt.create=Et;var Ot=class extends H{_parse(e){let t=C.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==w.string&&n.parsedType!==w.number){let e=C.objectValues(t);return M(n,{expected:C.joinValues(e),received:n.parsedType,code:E.invalid_type}),P}if(this._cache||=new Set(C.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=C.objectValues(t);return M(n,{received:n.data,code:E.invalid_enum_value,options:e}),P}return F(e.data)}get enum(){return this._def.values}};Ot.create=(e,t)=>new Ot({values:e,typeName:$.ZodNativeEnum,...V(t)});var kt=class extends H{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==w.promise&&t.common.async===!1?(M(t,{code:E.invalid_type,expected:w.promise,received:t.parsedType}),P):F((t.parsedType===w.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};kt.create=(e,t)=>new kt({type:e,typeName:$.ZodPromise,...V(t)});var X=class extends H{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{M(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return P;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?P:r.status===`dirty`||t.value===`dirty`?Me(r.value):r});{if(t.value===`aborted`)return P;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?P:r.status===`dirty`||t.value===`dirty`?Me(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?P:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?P:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!L(e))return P;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>L(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):P);C.assertNever(r)}};X.create=(e,t,n)=>new X({schema:e,typeName:$.ZodEffects,effect:t,...V(n)}),X.createWithPreprocess=(e,t,n)=>new X({schema:t,effect:{type:`preprocess`,transform:e},typeName:$.ZodEffects,...V(n)});var Z=class extends H{_parse(e){return this._getType(e)===w.undefined?F(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Z.create=(e,t)=>new Z({innerType:e,typeName:$.ZodOptional,...V(t)});var Q=class extends H{_parse(e){return this._getType(e)===w.null?F(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Q.create=(e,t)=>new Q({innerType:e,typeName:$.ZodNullable,...V(t)});var At=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===w.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};At.create=(e,t)=>new At({innerType:e,typeName:$.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...V(t)});var jt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return R(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new D(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new D(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};jt.create=(e,t)=>new jt({innerType:e,typeName:$.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...V(t)});var Mt=class extends H{_parse(e){if(this._getType(e)!==w.nan){let t=this._getOrReturnCtx(e);return M(t,{code:E.invalid_type,expected:w.nan,received:t.parsedType}),P}return{status:`valid`,value:e.data}}};Mt.create=e=>new Mt({typeName:$.ZodNaN,...V(e)});var Nt=class extends H{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Pt=class e extends H{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?P:e.status===`dirty`?(t.dirty(),Me(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?P:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:$.ZodPipeline})}},Ft=class extends H{_parse(e){let t=this._def.innerType._parse(e),n=e=>(L(e)&&(e.value=Object.freeze(e.value)),e);return R(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};Ft.create=(e,t)=>new Ft({innerType:e,typeName:$.ZodReadonly,...V(t)}),q.lazycreate;var $;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})($||={});var It=at.create;st.create,Mt.create,ct.create,lt.create,ut.create,dt.create,ft.create,pt.create,mt.create,U.create,W.create,ht.create,G.create;var Lt=q.create;q.strictCreate,gt.create,_t.create,yt.create,Y.create,bt.create,xt.create,St.create,Ct.create,wt.create,Tt.create,Dt.create,Ot.create,kt.create,X.create,Z.create,Q.create,X.createWithPreprocess,Pt.create;var Rt={class:`p-6`},zt={class:`flex items-center justify-between mb-4`},Bt={class:`bg-card rounded-lg border overflow-hidden`},Vt={class:`flex items-center gap-1`},Ht={class:`font-mono text-xs text-muted-foreground`},Ut={class:`flex flex-wrap gap-1`},Wt={key:0,class:`text-muted-foreground text-xs`},Gt={key:1,class:`text-muted-foreground`},Kt={class:`rounded-md border bg-muted/40 p-3 space-y-2`},qt={class:`flex gap-2`},Jt={key:0,class:`text-sm text-destructive mt-1`},Yt={key:0,class:`text-sm text-destructive mt-1`},Xt={key:0,class:`text-sm text-destructive mt-1`},Zt={class:`flex flex-wrap gap-1.5 mb-1.5`},Qt={class:`flex gap-2`},$t={class:`flex items-center gap-2 mb-1`},en={key:0,class:`mt-2 space-y-2`},tn={key:0,class:`text-sm text-destructive mt-1`},nn={key:0,class:`text-sm text-destructive mt-1`},rn={key:0,class:`text-sm text-destructive mt-1`},an={class:`flex items-center gap-2`},on=3,sn=12e4,cn=10,ln=100,un=1e3,dn=7,fn=7,pn=2e3,mn=c({__name:`Providers`,setup(c){let ie={name:``,api_type:`anthropic`,base_url:``,api_key:``,models:[],is_active:!0,max_concurrency:on,queue_timeout_ms:sn,max_queue_size:cn},C=n(``),je=n([]),w=n([]),T=n(!1),E=n(null),D=n(null),O=n({...ie}),k=n({}),A=n(!1),j=n(null),M=Lt({name:It().min(1,`请输入名称`).regex(/^[a-zA-Z0-9_-]+$/,`仅允许英文、数字、横线和下划线`),base_url:It().min(1,`请输入 Base URL`).url(`请输入合法的 URL`)});function N(){let e={},t=M.safeParse({name:O.value.name.trim(),base_url:O.value.base_url.trim()});if(!t.success)for(let n of t.error.issues){let t=n.path[0];e[t]||(e[t]=n.message)}if(!E.value&&!O.value.api_key.trim()&&(e.api_key=`请输入 API Key`),A.value){let t=O.value.max_concurrency;(!t||t<1||t>ln)&&(e.max_concurrency=`范围 1-${ln}`),O.value.queue_timeout_ms<0&&(e.queue_timeout_ms=`不能为负数`);let n=O.value.max_queue_size;(!n||n<1||n>un)&&(e.max_queue_size=`范围 1-${un}`)}return k.value=e,Object.keys(e).length===0}function P(e){return e?e.slice(0,dn)+`*`.repeat(fn):``}async function Me(e,t){await navigator.clipboard.writeText(e),j.value=t,setTimeout(()=>{j.value=null},pn)}let F=n(``),I=n(``),Ne=re(()=>F.value?w.value.find(e=>e.group===F.value)?.presets??[]:[]);function L(){let e=w.value.find(e=>e.group===F.value)?.presets;e?.length?(I.value=e[0].plan,R()):I.value=``}function R(){let e=Ne.value.find(e=>e.plan===I.value);e&&(O.value.name=e.presetName,O.value.api_type=`anthropic`,O.value.base_url=e.baseUrl,O.value.models=[...e.models])}async function z(){try{je.value=await u.getProviders()}catch(e){console.error(`Failed to load providers:`,e),ke.error(`加载供应商失败`)}}function B(){let e=C.value.trim();if(!e)return;let t=e.split(/[,,]/).map(e=>e.trim()).filter(Boolean);for(let e of t)O.value.models.includes(e)||O.value.models.push(e);C.value=``}function Pe(e){O.value.models.splice(e,1)}function V(){E.value=null,O.value={...ie},A.value=!0,C.value=``,F.value=``,I.value=``,k.value={},T.value=!0}function H(e){E.value=e.id,O.value={name:e.name,api_type:`anthropic`,base_url:e.base_url,api_key:``,models:[...e.models||[]],is_active:!!e.is_active,max_concurrency:e.max_concurrency??on,queue_timeout_ms:e.queue_timeout_ms??sn,max_queue_size:e.max_queue_size??cn},A.value=(e.max_concurrency??0)>0,C.value=``,F.value=``,I.value=``,k.value={},T.value=!0}function Fe(){let e={name:O.value.name,api_type:`anthropic`,base_url:O.value.base_url,models:O.value.models,is_active:+!!O.value.is_active,max_concurrency:A.value?O.value.max_concurrency:0,queue_timeout_ms:A.value?O.value.queue_timeout_ms:0,max_queue_size:A.value?O.value.max_queue_size:cn};return O.value.api_key&&(e.api_key=O.value.api_key),e}async function Ie(){if(N())try{let e=Fe();e.name=O.value.name.trim(),E.value?await u.updateProvider(E.value,e):(e.api_key=O.value.api_key,await u.createProvider(e)),T.value=!1,await z()}catch(e){console.error(`Failed to save provider:`,e),ke.error(`保存供应商失败`)}}function Le(e){D.value=e}async function Re(){let e=D.value;if(e){D.value=null;try{await u.deleteProvider(e.id),await z()}catch(e){console.error(`Failed to delete provider:`,e),ke.error(`删除供应商失败`)}}}return te(async()=>{try{w.value=await u.recommended.getProviders()}catch{w.value=[]}await z()}),(n,c)=>(m(),d(`div`,Rt,[e(`div`,zt,[c[21]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`供应商`,-1),a(i(h),{onClick:V,class:`flex items-center gap-1`},{default:_(()=>[...c[20]||=[e(`svg`,{class:`w-4 h-4`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})],-1),p(` 添加供应商 `,-1)]]),_:1})]),e(`div`,Bt,[a(i(Te),null,{default:_(()=>[a(i(De),null,{default:_(()=>[a(i(Ee),{class:`bg-muted`},{default:_(()=>[a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[22]||=[p(`名称`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[23]||=[p(`类型`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[24]||=[p(`Base URL`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[25]||=[p(`API Key`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[26]||=[p(`模型`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[27]||=[p(`并发`,-1)]]),_:1}),a(i(y),{class:`text-muted-foreground`},{default:_(()=>[...c[28]||=[p(`状态`,-1)]]),_:1}),a(i(y),{class:`text-right text-muted-foreground`},{default:_(()=>[...c[29]||=[p(`操作`,-1)]]),_:1})]),_:1})]),_:1}),a(i(we),null,{default:_(()=>[(m(!0),d(l,null,g(je.value,n=>(m(),f(i(Ee),{key:n.id,class:ee({"opacity-60":!n.is_active})},{default:_(()=>[a(i(v),{class:`font-medium`},{default:_(()=>[p(t(n.name),1)]),_:2},1024),a(i(v),null,{default:_(()=>[a(i(x),{variant:`secondary`},{default:_(()=>[p(t(n.api_type),1)]),_:2},1024)]),_:2},1024),a(i(v),{class:`text-muted-foreground`},{default:_(()=>[p(t(n.base_url),1)]),_:2},1024),a(i(v),null,{default:_(()=>[e(`div`,Vt,[e(`span`,Ht,t(P(n.api_key)),1),a(i(h),{variant:`ghost`,size:`sm`,class:`h-6 w-6 p-0`,onClick:e=>Me(n.api_key,n.id)},{default:_(()=>[(m(),f(ne(j.value===n.id?i(ae):i(Ae)),{class:ee([`w-3.5 h-3.5`,{"text-green-500":j.value===n.id}])},null,8,[`class`]))]),_:2},1032,[`onClick`])])]),_:2},1024),a(i(v),null,{default:_(()=>[e(`div`,Ut,[(m(!0),d(l,null,g(n.models||[],e=>(m(),f(i(x),{key:e,variant:`secondary`,class:`text-xs`},{default:_(()=>[p(t(e),1)]),_:2},1024))),128)),n.models?.length?o(``,!0):(m(),d(`span`,Wt,`-`))])]),_:2},1024),a(i(v),null,{default:_(()=>[n.max_concurrency>0?(m(),f(i(x),{key:0,variant:`secondary`},{default:_(()=>[p(t(n.max_concurrency),1)]),_:2},1024)):(m(),d(`span`,Gt,`-`))]),_:2},1024),a(i(v),null,{default:_(()=>[a(i(x),{variant:n.is_active?`default`:`secondary`},{default:_(()=>[p(t(n.is_active?`启用`:`禁用`),1)]),_:2},1032,[`variant`])]),_:2},1024),a(i(v),{class:`text-right`},{default:_(()=>[a(i(h),{variant:`ghost`,size:`sm`,onClick:e=>H(n),class:`text-muted-foreground hover:text-primary mr-2`},{default:_(()=>[...c[30]||=[p(`编辑`,-1)]]),_:1},8,[`onClick`]),a(i(h),{variant:`ghost`,size:`sm`,onClick:e=>Le(n),class:`text-muted-foreground hover:text-destructive`},{default:_(()=>[...c[31]||=[p(`删除`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1032,[`class`]))),128)),je.value.length===0?(m(),f(i(Ee),{key:0},{default:_(()=>[a(i(v),{colspan:`8`,class:`text-center text-muted-foreground py-8`},{default:_(()=>[...c[32]||=[p(`暂无供应商`,-1)]]),_:1})]),_:1})):o(``,!0)]),_:1})]),_:1})]),a(i(he),{open:T.value,"onUpdate:open":c[18]||=e=>T.value=e},{default:_(()=>[a(i(pe),null,{default:_(()=>[a(i(me),null,{default:_(()=>[a(i(ge),null,{default:_(()=>[p(t(E.value?`编辑供应商`:`添加供应商`),1)]),_:1})]),_:1}),e(`form`,{onSubmit:s(Ie,[`prevent`]),class:`space-y-3`},[e(`div`,Kt,[c[33]||=e(`div`,{class:`text-xs font-medium text-muted-foreground`},`快速配置`,-1),e(`div`,qt,[a(i(oe),{modelValue:F.value,"onUpdate:modelValue":[c[0]||=e=>F.value=e,L]},{default:_(()=>[a(i(ce),{class:`flex-1`},{default:_(()=>[a(i(ue),{placeholder:`选择供应商`})]),_:1}),a(i(se),null,{default:_(()=>[(m(!0),d(l,null,g(w.value,e=>(m(),f(i(le),{key:e.group,value:e.group},{default:_(()=>[p(t(e.group),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`]),a(i(oe),{modelValue:I.value,"onUpdate:modelValue":[c[1]||=e=>I.value=e,R],disabled:!F.value},{default:_(()=>[a(i(ce),{class:`flex-1`},{default:_(()=>[a(i(ue),{placeholder:`选择套餐`})]),_:1}),a(i(se),null,{default:_(()=>[(m(!0),d(l,null,g(Ne.value,e=>(m(),f(i(le),{key:e.plan,value:e.plan},{default:_(()=>[p(t(e.plan),1)]),_:2},1032,[`value`]))),128))]),_:1})]),_:1},8,[`modelValue`,`disabled`])])]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[34]||=[p(`名称`,-1)]]),_:1}),a(i(S),{modelValue:O.value.name,"onUpdate:modelValue":c[2]||=e=>O.value.name=e,type:`text`,required:``,onInput:c[3]||=e=>delete k.value.name},null,8,[`modelValue`]),k.value.name?(m(),d(`p`,Jt,t(k.value.name),1)):o(``,!0)]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[35]||=[p(`Base URL`,-1)]]),_:1}),a(i(S),{modelValue:O.value.base_url,"onUpdate:modelValue":c[4]||=e=>O.value.base_url=e,type:`url`,required:``,onInput:c[5]||=e=>delete k.value.base_url},null,8,[`modelValue`]),k.value.base_url?(m(),d(`p`,Yt,t(k.value.base_url),1)):o(``,!0)]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[36]||=[p(`API Key`,-1)]]),_:1}),a(i(S),{modelValue:O.value.api_key,"onUpdate:modelValue":c[6]||=e=>O.value.api_key=e,type:`text`,required:!E.value,placeholder:E.value?`留空则保持原密钥不变`:``,onInput:c[7]||=e=>delete k.value.api_key},null,8,[`modelValue`,`required`,`placeholder`]),k.value.api_key?(m(),d(`p`,Xt,t(k.value.api_key),1)):o(``,!0)]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[37]||=[p(`可用模型`,-1)]]),_:1}),e(`div`,Zt,[(m(!0),d(l,null,g(O.value.models,(e,n)=>(m(),f(i(x),{key:n,variant:`secondary`,class:`gap-1 pr-1`},{default:_(()=>[p(t(e)+` `,1),a(i(h),{type:`button`,variant:`ghost`,size:`icon`,class:`h-4 w-4 rounded-full hover:bg-muted p-0 text-xs leading-none`,onClick:e=>Pe(n)},{default:_(()=>[...c[38]||=[p(`×`,-1)]]),_:1},8,[`onClick`])]),_:2},1024))),128))]),e(`div`,Qt,[a(i(S),{modelValue:C.value,"onUpdate:modelValue":c[8]||=e=>C.value=e,placeholder:`输入模型名称,多个用逗号分隔`,onKeydown:r(s(B,[`prevent`]),[`enter`]),class:`flex-1`},null,8,[`modelValue`,`onKeydown`]),a(i(h),{type:`button`,variant:`outline`,size:`sm`,onClick:B,disabled:!C.value.trim()},{default:_(()=>[...c[39]||=[p(`添加`,-1)]]),_:1},8,[`disabled`])])]),e(`div`,null,[e(`div`,$t,[a(i(Oe),{modelValue:A.value,"onUpdate:modelValue":c[9]||=e=>A.value=e,id:`concurrency-switch`},null,8,[`modelValue`]),a(i(b),{for:`concurrency-switch`,class:`text-sm text-foreground`},{default:_(()=>[...c[40]||=[p(`并发控制`,-1)]]),_:1})]),A.value?(m(),d(`div`,en,[e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[41]||=[p(`最大并发数`,-1)]]),_:1}),a(i(S),{modelValue:O.value.max_concurrency,"onUpdate:modelValue":c[10]||=e=>O.value.max_concurrency=e,modelModifiers:{number:!0},type:`number`,min:`1`,max:ln,placeholder:`3`,onInput:c[11]||=e=>delete k.value.max_concurrency},null,8,[`modelValue`]),k.value.max_concurrency?(m(),d(`p`,tn,t(k.value.max_concurrency),1)):o(``,!0)]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[42]||=[p(`队列超时 (ms)`,-1)]]),_:1}),a(i(S),{modelValue:O.value.queue_timeout_ms,"onUpdate:modelValue":c[12]||=e=>O.value.queue_timeout_ms=e,modelModifiers:{number:!0},type:`number`,min:`0`,placeholder:`0 = 无限等待`,onInput:c[13]||=e=>delete k.value.queue_timeout_ms},null,8,[`modelValue`]),k.value.queue_timeout_ms?(m(),d(`p`,nn,t(k.value.queue_timeout_ms),1)):o(``,!0)]),e(`div`,null,[a(i(b),{class:`block text-sm font-medium text-foreground mb-1`},{default:_(()=>[...c[43]||=[p(`最大队列长度`,-1)]]),_:1}),a(i(S),{modelValue:O.value.max_queue_size,"onUpdate:modelValue":c[14]||=e=>O.value.max_queue_size=e,modelModifiers:{number:!0},type:`number`,min:`1`,max:un,placeholder:cn,onInput:c[15]||=e=>delete k.value.max_queue_size},null,8,[`modelValue`]),k.value.max_queue_size?(m(),d(`p`,rn,t(k.value.max_queue_size),1)):o(``,!0)])])):o(``,!0)]),e(`div`,an,[a(i(de),{modelValue:O.value.is_active,"onUpdate:modelValue":c[16]||=e=>O.value.is_active=e,id:`svc-active`},null,8,[`modelValue`]),a(i(b),{for:`svc-active`,class:`text-sm text-foreground`},{default:_(()=>[...c[44]||=[p(`启用`,-1)]]),_:1})]),a(i(fe),null,{default:_(()=>[a(i(h),{type:`button`,variant:`outline`,onClick:c[17]||=e=>T.value=!1},{default:_(()=>[...c[45]||=[p(`取消`,-1)]]),_:1}),a(i(h),{type:`submit`},{default:_(()=>[...c[46]||=[p(`保存`,-1)]]),_:1})]),_:1})],32)]),_:1})]),_:1},8,[`open`]),a(i(ve),{open:!!D.value,"onUpdate:open":c[19]||=e=>{e||(D.value=null)}},{default:_(()=>[a(i(_e),null,{default:_(()=>[a(i(be),null,{default:_(()=>[a(i(Ce),null,{default:_(()=>[...c[47]||=[p(`确认删除`,-1)]]),_:1}),a(i(ye),null,{default:_(()=>[p(`确定要删除供应商「`+t(D.value?.name)+`」吗?此操作不可撤销。`,1)]),_:1})]),_:1}),a(i(Se),null,{default:_(()=>[a(i(xe),null,{default:_(()=>[...c[48]||=[p(`取消`,-1)]]),_:1}),a(i(h),{variant:`destructive`,onClick:Re},{default:_(()=>[...c[49]||=[p(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])]))}});export{mn as default};
@@ -0,0 +1,5 @@
1
+ import{B as e,Bt as t,Dt as n,Ft as r,G as i,H as a,K as o,L as s,Lt as c,O as l,U as u,V as d,W as f,at as p,ct as m,n as h,nt as g,r as _,st as v,yt as y}from"./button-qxGNBunr.js";import{i as b,n as x,r as S,t as C}from"./TooltipTrigger-BjQXeFem.js";import{n as w,r as T,t as E}from"./CollapsibleTrigger-DCRRORrU.js";import{a as D,c as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./alert-dialog-BoGRIC1Q.js";import{a as F,i as I,n as L,o as R,r as z,t as ee}from"./TableHeader-BKE_yVML.js";import{t as te}from"./Label-DjtouWZ7.js";import{t as ne}from"./Switch-DF6awXqs.js";import{i as re,n as B,r as V,t as H}from"./TabsTrigger-D8R7lxaI.js";import{t as U}from"./badge-DIO8W_W9.js";import{n as W}from"./lib-DjpgwSRA.js";import{n as G,t as K}from"./CardContent-fmM_iiuR.js";import{t as q}from"./CardHeader-BzzFzZ1B.js";import{t as J}from"./CardTitle-09d7O-11.js";import{t as Y}from"./format-CPdJtjZ5.js";var X=o({__name:`CardDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,n)=>(p(),u(`div`,{"data-slot":`card-description`,class:c(r(_)(`text-muted-foreground text-sm`,t.class))},[m(e.$slots,`default`)],2))}}),ie={key:0,class:`py-8 text-center text-muted-foreground`},ae={key:1,class:`py-8 text-center text-muted-foreground`},oe={class:`cursor-default font-mono text-xs`},se={class:`font-mono text-xs`},ce={key:0,class:`text-muted-foreground`},le={key:1,class:`text-muted-foreground`},ue={class:`flex items-center gap-2`},de={class:`space-y-2`},fe={class:`text-muted-foreground whitespace-nowrap`},pe={class:`text-muted-foreground`},me={class:`font-medium`},he=8,Z=6e4,Q=60,$=24,ge=o({__name:`SessionTable`,props:{sessions:{},loading:{type:Boolean},historyMap:{}},emits:[`clear`,`viewHistory`],setup(o,{emit:c}){let l=c,m=n(!1),g=n(null);function _(e){g.value=e,m.value=!0}function w(){g.value&&=(l(`clear`,g.value),null)}function T(e){return e.slice(0,he)+`...`}function E(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/Z);if(n<1)return`刚刚`;if(n<Q)return`${n} 分钟前`;let r=Math.floor(n/Q);return r<$?`${r} 小时前`:`${Math.floor(r/$)} 天前`}return(n,c)=>(p(),u(s,null,[o.loading?(p(),u(`div`,ie,`加载中...`)):o.sessions.length===0?(p(),u(`div`,ae,`暂无活跃 Session`)):(p(),d(r(R),{key:2},{default:y(()=>[i(r(ee),null,{default:y(()=>[i(r(z),null,{default:y(()=>[i(r(L),null,{default:y(()=>[...c[1]||=[f(`密钥名称`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[2]||=[f(`Session ID`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[3]||=[f(`当前模型`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[4]||=[f(`原始模型`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[5]||=[f(`最后活跃`,-1)]]),_:1}),i(r(L),null,{default:y(()=>[...c[6]||=[f(`操作`,-1)]]),_:1})]),_:1})]),_:1}),i(r(F),null,{default:y(()=>[(p(!0),u(s,null,v(o.sessions,l=>(p(),u(s,{key:l.id},[i(r(z),null,{default:y(()=>[i(r(I),{class:`font-medium`},{default:y(()=>[f(t(l.router_key_name),1)]),_:2},1024),i(r(I),null,{default:y(()=>[i(r(x),null,{default:y(()=>[i(r(b),null,{default:y(()=>[i(r(C),{"as-child":``},{default:y(()=>[e(`span`,oe,t(T(l.session_id)),1)]),_:2},1024),i(r(S),null,{default:y(()=>[e(`p`,se,t(l.session_id),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024),i(r(I),null,{default:y(()=>[i(r(U),{variant:`secondary`},{default:y(()=>[f(t(l.current_model),1)]),_:2},1024)]),_:2},1024),i(r(I),null,{default:y(()=>[l.original_model?(p(),u(`span`,ce,t(l.original_model),1)):(p(),u(`span`,le,`-`))]),_:2},1024),i(r(I),{class:`text-muted-foreground text-sm`},{default:y(()=>[f(t(E(l.last_active_at)),1)]),_:2},1024),i(r(I),null,{default:y(()=>[e(`div`,ue,[i(r(h),{variant:`ghost`,size:`sm`,onClick:e=>n.$emit(`viewHistory`,l)},{default:y(()=>[f(t(o.historyMap[l.session_id]?`收起`:`历史`),1)]),_:2},1032,[`onClick`]),i(r(h),{variant:`ghost`,size:`sm`,class:`text-destructive hover:text-destructive`,onClick:e=>_(l)},{default:y(()=>[...c[7]||=[f(` 清除 `,-1)]]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024),o.historyMap[l.session_id]?(p(),d(r(z),{key:0},{default:y(()=>[i(r(I),{colspan:`6`,class:`bg-muted/50 px-6 py-3`},{default:y(()=>[e(`div`,de,[c[9]||=e(`p`,{class:`text-sm font-medium text-foreground`},`切换历史`,-1),(p(!0),u(s,null,v(o.historyMap[l.session_id],n=>(p(),u(`div`,{key:n.id,class:`flex items-center gap-3 text-sm`},[e(`span`,fe,t(r(Y)(n.created_at)),1),i(r(U),{variant:`outline`,class:`text-xs`},{default:y(()=>[f(t(n.trigger_type),1)]),_:2},1024),e(`span`,null,[e(`span`,pe,t(n.old_model||`默认`),1),c[8]||=e(`span`,{class:`mx-1`},`→`,-1),e(`span`,me,t(n.new_model),1)])]))),128))])]),_:2},1024)]),_:2},1024)):a(``,!0)],64))),128))]),_:1})]),_:1})),i(r(O),{open:m.value,"onUpdate:open":c[0]||=e=>m.value=e},{default:y(()=>[i(r(D),null,{default:y(()=>[i(r(A),null,{default:y(()=>[i(r(P),null,{default:y(()=>[...c[10]||=[f(`确认清除 Session`,-1)]]),_:1}),i(r(k),null,{default:y(()=>[...c[11]||=[f(` 清除后,该 Session 将恢复使用默认模型映射。此操作不可撤销。 `,-1)]]),_:1})]),_:1}),i(r(M),null,{default:y(()=>[i(r(j),null,{default:y(()=>[...c[12]||=[f(`取消`,-1)]]),_:1}),i(r(N),{onClick:w},{default:y(()=>[...c[13]||=[f(`确认清除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])],64))}}),_e={class:`p-6`},ve={class:`flex items-center justify-between mb-4`},ye={key:0,class:`flex items-center gap-1`},be={key:1},xe={class:`flex items-center gap-3`},Se={class:`flex items-center justify-between`},Ce=`---
2
+ description: 切换代理路由模型
3
+ ---
4
+
5
+ [router-command: select-model $ARGUMENTS]`,we=o({__name:`ProxyEnhancement`,setup(a){let o=n(!1),s=n(!1),d=n(!0),m=n([]),_=n(!1),v=n({});async function b(){try{o.value=(await l.getProxyEnhancement()).claude_code_enabled}catch(e){console.error(`Failed to load proxy enhancement config:`,e),W.error(`加载配置失败`)}}async function x(){s.value=!0;try{await l.updateProxyEnhancement({claude_code_enabled:o.value}),W.success(`保存成功`)}catch(e){console.error(`Failed to save proxy enhancement config:`,e),W.error(`保存失败`)}finally{s.value=!1}}async function S(){_.value=!0;try{m.value=await l.getSessionStates()}catch(e){console.error(`Failed to load sessions:`,e),W.error(`加载 Session 列表失败`)}finally{_.value=!1}}async function C(e){try{await l.deleteSessionState(e.router_key_id,e.session_id),W.success(`Session 已清除`),S()}catch(e){console.error(`Failed to clear session:`,e),W.error(`清除 Session 失败`)}}async function D(e){let t=e.session_id;if(v.value[t]){delete v.value[t];return}try{let n=await l.getSessionHistory(e.router_key_id,e.session_id);v.value[t]=n}catch(e){console.error(`Failed to load history:`,e),W.error(`加载历史记录失败`)}}return g(()=>{b(),S()}),(n,a)=>(p(),u(`div`,_e,[e(`div`,ve,[a[3]||=e(`h2`,{class:`text-lg font-semibold text-foreground`},`代理增强(实验性)`,-1),i(r(h),{disabled:s.value,onClick:x},{default:y(()=>[s.value?(p(),u(`span`,ye,[...a[2]||=[e(`svg`,{class:`w-4 h-4 animate-spin`,fill:`none`,viewBox:`0 0 24 24`},[e(`circle`,{class:`opacity-25`,cx:`12`,cy:`12`,r:`10`,stroke:`currentColor`,"stroke-width":`4`}),e(`path`,{class:`opacity-75`,fill:`currentColor`,d:`M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z`})],-1),f(` 保存中... `,-1)]])):(p(),u(`span`,be,`保存`))]),_:1},8,[`disabled`])]),i(r(re),{"default-value":`claude-code`},{default:y(()=>[i(r(B),null,{default:y(()=>[i(r(H),{value:`claude-code`},{default:y(()=>[...a[4]||=[f(`Claude Code`,-1)]]),_:1}),i(r(H),{value:`opencode`},{default:y(()=>[...a[5]||=[f(`OpenCode`,-1)]]),_:1})]),_:1}),i(r(V),{value:`claude-code`},{default:y(()=>[i(r(G),null,{default:y(()=>[i(r(q),null,{default:y(()=>[i(r(J),null,{default:y(()=>[...a[6]||=[f(`Claude Code 动态模型切换`,-1)]]),_:1}),i(r(X),null,{default:y(()=>[...a[7]||=[f(` 在 Claude Code 对话中通过 /select-model 命令动态切换后端模型。模型选择在当前会话内有效(24h),不影响路由配置。 `,-1)]]),_:1})]),_:1}),i(r(K),null,{default:y(()=>[e(`div`,xe,[i(r(ne),{id:`claude-code-toggle`,modelValue:o.value,"onUpdate:modelValue":a[0]||=e=>o.value=e},null,8,[`modelValue`]),i(r(te),{for:`claude-code-toggle`},{default:y(()=>[f(t(o.value?`已启用`:`已禁用`),1)]),_:1})])]),_:1})]),_:1}),i(r(T),{open:d.value,"onUpdate:open":a[1]||=e=>d.value=e,class:`mt-4`},{default:y(()=>[i(r(E),{"as-child":``},{default:y(()=>[i(r(h),{variant:`ghost`,class:`w-full justify-between`},{default:y(()=>[a[9]||=e(`span`,null,`使用说明`,-1),(p(),u(`svg`,{class:c([`w-4 h-4 transition-transform`,{"rotate-180":d.value}]),fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[...a[8]||=[e(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M19 9l-7 7-7-7`},null,-1)]],2))]),_:1})]),_:1}),i(r(w),{class:`mt-2`},{default:y(()=>[i(r(G),null,{default:y(()=>[i(r(K),{class:`space-y-4 text-sm`},{default:y(()=>[e(`div`,null,[a[10]||=e(`p`,{class:`font-medium text-foreground mb-1 leading-relaxed`},`配置方法`,-1),a[11]||=e(`p`,{class:`text-muted-foreground leading-relaxed`},` 在 Claude Code 项目级或全局级目录下创建 Command 文件: `,-1),a[12]||=e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},[f(` # 项目级 .claude/commands/select-model.md`),e(`br`),f(` # 全局级 ~/.claude/commands/select-model.md `)],-1),a[13]||=e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 文件内容: `,-1),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`,textContent:Ce})]),a[14]||=e(`div`,null,[e(`p`,{class:`font-medium text-foreground mb-1 leading-relaxed`},`使用方法`),e(`p`,{class:`text-muted-foreground leading-relaxed`},` 查看可用模型列表(格式为 provider_name/backend_model): `),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},` /select-model `),e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 选择模型并记住到当前会话: `),e(`code`,{class:`block mt-1 px-3 py-2 bg-muted rounded text-xs font-mono whitespace-pre-wrap leading-relaxed`},` /select-model provider_name/backend_model `),e(`p`,{class:`text-muted-foreground leading-relaxed mt-2`},` 切换后在下方活跃 Session 表中确认状态,请求日志中可验证路由是否生效。 `)],-1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`]),i(r(G),{class:`mt-4`},{default:y(()=>[i(r(q),null,{default:y(()=>[e(`div`,Se,[e(`div`,null,[i(r(J),null,{default:y(()=>[...a[15]||=[f(`活跃 Session`,-1)]]),_:1}),i(r(X),null,{default:y(()=>[...a[16]||=[f(`查看和管理当前已配置模型的 session`,-1)]]),_:1})]),i(r(h),{variant:`outline`,size:`sm`,onClick:S,disabled:_.value},{default:y(()=>[...a[17]||=[f(`刷新`,-1)]]),_:1},8,[`disabled`])])]),_:1}),i(r(K),null,{default:y(()=>[i(ge,{sessions:m.value,loading:_.value,"history-map":v.value,onClear:C,onViewHistory:D},null,8,[`sessions`,`loading`,`history-map`])]),_:1})]),_:1})]),_:1}),i(r(V),{value:`opencode`},{default:y(()=>[...a[18]||=[e(`div`,{class:`flex flex-col items-center justify-center py-16 text-muted-foreground`},[e(`p`,{class:`text-lg`},`暂未支持 OpenCode 增强`)],-1)]]),_:1})]),_:1})]))}});export{we as default};