@chenpu17/cc-gw 0.8.14 → 0.8.16
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.
- package/package.json +5 -5
- package/src/web/dist/assets/About-BFdKK7FR.js +1 -0
- package/src/web/dist/assets/ApiKeys-C7GJd1XE.js +1 -0
- package/src/web/dist/assets/{ConfirmDialog-oYHVEpGJ.js → ConfirmDialog-D7vLTReM.js} +1 -1
- package/src/web/dist/assets/Dashboard-BZ61IQTq.js +1 -0
- package/src/web/dist/assets/{DialogShell-DcOGCV8m.js → DialogShell-BWia_d99.js} +1 -1
- package/src/web/dist/assets/Events-CM2Ddnk5.js +1 -0
- package/src/web/dist/assets/Help-DndY95PX.js +4 -0
- package/src/web/dist/assets/{Login-Dn8fbfFq.js → Login-CCMGFORE.js} +1 -1
- package/src/web/dist/assets/Logs-W9L1HmeW.js +1 -0
- package/src/web/dist/assets/ModelManagement-Dx1W3OOm.js +1 -0
- package/src/web/dist/assets/{PageSection-CuZMzA0E.js → PageSection-DVs3faWw.js} +1 -1
- package/src/web/dist/assets/{PageState-B03H5AV0.js → PageState-Dvjip2P-.js} +1 -1
- package/src/web/dist/assets/PageToolbar-BxRZF-QJ.js +1 -0
- package/src/web/dist/assets/Profiler-DAhd7InO.js +1 -0
- package/src/web/dist/assets/RoutingManagement-DTi8Xa_u.js +1 -0
- package/src/web/dist/assets/Settings-CjF3nCh7.js +1 -0
- package/src/web/dist/assets/{Skeleton-i1PjWApN.js → Skeleton-DHQ8ApGX.js} +1 -1
- package/src/web/dist/assets/app-DkubSF6m.js +61 -0
- package/src/web/dist/assets/{card-ChFVaqLf.js → card-Bx5Pg_wP.js} +1 -1
- package/src/web/dist/assets/{charts-core-DzWzxST6.js → charts-core-CK8TVJro.js} +1 -1
- package/src/web/dist/assets/{charts-engine-Ds7lwC51.js → charts-engine-CWjgwbj5.js} +1 -1
- package/src/web/dist/assets/{charts-react-D0nWbUCA.js → charts-react-CmmN-08P.js} +1 -1
- package/src/web/dist/assets/{gateway-BU3dR2tm.js → gateway-DOu5TM82.js} +1 -1
- package/src/web/dist/assets/global-CMwh_4v7.css +1 -0
- package/src/web/dist/assets/{global-B-NXh5qD.js → global-D8DuA4wF.js} +1 -1
- package/src/web/dist/assets/{i18n-Bl2BcCDG.js → i18n-C8tBby0x.js} +1 -1
- package/src/web/dist/assets/{input-DW7jGTgj.js → input-b5NRkUKN.js} +1 -1
- package/src/web/dist/assets/{label-Ci1io7XA.js → label-DUoPO5Jo.js} +1 -1
- package/src/web/dist/assets/{landing-BMe5-cHU.js → landing-BDpFbgJX.js} +1 -1
- package/src/web/dist/assets/package-C-Cj5JIX.js +1 -0
- package/src/web/dist/assets/{popover-CQHCVE2z.js → popover-BAGiqp11.js} +1 -1
- package/src/web/dist/assets/{query-BbGWgOFk.js → query-QCek5MsK.js} +1 -1
- package/src/web/dist/assets/{queryKeys-ucXCzh0P.js → queryKeys-BpeJfcg0.js} +1 -1
- package/src/web/dist/assets/{radix-mHySgtou.js → radix-CtQBp6Ie.js} +1 -1
- package/src/web/dist/assets/{router-CL3rf_uf.js → router-D2Fb4U0L.js} +1 -1
- package/src/web/dist/assets/{select-BchX45jJ.js → select-B5oPLG9G.js} +1 -1
- package/src/web/dist/assets/{switch-CT24uL_Q.js → switch-BDc99Vsq.js} +1 -1
- package/src/web/dist/assets/{table-DdvG93mx.js → table-BG-JeOj-.js} +1 -1
- package/src/web/dist/assets/{useApiQuery-tbd4JJaZ.js → useApiQuery-4gJC8RZB.js} +1 -1
- package/src/web/dist/assets/{useAppMutation-SONU2xFC.js → useAppMutation-CYWYOsqL.js} +1 -1
- package/src/web/dist/assets/useModelManagementState-Vvv4fzeh.js +1 -0
- package/src/web/dist/assets/{vendor-z22RpOY0.js → vendor-DdPBfMMb.js} +67 -82
- package/src/web/dist/index.html +8 -8
- package/src/web/dist/landing.html +5 -5
- package/src/web/dist/assets/About-pcECYYVj.js +0 -1
- package/src/web/dist/assets/ApiKeys-IDt4ZfLj.js +0 -1
- package/src/web/dist/assets/Dashboard-BiCTswfM.js +0 -1
- package/src/web/dist/assets/Events-CCYCOF1f.js +0 -1
- package/src/web/dist/assets/Help-BW1R1cf1.js +0 -5
- package/src/web/dist/assets/Logs-D2FFPpBP.js +0 -1
- package/src/web/dist/assets/ModelManagement-BHSUJ4Dg.js +0 -1
- package/src/web/dist/assets/PageHeader-DCqHI67a.js +0 -1
- package/src/web/dist/assets/Profiler-CEpu2dMu.js +0 -1
- package/src/web/dist/assets/RoutingManagement-DahJxjA7.js +0 -1
- package/src/web/dist/assets/Settings-Vp7jGxIW.js +0 -1
- package/src/web/dist/assets/app-COiQeF3y.js +0 -61
- package/src/web/dist/assets/global-B_hBylxt.css +0 -1
- package/src/web/dist/assets/package-D5lk1iqk.js +0 -1
- package/src/web/dist/assets/useModelManagementState-DcQ0Ac-x.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as b,j as e,az as ue,aO as ne,W as le,aW as xe,aX as pe,O as fe,aE as he,a0 as be,al as ge}from"./vendor-z22RpOY0.js";import{u as je,a as K,b as I}from"./query-BbGWgOFk.js";import{L as ye}from"./router-CL3rf_uf.js";import{P as Ne}from"./PageHeader-DCqHI67a.js";import{P as oe,a as C}from"./PageState-B03H5AV0.js";import{B,q as j}from"./queryKeys-ucXCzh0P.js";import{g as P,b as L,r as z,B as T}from"./app-COiQeF3y.js";import{c as x}from"./global-B-NXh5qD.js";import{f as ve}from"./utils-DSaa7c6v.js";import{u as _}from"./i18n-Bl2BcCDG.js";import"./radix-mHySgtou.js";const v={getStatus:()=>z({url:"/api/profiler/status",method:"GET"}),start:()=>P(L.post("/api/profiler/start")),stop:()=>P(L.post("/api/profiler/stop")),listSessions:t=>z({url:"/api/profiler/sessions",method:"GET",params:t}),getSession:t=>z({url:`/api/profiler/sessions/${t}`,method:"GET"}),deleteSession:t=>P(L.delete(`/api/profiler/sessions/${t}`)),clearAll:()=>P(L.post("/api/profiler/sessions/clear"))};function y(t){return t==null?"-":t>=1e3?`${(t/1e3).toFixed(2)}s`:`${Math.round(t)}ms`}function D(t){return t==null?"-":t>=1e3?`${(t/1e3).toFixed(1)}s`:`${Math.round(t)}ms`}function S(t){return t==null?"-":t.toLocaleString()}function V(t){return t==null?"-":t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}K`:t.toLocaleString()}function R(t){return t.endedAt==null||t.turnCount===0?t.totalLatencyMs??0:t.endedAt-t.startedAt}function we(t){const s=t.sessionId;return s.length>18?`${s.slice(0,8)}…${s.slice(-6)}`:s}function ke(t){switch(t){case"claude-code":return"Claude Code";case"codex":return"Codex";case"opencode":return"OpenCode";case"anthropic-compatible":return"Anthropic Compatible";case"openai-compatible":return"OpenAI Compatible";default:return t||null}}function Te(t,s){const n=Math.max(0,Date.now()-t),r=Math.floor(n/6e4);if(r<1)return s("profiler.relativeTime.justNow");if(r<60)return s("profiler.relativeTime.minutesAgo",{count:r});const l=Math.floor(r/60);if(l<24)return s("profiler.relativeTime.hoursAgo",{count:l});const a=Math.floor(l/24);return s("profiler.relativeTime.daysAgo",{count:a})}function Me(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}function G(t,s){if(Array.isArray(t)){for(const n of t)G(n,s);return}if(t&&typeof t=="object"){const n=t,r=n.type;(r==="tool_use"||r==="tool_call"||r==="function_call"||r==="computer_call"||r==="web_search_call"||r==="file_search_call"||r==="mcp_call"||r==="custom_tool_call")&&s.push(n);const l=n.tool_calls;Array.isArray(l)&&s.push(...l);const a=n.content;if(Array.isArray(a)){for(const i of a)if(i&&typeof i=="object"){const o=i;o.type==="tool_use"&&s.push(o)}}for(const i of Object.values(n))G(i,s)}}function O(t){const s=[];return G(Me(t.clientResponse),s),s}function de(t,s){const n=t.timestamp-s,r=n+(t.latencyMs??0);return`${(n/1e3).toFixed(3)}s → ${(r/1e3).toFixed(3)}s`}function W(t,s){return ve(t??null,s)}function Ce(t,s){const n=new Blob([JSON.stringify(s,null,2)],{type:"application/json"}),r=URL.createObjectURL(n),l=document.createElement("a");l.href=r,l.download=t,l.click(),URL.revokeObjectURL(r)}function J({tone:t="default",children:s}){return e.jsx("span",{className:x("inline-flex items-center rounded-full px-2.5 py-1 text-[11px] font-medium",t==="accent"?"bg-primary/10 text-primary":"bg-secondary text-muted-foreground"),children:s})}function Se({session:t,selected:s,index:n,onClick:r}){const{t:l}=_(),a=["bg-indigo-500","bg-emerald-500","bg-amber-500"],i=s?"bg-indigo-500":a[n%a.length],o=(t.totalInputTokens??0)+(t.totalOutputTokens??0);return e.jsxs("button",{type:"button",onClick:r,className:x("w-full border-b border-border/45 px-4 py-3 text-left transition-colors",s?"bg-secondary":"hover:bg-secondary/50"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("span",{className:x("h-2 w-2 flex-shrink-0 rounded-full",i)}),e.jsx("span",{className:x("truncate text-sm font-semibold",s?"text-primary":"text-foreground"),children:we(t)})]}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:Te(t.startedAt,l)})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 pl-4",children:[e.jsx(J,{tone:s?"accent":"default",children:l("profiler.metricTurns",{count:t.turnCount})}),e.jsx(J,{children:D(R(t))}),e.jsx(J,{children:l("profiler.metricTokens",{value:V(o)})})]})]})}function ae({active:t,icon:s,label:n,onClick:r}){return e.jsxs("button",{type:"button",onClick:r,className:x("inline-flex h-8 items-center gap-1.5 rounded-full border px-3 text-xs font-medium transition-all",t?"border-primary/20 bg-primary/10 text-primary":"border-transparent bg-secondary text-muted-foreground hover:bg-secondary/80 hover:text-foreground"),children:[e.jsx(s,{className:"h-3.5 w-3.5"}),n]})}function U({active:t,label:s,count:n,onClick:r}){return e.jsxs("button",{type:"button",onClick:r,className:x("inline-flex h-7 items-center gap-1.5 rounded-full border px-3 text-[11px] font-medium transition-all",t?"border-primary/20 bg-primary/10 text-primary":"border-transparent bg-transparent text-muted-foreground hover:bg-secondary hover:text-foreground"),children:[e.jsx("span",{children:s}),typeof n=="number"&&e.jsx("span",{className:"rounded-full bg-amber-100 px-1.5 py-0.5 text-[11px] font-semibold text-amber-700",children:n})]})}function _e({detail:t,selectedTurn:s,onSelectTurn:n}){const{t:r}=_(),l=t.records;if(l.length===0)return e.jsx(C,{compact:!0,className:"min-h-[220px]",title:r("profiler.empty.noTurnsTitle"),description:r("profiler.empty.noTurnsDescription")});const a=R(t),i=Math.max(1,...l.map(o=>Math.max(o.latencyMs??0,o.ttftMs??0,1)));return Math.max(1,...l.map(o=>O(o).length)),e.jsxs("div",{className:"rounded-xl bg-card shadow-[var(--surface-shadow)]",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 border-b border-border/45 px-5 py-3.5",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:r("profiler.timeline.summary")}),e.jsxs("div",{className:"flex items-center gap-2 text-[11px]",children:[e.jsx("span",{className:"text-muted-foreground",children:r("profiler.timeline.mode")}),e.jsx("span",{className:"rounded-full border border-border bg-secondary/70 px-2.5 py-1 font-medium text-foreground",children:r("profiler.timeline.compressed")}),e.jsx("span",{className:"rounded-full border border-border bg-card px-2.5 py-1 font-medium text-foreground",children:r("profiler.timeline.sessionDuration",{duration:D(a)})})]})]}),e.jsxs("div",{className:"px-5 pb-4",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between text-[11px] text-muted-foreground/70",children:[e.jsx("span",{children:r("profiler.timeline.start")}),e.jsxs("span",{children:[(a/1e3).toFixed(1),"s"]})]}),e.jsx("div",{className:"grid gap-x-2 gap-y-5",style:{gridTemplateColumns:"repeat(10, minmax(0, 1fr))"},children:l.map((o,p)=>{const f=p===s,w=Math.max(o.latencyMs??0,1),d=`${Math.max(28,Math.min(100,w/i*100))}%`,u=o.ttftMs!=null?`${Math.max(0,Math.min(100,Math.min(o.ttftMs,i)/i*100))}%`:null,F=Math.max(0,o.timestamp-t.startedAt),k=O(o);return e.jsxs("button",{type:"button",onClick:()=>n(p),className:x("rounded-xl border border-transparent bg-card px-2 py-2 text-left shadow-sm transition-all",f?"border-primary/20 bg-primary/5":"hover:bg-secondary/50"),title:r("profiler.turn.title",{index:o.turnIndex+1}),children:[e.jsx("div",{className:"flex min-w-0 items-center gap-2",children:e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("span",{className:x("inline-flex h-5 min-w-5 items-center justify-center rounded-full border px-1.5 text-[11px] font-semibold",f?"border-primary/30 bg-primary/10 text-primary":"border-border bg-card text-foreground"),children:o.turnIndex+1}),e.jsx("span",{className:"truncate text-[15px] font-semibold text-foreground",children:D(o.latencyMs)})]})}),e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground",children:r("profiler.timeline.startAt",{time:(F/1e3).toFixed(1)})}),e.jsxs("div",{className:"mt-2",children:[e.jsx("div",{className:"flex items-center justify-between text-[11px] text-muted-foreground",children:e.jsxs("span",{children:[y(o.ttftMs)," TTFT"]})}),e.jsxs("div",{className:"relative mt-1 h-4 rounded-sm bg-secondary",children:[e.jsx("div",{className:"h-4 rounded-sm bg-primary/20",style:{width:d}}),u!=null&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"absolute top-[-3px] h-5 w-[3px] -translate-x-1/2 rounded-full bg-violet-500 ring-1 ring-white",style:{left:u}}),e.jsx("span",{className:"absolute top-[-6px] h-2.5 w-2.5 -translate-x-1/2 rounded-full border border-white bg-violet-500",style:{left:u}})]})]})]}),e.jsxs("div",{className:"mt-2",children:[e.jsxs("div",{className:"mb-1 flex items-center justify-between text-[11px] text-muted-foreground",children:[e.jsx("span",{children:r("profiler.timeline.tools")}),e.jsx("span",{children:k.length})]}),e.jsx("div",{className:"flex h-5 items-center gap-1",children:e.jsx("span",{className:x("inline-flex h-5 min-w-5 items-center justify-center rounded-md border text-[11px] font-semibold",k.length>0?"border-amber-400 bg-amber-200 text-amber-900":"border-border bg-card text-muted-foreground"),children:k.length})})]})]},o.id)})}),e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-4 text-[11px] text-muted-foreground",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm bg-blue-200"}),r("profiler.timeline.legend.totalLatency")]}),e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"relative inline-block h-2.5 w-2.5 rounded-full border border-white bg-violet-500 ring-1 ring-violet-500/35"}),r("profiler.timeline.legend.firstToken")]}),e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-amber-400 bg-amber-200"}),r("profiler.timeline.legend.toolExecuting")]}),e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-rose-300 bg-rose-50"}),r("profiler.timeline.legend.selectedTurn")]})]})]})]})}function Fe({detail:t,selectedTurn:s,detailTab:n,onDetailTabChange:r,onSelectTurn:l}){const{t:a}=_(),i=t.records[s];if(!i)return null;const o=O(i),p=(i.inputTokens??0)+(i.outputTokens??0),f=n==="request"?W(i.clientRequest,a("profiler.payload.emptyRequest")):n==="response"?W(i.clientResponse,a("profiler.payload.emptyResponse")):o.length>0?JSON.stringify(o,null,2):a("profiler.payload.noToolCalls");return e.jsxs("div",{"data-testid":"profiler-turn-detail",className:"mt-3 shrink-0 rounded-xl bg-card shadow-[var(--surface-shadow)]",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 border-b border-border px-5 py-3",children:[e.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-2 text-xs",children:[e.jsx("span",{className:"rounded-full bg-primary px-2 py-1 font-semibold text-primary-foreground",children:a("profiler.turn.title",{index:i.turnIndex+1})}),e.jsx("span",{className:"text-muted-foreground",children:de(i,t.startedAt)}),e.jsxs("span",{className:"rounded-full bg-violet-50 border border-violet-200 px-2 py-1 font-semibold text-violet-700 dark:bg-violet-500/16 dark:border-violet-400/20 dark:text-violet-200",children:["TTFT ",y(i.ttftMs)]}),e.jsxs("span",{className:"rounded-full bg-sky-50 border border-sky-200 px-2 py-1 font-semibold text-sky-700 dark:bg-sky-500/16 dark:border-sky-400/20 dark:text-sky-200",children:[V(p)," tokens"]})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("button",{type:"button",onClick:()=>l(Math.max(0,s-1)),disabled:s===0,className:"rounded-full p-1.5 transition-colors hover:bg-secondary disabled:cursor-not-allowed disabled:opacity-40","aria-label":a("profiler.turn.previous"),children:e.jsx(he,{className:"h-4 w-4"})}),e.jsxs("span",{className:"min-w-10 text-center font-medium text-muted-foreground",children:[s+1," / ",t.records.length]}),e.jsx("button",{type:"button",onClick:()=>l(Math.min(t.records.length-1,s+1)),disabled:s===t.records.length-1,className:"rounded-full p-1.5 transition-colors hover:bg-secondary disabled:cursor-not-allowed disabled:opacity-40","aria-label":a("profiler.turn.next"),children:e.jsx(be,{className:"h-4 w-4"})})]})]}),e.jsx("div",{className:"border-b border-border bg-secondary/30 px-5 py-2",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(U,{active:n==="request",label:a("profiler.payload.request"),onClick:()=>r("request")}),e.jsx(U,{active:n==="response",label:a("profiler.payload.response"),onClick:()=>r("response")}),e.jsx(U,{active:n==="tools",label:a("profiler.payload.toolCalls"),count:o.length,onClick:()=>r("tools")})]})}),e.jsxs("div",{className:"bg-secondary/30 p-5",children:[e.jsx("pre",{className:"max-h-[420px] overflow-auto rounded-xl bg-[#1E1E2E] p-4 text-xs leading-5 text-slate-200",children:f}),i.error&&e.jsx("p",{className:"mt-3 rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700",children:i.error})]})]})}function qe({detail:t,selectedTurn:s,detailTab:n,onSelectTurn:r,onDetailTabChange:l}){return e.jsxs("div",{className:"flex min-h-full flex-col",children:[e.jsx(_e,{detail:t,selectedTurn:s,onSelectTurn:r}),e.jsx(Fe,{detail:t,selectedTurn:s,detailTab:n,onDetailTabChange:l,onSelectTurn:r})]})}function ie({title:t,payload:s,accentClass:n,emptyLabel:r}){return e.jsxs("div",{className:"rounded-xl border border-white/45 bg-white/88 p-3 shadow-[0_12px_28px_rgba(15,23,42,0.06)] dark:border-white/10 dark:bg-slate-950/[0.58] dark:shadow-[0_12px_28px_rgba(0,0,0,0.28)]",children:[e.jsx("p",{className:x("mb-2 text-[11px] font-semibold uppercase tracking-wider",n),children:t}),e.jsx("pre",{className:"max-h-64 overflow-auto rounded-lg bg-slate-950/95 p-3 text-xs leading-5 text-slate-200",children:W(s,r)})]})}function M({label:t,value:s,sub:n,accentClass:r}){return e.jsxs("div",{className:"rounded-xl bg-card p-4 shadow-sm",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:t}),e.jsx("p",{className:x("metric-number mt-2 text-2xl font-semibold text-foreground",r),children:s}),n&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:n})]})}function Ae({record:t,sessionStart:s,expanded:n,onToggle:r}){const{t:l}=_(),a=O(t);return e.jsxs("div",{className:"overflow-hidden rounded-xl bg-card shadow-sm",children:[e.jsxs("button",{type:"button",onClick:r,className:"flex w-full items-center gap-4 px-4 py-3 text-left transition-colors hover:bg-secondary/50",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsxs("span",{className:"rounded-full bg-primary px-2 py-0.5 text-[11px] font-semibold text-primary-foreground",children:["T",t.turnIndex+1]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:de(t,s)}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsx("span",{children:l("profiler.breakdown.total",{value:y(t.latencyMs)})}),e.jsxs("span",{children:["TTFT ",y(t.ttftMs)]}),e.jsxs("span",{children:["TPOT ",t.tpotMs!=null?`${t.tpotMs.toFixed(1)} ms/tok`:"-"]}),e.jsxs("span",{children:["↑ ",S(t.inputTokens)]}),e.jsxs("span",{children:["↓ ",S(t.outputTokens)]}),e.jsx("span",{children:l("profiler.breakdown.toolCallsCount",{count:a.length})}),t.error&&e.jsx("span",{className:"rounded-full bg-red-50 px-2 py-0.5 font-medium text-red-600 dark:bg-red-500/14 dark:text-red-300",children:l("profiler.breakdown.error")})]})]})]}),e.jsx(ge,{className:x("h-4 w-4 flex-shrink-0 text-muted-foreground/70 transition-transform",n&&"rotate-180")})]}),n&&e.jsxs("div",{className:"border-t border-border bg-secondary/30 p-4",children:[e.jsxs("div",{className:"grid gap-3 xl:grid-cols-2",children:[e.jsx(ie,{title:l("profiler.payload.request"),payload:t.clientRequest,accentClass:"text-blue-600",emptyLabel:l("profiler.payload.empty")}),e.jsx(ie,{title:l("profiler.payload.response"),payload:t.clientResponse,accentClass:"text-violet-600",emptyLabel:l("profiler.payload.empty")})]}),e.jsxs("div",{className:"mt-3 grid gap-3 xl:grid-cols-[minmax(0,1fr)_280px]",children:[e.jsxs("div",{className:"rounded-xl bg-card p-3 shadow-sm",children:[e.jsx("p",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-amber-600",children:l("profiler.payload.toolCalls")}),e.jsx("pre",{className:"max-h-64 overflow-auto rounded-lg bg-slate-950/95 p-3 text-xs leading-5 text-slate-200",children:a.length>0?JSON.stringify(a,null,2):l("profiler.payload.noToolCalls")})]}),e.jsxs("div",{className:"rounded-xl bg-card p-3 shadow-sm",children:[e.jsx("p",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:l("profiler.breakdown.turnMetrics")}),e.jsxs("dl",{className:"grid grid-cols-2 gap-x-3 gap-y-2 text-xs",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:l("profiler.breakdown.duration")}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:y(t.latencyMs)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:"TTFT"}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:y(t.ttftMs)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:"TPOT"}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:t.tpotMs!=null?`${t.tpotMs.toFixed(1)} ms/tok`:"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:l("profiler.breakdown.status")}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:t.statusCode??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:l("profiler.breakdown.input")}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:S(t.inputTokens)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-muted-foreground",children:l("profiler.breakdown.output")}),e.jsx("dd",{className:"mt-0.5 font-medium text-foreground",children:S(t.outputTokens)})]})]}),t.error&&e.jsx("p",{className:"mt-3 rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700",children:t.error})]})]})]})]})}function Ie({detail:t,expandedTurn:s,onToggleTurn:n}){const{t:r}=_();if(t.records.length===0)return e.jsx(C,{compact:!0,className:"min-h-[220px]",title:r("profiler.empty.noTurnsTitle"),description:r("profiler.empty.noTurnsDescription")});const l=R(t),a=t.records.reduce((d,u)=>{const F=u.latencyMs??0,k=u.ttftMs??0;return d+Math.max(F-k,0)},0),i=l>0?(a/l*100).toFixed(1):"-",o=t.records.map(d=>d.ttftMs).filter(d=>d!=null),p=t.records.map(d=>d.tpotMs).filter(d=>d!=null),f=o.length>0?o.reduce((d,u)=>d+u,0)/o.length:null,w=p.length>0?p.reduce((d,u)=>d+u,0)/p.length:null;return e.jsxs("div",{className:"space-y-5 p-5",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-6",children:[e.jsx(M,{label:r("profiler.breakdown.totalDuration"),value:y(l),sub:r("profiler.breakdown.turnsSub",{count:t.records.length})}),e.jsx(M,{label:r("profiler.breakdown.llmTime"),value:y(a),sub:r("profiler.breakdown.sessionShare",{value:i}),accentClass:"text-violet-700"}),e.jsx(M,{label:r("profiler.breakdown.avgTtft"),value:y(f)}),e.jsx(M,{label:r("profiler.breakdown.avgTpot"),value:w!=null?`${w.toFixed(1)} ms/tok`:"-"}),e.jsx(M,{label:r("profiler.breakdown.inputTokens"),value:S(t.totalInputTokens)}),e.jsx(M,{label:r("profiler.breakdown.outputTokens"),value:S(t.totalOutputTokens)})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:r("profiler.breakdown.perTurnTitle")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:r("profiler.breakdown.perTurnDescription")})]})}),t.records.map(d=>e.jsx(Ae,{record:d,sessionStart:t.startedAt,expanded:s===d.turnIndex,onToggle:()=>n(d.turnIndex)},d.id))]})]})}function Je(){var te,re,se;const{t}=_(),s=je(),[n,r]=b.useState(null),[l,a]=b.useState("timeline"),[i,o]=b.useState("request"),[p,f]=b.useState(0),[w,d]=b.useState(0),[u,F]=b.useState(""),h=((te=K({queryKey:j.profiler.status(),queryFn:()=>v.getStatus(),refetchInterval:3e3}).data)==null?void 0:te.active)??!1,H=K({queryKey:j.profiler.sessions({}),queryFn:()=>v.listSessions({limit:100}),refetchInterval:h?2e3:!1}),g=((re=H.data)==null?void 0:re.items)??[],$=K({queryKey:j.profiler.session(n),queryFn:()=>v.getSession(n),enabled:n!=null,refetchInterval:h&&n!=null?2e3:!1}),A=I({mutationFn:()=>v.start(),onSuccess:()=>{s.invalidateQueries({queryKey:j.profiler.status()}),s.invalidateQueries({queryKey:j.profiler.sessions({})})}}),X=I({mutationFn:()=>v.stop(),onSuccess:()=>{s.invalidateQueries({queryKey:j.profiler.status()}),s.invalidateQueries({queryKey:j.profiler.sessions({})})}}),Y=I({mutationFn:m=>v.deleteSession(m),onSuccess:(m,N)=>{n===N&&r(null),s.invalidateQueries({queryKey:j.profiler.sessions({})})}}),ce=I({mutationFn:()=>v.clearAll(),onSuccess:()=>{r(null),s.invalidateQueries({queryKey:j.profiler.sessions({})})}}),q=b.useMemo(()=>{const m=u.trim().toLowerCase();return m?g.filter(N=>N.sessionId.toLowerCase().includes(m)):g},[u,g]),E=u.trim().length>0,c=$.data,Q=g.find(m=>m.id===n)??null,Z=(c==null?void 0:c.records[p])??null,ee=ke(((se=c==null?void 0:c.records[0])==null?void 0:se.clientKind)??null);b.useEffect(()=>{n&&!g.some(m=>m.id===n)&&r(null)},[n,g]),b.useEffect(()=>{!n&&q.length>0&&r(q[0].id)},[q,n]),b.useEffect(()=>{f(0),d(0),o("request")},[n]),b.useEffect(()=>{if(!c){f(0),d(0);return}f(m=>Math.min(m,Math.max(c.records.length-1,0))),d(m=>m==null?0:Math.min(m,Math.max(c.records.length-1,0)))},[c]);const me=()=>{c&&Ce(`profiler-${c.sessionId}.json`,c)};return e.jsxs("div",{className:"flex min-h-0 flex-col gap-3 lg:h-[calc(100vh-64px)]",children:[e.jsx(Ne,{className:"flex-none",icon:e.jsx(le,{className:"h-5 w-5","aria-hidden":"true"}),title:t("profiler.title"),description:t("profiler.description"),eyebrow:t("profiler.eyebrow"),breadcrumb:t("profiler.breadcrumb"),helper:n?t("profiler.empty.selectDescription"):void 0,badge:e.jsxs("span",{className:x("inline-flex items-center gap-1.5",h?"text-red-600 dark:text-red-300":"text-muted-foreground"),children:[e.jsx("span",{className:x("inline-block h-1.5 w-1.5 rounded-full",h?"bg-red-500":"bg-muted-foreground/70")}),t(h?"profiler.status.recording":"profiler.status.idle")]}),actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(B,{variant:"secondary",className:"rounded-full px-3 py-1 text-[11px]",children:t("profiler.sessionsCount",{count:g.length})}),e.jsx(T,{size:"sm",variant:h?"destructive":"default",onClick:()=>h?X.mutate():A.mutate(),disabled:A.isPending||X.isPending,children:t(h?"profiler.actions.stop":"profiler.actions.start")}),e.jsxs(T,{size:"sm",variant:"outline",onClick:me,disabled:!c,children:[e.jsx(ue,{className:"mr-1.5 h-3.5 w-3.5"}),t("profiler.actions.export")]}),e.jsxs(T,{size:"sm",variant:"outline",onClick:()=>ce.mutate(),disabled:g.length===0,className:"border-red-200 bg-red-50 text-red-700 hover:bg-red-100 hover:text-red-800 dark:border-red-400/20 dark:bg-red-500/14 dark:text-red-300 dark:hover:bg-red-500/20 dark:hover:text-red-200",children:[e.jsx(ne,{className:"mr-1.5 h-3.5 w-3.5"}),t("profiler.actions.clear")]})]})}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-3 bg-background lg:flex-row lg:gap-0 lg:overflow-hidden",children:[e.jsxs("div",{className:"flex w-full flex-shrink-0 flex-col overflow-hidden rounded-[1.2rem] border border-white/70 bg-card/96 shadow-[0_20px_48px_-42px_rgba(15,23,42,0.26)] lg:w-[300px]",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/45 px-4 py-3",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:t("profiler.sessionsTitle")}),e.jsx(B,{variant:"secondary",className:"rounded-full px-2 py-0.5",children:g.length})]}),e.jsxs("div",{className:"flex items-center gap-2 border-b border-border bg-secondary/50 px-3 py-2.5",children:[e.jsx(xe,{className:"h-3.5 w-3.5 text-muted-foreground/70"}),e.jsx("input",{className:"w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground/70",placeholder:t("profiler.searchPlaceholder"),value:u,onChange:m=>F(m.target.value)})]}),e.jsx("div",{className:"max-h-[240px] overflow-y-auto lg:min-h-0 lg:max-h-none lg:flex-1",children:H.isPending?e.jsx(oe,{compact:!0,className:"min-h-[160px]",label:t("common.loading")}):q.length===0?e.jsx(C,{compact:!0,className:"m-4 min-h-[160px]",title:t(E?"profiler.empty.searchTitle":h?"profiler.empty.waitingTitle":"profiler.empty.idleTitle"),description:t(E?"profiler.empty.searchDescription":h?"profiler.empty.waitingDescription":"profiler.empty.idleDescription"),action:E?void 0:h?e.jsx(T,{asChild:!0,variant:"ghost",size:"sm",children:e.jsx(ye,{to:"/logs",children:t("profiler.empty.actions.logs")})}):e.jsx(T,{size:"sm",onClick:()=>A.mutate(),disabled:A.isPending,children:t("profiler.actions.start")})}):q.map((m,N)=>e.jsx(Se,{session:m,selected:n===m.id,index:N,onClick:()=>r(m.id)},m.id))})]}),e.jsx("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden rounded-[1.2rem] border border-white/70 bg-card/96 shadow-[0_20px_48px_-42px_rgba(15,23,42,0.26)] lg:ml-3",children:n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 border-b border-border bg-card px-5 py-3.5",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[e.jsx("span",{className:"h-2.5 w-2.5 flex-shrink-0 rounded-full bg-indigo-500"}),e.jsx("span",{className:"truncate text-sm font-semibold text-foreground",children:(c==null?void 0:c.sessionId)??(Q==null?void 0:Q.sessionId)??n}),ee&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-muted-foreground/70",children:"·"}),e.jsx(B,{variant:"secondary",className:"rounded-full px-2 py-0.5 text-[10px]",children:ee})]}),e.jsx("span",{className:"text-muted-foreground/70",children:"·"}),e.jsx("span",{className:"truncate text-sm text-muted-foreground",children:c?t("profiler.sessionSummary",{turns:c.turnCount,duration:D(R(c)),tokens:V((c.totalInputTokens??0)+(c.totalOutputTokens??0))}):t("profiler.loadingSession")})]}),e.jsx(T,{variant:"ghost",size:"sm",onClick:()=>n&&Y.mutate(n),disabled:!n||Y.isPending,className:"text-muted-foreground hover:text-red-700",children:e.jsx(ne,{className:"h-3.5 w-3.5"})})]}),e.jsx("div",{className:"border-b border-border bg-secondary/30 px-5 py-2.5",children:e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(ae,{active:l==="timeline",icon:pe,label:t("profiler.tabs.timeline"),onClick:()=>a("timeline")}),e.jsx(ae,{active:l==="breakdown",icon:fe,label:t("profiler.tabs.breakdown"),onClick:()=>a("breakdown")})]})}),e.jsx("div",{"data-testid":"profiler-session-content",className:"min-h-0 flex-1 overflow-auto bg-secondary/20",children:$.isPending?e.jsx(oe,{compact:!0,className:"min-h-[240px]",label:t("profiler.loadingSession")}):$.isError?e.jsx(C,{compact:!0,className:"m-5 min-h-[220px]",tone:"danger",title:t("profiler.errors.loadFailed")}):c?l==="timeline"?e.jsx(qe,{detail:c,selectedTurn:p,detailTab:i,onSelectTurn:f,onDetailTabChange:o}):e.jsx(Ie,{detail:c,expandedTurn:w,onToggleTurn:m=>d(N=>N===m?null:m)}):e.jsx(C,{compact:!0,className:"m-5 min-h-[220px]",title:t("profiler.errors.notFound")})}),Z&&e.jsxs("span",{className:"sr-only",children:["Selected turn ",Z.turnIndex+1]})]}):e.jsx("div",{className:"flex flex-1 items-center justify-center",children:e.jsx(C,{title:t("profiler.empty.selectTitle"),description:t("profiler.empty.selectDescription"),icon:e.jsx(le,{className:"h-5 w-5"})})})})]})]})}export{Je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as A,j as e,a7 as T,aH as je,aI as F,ac as D,al as be,a0 as ve,S as Ne,T as ye}from"./vendor-z22RpOY0.js";import{L as we}from"./router-CL3rf_uf.js";import{C as ke}from"./ConfirmDialog-oYHVEpGJ.js";import{P as Me}from"./PageHeader-DCqHI67a.js";import{B as v,c as X,T as Ce,d as Ee,e as Pe,f as De}from"./app-COiQeF3y.js";import{u as J}from"./useAppMutation-SONU2xFC.js";import{I as S}from"./input-DW7jGTgj.js";import{L as w}from"./label-Ci1io7XA.js";import{S as Z,a as ee,b as se,c as ae,d as R}from"./select-BchX45jJ.js";import{S as te}from"./switch-CT24uL_Q.js";import{q as Y,B as k}from"./queryKeys-ucXCzh0P.js";import{u as E}from"./i18n-Bl2BcCDG.js";import{C as ne,a as re}from"./card-ChFVaqLf.js";import{c as O}from"./global-B-NXh5qD.js";import{D as Ae,A as Se,a as Te,b as Oe,c as Re,d as _e,e as Le}from"./DialogShell-DcOGCV8m.js";import{P as $e,a as Ve,b as He}from"./popover-CQHCVE2z.js";import{i as Be,g as ze,a as Fe,C as Ie,O as qe,u as Ge}from"./useModelManagementState-DcQ0Ac-x.js";import"./query-BbGWgOFk.js";import"./radix-mHySgtou.js";import"./gateway-BU3dR2tm.js";import"./useApiQuery-tbd4JJaZ.js";const Ke=["anthropic","openai-auto","openai-chat","openai-responses"];function Ue({open:l,endpoint:s,onClose:h,onSuccess:r}){const{t:a}=E(),[p,m]=A.useState({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0});A.useEffect(()=>{if(s){const n=s.paths&&s.paths.length>0?s.paths:s.path&&s.protocol?[{path:s.path,protocol:s.protocol}]:[{path:"",protocol:"openai-auto"}];m({id:s.id,label:s.label,paths:n,enabled:s.enabled!==!1});return}m({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0})},[s,l]);const t=J({mutationFn:X.create,invalidateKeys:[Y.customEndpoints.all()],successToast:()=>({title:a("modelManagement.createEndpointSuccess")}),errorToast:n=>({title:a("modelManagement.createEndpointError",{error:n.message})}),onSuccess:async()=>{r(),h()}}),x=J({mutationFn:n=>X.update(n.id,n.updates),invalidateKeys:[Y.customEndpoints.all()],successToast:()=>({title:a("modelManagement.updateEndpointSuccess")}),errorToast:n=>({title:a("modelManagement.updateEndpointError",{error:n.message})}),onSuccess:async()=>{r(),h()}}),N=()=>{m(n=>({...n,paths:[...n.paths,{path:"",protocol:"anthropic"}]}))},d=n=>{p.paths.length!==1&&m(g=>({...g,paths:g.paths.filter((f,M)=>M!==n)}))},b=(n,g,f)=>{m(M=>{const C=[...M.paths];return C[n]={...C[n],[g]:f},{...M,paths:C}})},o=n=>{if(n==null||n.preventDefault(),!p.id.trim()||!p.label.trim())return;for(const f of p.paths)if(!f.path.trim())return;const g=p.paths.map(f=>({path:f.path.trim(),protocol:f.protocol}));if(s){x.mutate({id:s.id,updates:{label:p.label.trim(),paths:g,enabled:p.enabled}});return}t.mutate({id:p.id.trim(),label:p.label.trim(),paths:g,enabled:p.enabled})},c=t.isPending||x.isPending,i=p.paths.length===0?a("modelManagement.atLeastOnePath"):!p.id.trim()||!p.label.trim()?a("modelManagement.endpointValidationError"):p.paths.some(n=>!n.path.trim())?a("modelManagement.pathValidationError"):null;return l?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 z-40 bg-background/80 backdrop-blur-sm",onClick:h}),e.jsx("div",{className:"fixed inset-y-0 right-0 z-50 w-full max-w-md border-l border-border/45 bg-background/96 shadow-[var(--surface-shadow-lg)] backdrop-blur",children:e.jsxs("div",{className:"flex h-full flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/45 bg-secondary/45 p-6 backdrop-blur-sm",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h2",{className:"text-lg font-semibold tracking-[-0.02em]",children:a(s?"modelManagement.editEndpoint":"modelManagement.createEndpoint")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s?s.id:a("modelManagement.endpointRoutingHint")})]}),e.jsx(v,{variant:"ghost",size:"sm",onClick:h,className:"rounded-2xl bg-white/70",children:e.jsx(T,{className:"h-4 w-4"})})]}),e.jsxs("form",{onSubmit:o,className:"flex-1 space-y-6 overflow-y-auto p-6",children:[e.jsxs("div",{className:"grid gap-3 rounded-xl bg-secondary/50 p-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",children:a("modelManagement.endpointId")}),e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:(s==null?void 0:s.id)||"new-endpoint"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground",children:a("modelManagement.endpointEnabled")}),e.jsx("p",{className:"text-sm font-medium text-foreground",children:p.enabled?a("common.status.enabled"):a("common.status.disabled")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(w,{children:[a("modelManagement.endpointId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(S,{value:p.id,onChange:n=>m(g=>({...g,id:n.target.value})),placeholder:a("modelManagement.endpointIdPlaceholder"),disabled:!!s,required:!0}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("modelManagement.endpointIdHint")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(w,{children:[a("modelManagement.endpointLabel")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(S,{value:p.label,onChange:n=>m(g=>({...g,label:n.target.value})),placeholder:a("modelManagement.endpointLabelPlaceholder"),required:!0})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(w,{children:[a("modelManagement.endpointPaths")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsxs(v,{type:"button",variant:"ghost",size:"sm",onClick:N,children:[e.jsx(je,{className:"mr-1 h-3 w-3"}),a("modelManagement.addPath")]})]}),e.jsx("div",{className:"space-y-3",children:p.paths.map((n,g)=>e.jsxs("div",{className:"space-y-2 rounded-xl border border-transparent bg-card p-3 shadow-[var(--surface-shadow)]",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx(S,{value:n.path,onChange:f=>b(g,"path",f.target.value),placeholder:a("modelManagement.endpointPathPlaceholder"),required:!0}),e.jsxs(Z,{value:n.protocol,onValueChange:f=>b(g,"protocol",f),children:[e.jsx(ee,{children:e.jsx(se,{})}),e.jsx(ae,{children:Ke.map(f=>e.jsx(R,{value:f,children:a(f==="anthropic"?"modelManagement.protocolAnthropic":f==="openai-auto"?"modelManagement.protocolOpenAI":f==="openai-chat"?"modelManagement.protocolOpenAIChat":"modelManagement.protocolOpenAIResponses")},f))})]})]}),p.paths.length>1?e.jsx(v,{type:"button",variant:"ghost",size:"sm",onClick:()=>d(g),className:"text-destructive",children:e.jsx(T,{className:"h-4 w-4"})}):null]}),e.jsxs("div",{className:"space-y-1 text-xs text-muted-foreground",children:[g===0?e.jsx("p",{children:a("modelManagement.endpointPathHint")}):null,e.jsx("p",{children:a(`modelManagement.protocolHints.${n.protocol}`)})]})]},`${n.protocol}-${g}`))}),i?e.jsx("p",{className:"text-xs text-destructive",children:i}):null]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(te,{id:"enabled",checked:p.enabled,onCheckedChange:n=>m(g=>({...g,enabled:n}))}),e.jsx(w,{htmlFor:"enabled",children:a("modelManagement.endpointEnabled")})]}),s?null:e.jsx("div",{className:"rounded-xl bg-accent p-4",children:e.jsx("p",{className:"text-sm text-primary",children:a("modelManagement.endpointRoutingHint")})})]}),e.jsxs("div",{className:"flex gap-3 border-t border-border/45 bg-secondary/45 p-6 backdrop-blur-sm",children:[e.jsx(v,{variant:"outline",className:"flex-1",onClick:h,disabled:c,children:a("common.cancel")}),e.jsx(v,{className:"flex-1",onClick:()=>o(),disabled:c,children:a(c?"common.saving":s?"common.save":"common.create")})]})]})})]}):null}function _(l,s){return s(l==="anthropic"?"modelManagement.protocolAnthropic":l==="openai-chat"?"modelManagement.protocolOpenAIChat":l==="openai-responses"?"modelManagement.protocolOpenAIResponses":"modelManagement.protocolOpenAI")}function We({activeTab:l,customEndpoints:s,customTabs:h,isDirtyByEndpoint:r,onDeleteEndpoint:a,onEditEndpoint:p,onSelectTab:m,systemTabs:t}){const{t:x}=E(),N=[...t,...h].find(d=>d.key===l)??null;return e.jsx(ne,{className:"overflow-hidden rounded-[1.35rem] border border-white/70 bg-card/95 shadow-[0_22px_56px_-46px_rgba(15,23,42,0.22)]",children:e.jsxs(re,{className:"space-y-4 p-4 sm:p-5",children:[e.jsxs("div",{className:"grid gap-3 lg:grid-cols-[minmax(0,1fr)_minmax(280px,0.6fr)]",children:[e.jsxs("div",{className:"rounded-[1.1rem] bg-secondary/60 p-2.5",children:[e.jsx("div",{className:"mb-2 flex items-center justify-between px-1",children:e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/75",children:x("modelManagement.overview.providerAndSystem")})}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 xl:grid-cols-3",children:t.map(d=>{const b=l===d.key,o=d.key!=="providers"&&r[d.key];return e.jsxs("button",{type:"button",onClick:()=>m(d.key),"aria-pressed":b,className:O("group flex min-h-[76px] flex-col justify-between rounded-[0.95rem] px-3 py-3 text-left transition-all",b?"bg-card text-foreground shadow-[0_14px_34px_-28px_rgba(15,23,42,0.3)] ring-1 ring-primary/10":"bg-transparent text-muted-foreground hover:bg-card/58 hover:text-foreground"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-[15px] font-semibold text-foreground",children:d.label}),e.jsx("div",{className:"mt-0.5 text-[10px] uppercase tracking-[0.14em] text-muted-foreground/70",children:d.key==="providers"?x("modelManagement.overview.providerPoolTag"):x("modelManagement.overview.systemEndpointTag")})]}),o?e.jsx("span",{className:"mt-1 h-2.5 w-2.5 rounded-full bg-amber-500"}):null]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-3",children:[e.jsx("span",{className:"line-clamp-1 text-xs text-muted-foreground/70",children:d.description}),b?e.jsx("span",{className:"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary",children:e.jsx(F,{className:"h-3.5 w-3.5"})}):null]})]},d.key)})})]}),N?e.jsxs("div",{className:"flex min-h-[116px] flex-col justify-between rounded-[1.1rem] bg-[linear-gradient(135deg,hsl(var(--primary)/0.1),rgba(255,255,255,0.78))] p-4 ring-1 ring-primary/10 dark:bg-[linear-gradient(135deg,rgba(14,165,233,0.14),rgba(15,23,42,0.72))] dark:ring-white/10",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"inline-flex h-8 w-8 items-center justify-center rounded-xl bg-primary/10 text-primary",children:e.jsx(F,{className:"h-4 w-4"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-primary/75",children:"Active workspace"}),e.jsx("p",{className:"truncate text-sm font-semibold text-foreground",children:N.label})]})]}),e.jsx("p",{className:"mt-3 line-clamp-2 text-xs leading-5 text-muted-foreground",children:N.description})]}):null]}),h.length>0?e.jsxs("div",{className:"space-y-2.5",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-muted-foreground/75",children:x("modelManagement.overview.customEndpoints")}),e.jsx("div",{className:"grid gap-3 md:grid-cols-2 2xl:grid-cols-3",children:h.map(d=>{const b=l===d.key,o=r[d.key],c=s.find(i=>i.id===d.key);return e.jsxs("div",{className:O("group relative flex min-w-0 flex-col gap-2.5 overflow-hidden rounded-[1.05rem] border px-3 py-3 text-left transition-all sm:px-3.5",b?"border-primary/20 bg-secondary/80 text-foreground shadow-[0_14px_34px_-30px_rgba(59,130,246,0.32)]":"border-border/55 bg-background/42 hover:bg-secondary/50"),children:[e.jsxs("button",{type:"button",onClick:()=>m(d.key),"aria-pressed":b,className:"min-w-0 flex-1 text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"truncate text-sm font-semibold text-foreground sm:text-[15px]",title:d.label,children:d.label}),o?e.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500"}):null]}),e.jsxs("div",{className:"mt-1.5 flex items-end justify-between gap-3",children:[e.jsx("p",{className:"line-clamp-2 text-[11px] leading-4.5 text-muted-foreground/72 sm:line-clamp-1 sm:text-xs",children:d.description}),b?e.jsx("span",{className:"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary",children:e.jsx(F,{className:"h-3.5 w-3.5"})}):null]})]}),e.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-1.5",children:[e.jsx(k,{variant:(c==null?void 0:c.enabled)===!1?"secondary":"success",className:"rounded-full border-0 px-2 py-0.5 text-[10px]",children:(c==null?void 0:c.enabled)===!1?x("modelManagement.overview.endpointDisabled"):x("modelManagement.overview.endpointEnabled")}),(d.protocols??[]).slice(0,2).map(i=>e.jsx(k,{variant:"outline",className:"max-w-[130px] truncate rounded-full text-[10px]",title:_(i,x),children:_(i,x)},`${d.key}-${i}`))]}),e.jsxs("div",{className:"min-w-0 rounded-[0.8rem] bg-secondary/55 px-2.5 py-2",children:[e.jsx("p",{className:"mb-1 text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground/70",children:x("modelManagement.overview.endpointPaths")}),e.jsx("div",{className:"space-y-1",children:Qe(c,x).map(i=>e.jsx("p",{className:"truncate text-xs font-medium text-foreground",title:i,children:i},i))})]}),e.jsxs("div",{className:"grid grid-cols-[1fr_auto] gap-2",children:[e.jsx(v,{variant:"ghost",size:"sm",className:"h-7 justify-start rounded-full px-2 text-[11px]",disabled:!c,onClick:()=>{c&&p(c)},children:x("common.edit")}),d.canDelete?e.jsx("button",{type:"button",onClick:i=>{i.stopPropagation(),c&&a({kind:"endpoint",endpoint:c})},className:"flex h-7 w-full items-center justify-center rounded-md text-muted-foreground transition hover:bg-destructive/10 hover:text-destructive sm:w-7",title:x("common.delete"),children:e.jsx(T,{className:"h-3.5 w-3.5"})}):null]}),d.canDelete?null:e.jsx("div",{className:"text-[11px] text-muted-foreground/70",children:x("modelManagement.overview.endpointManagedExternally")})]},d.key)})})]}):null]})})}function Qe(l,s){var h;if(!l)return[s("common.noData")];if((h=l.paths)!=null&&h.length){const r=l.paths.slice(0,2).map(a=>`${a.path} · ${_(a.protocol,s)}`);return l.paths.length>2&&r.push(s("modelManagement.overview.endpointMorePaths",{count:l.paths.length-2})),r}return l.path?[`${l.path} · ${_(l.protocol??"anthropic",s)}`]:[s("common.noData")]}function Xe({dialog:l,currentRoutes:s,onConfirm:h,onClose:r}){const{t:a}=E();if(!l)return null;const{endpoint:p,preset:m}=l,t=m.modelRoutes??{},x={};for(const i of s){const n=i.source.trim(),g=i.target.trim();n&&g&&(x[n]=g)}const N=new Set([...Object.keys(x),...Object.keys(t)]),d=[],b=[],o=[];for(const i of N){const n=i in x,g=i in t;g&&!n?d.push([i,t[i]]):n&&!g?b.push([i,x[i]]):n&&g&&x[i]!==t[i]&&o.push([i,x[i],t[i]])}const c=d.length>0||b.length>0||o.length>0;return e.jsx(Ae,{open:!0,onOpenChange:i=>!i&&r(),children:e.jsxs(Se,{className:"max-w-2xl",children:[e.jsxs(Te,{children:[e.jsx(Oe,{children:a("modelManagement.presets.diffTitle")}),e.jsx(Re,{children:a("modelManagement.presets.diffDescription",{name:m.name})})]}),e.jsx(_e,{children:c?e.jsxs("div",{className:"max-h-80 space-y-2 rounded-xl bg-secondary/50 p-3 text-sm",children:[d.map(([i,n])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-emerald-50 px-2 py-1.5 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200",children:[e.jsx(k,{variant:"outline",className:"border-emerald-300 text-xs dark:border-emerald-700",children:a("modelManagement.presets.diffAdded")}),e.jsx("span",{className:"truncate",children:i}),e.jsx(D,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:n})]},`add-${i}`)),b.map(([i,n])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-red-50 px-2 py-1.5 text-red-800 dark:bg-red-950 dark:text-red-200",children:[e.jsx(k,{variant:"outline",className:"border-red-300 text-xs dark:border-red-700",children:a("modelManagement.presets.diffRemoved")}),e.jsx("span",{className:"truncate",children:i}),e.jsx(D,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:n})]},`rm-${i}`)),o.map(([i,n,g])=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl bg-amber-50 px-2 py-1.5 text-amber-800 dark:bg-amber-950 dark:text-amber-200",children:[e.jsx(k,{variant:"outline",className:"border-amber-300 text-xs dark:border-amber-700",children:a("modelManagement.presets.diffChanged")}),e.jsx("span",{className:"truncate",children:i}),e.jsx(D,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate line-through opacity-60",children:n}),e.jsx(D,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:g})]},`chg-${i}`))]}):e.jsx("p",{className:"rounded-xl bg-secondary/50 py-8 text-center text-sm text-muted-foreground",children:a("modelManagement.presets.diffEmpty")})}),e.jsxs(Le,{children:[e.jsx(v,{variant:"outline",onClick:r,children:a("common.cancel")}),e.jsx(v,{onClick:()=>h(p,m),disabled:!c,children:a("modelManagement.presets.diffConfirm")})]})]})})}function Je({value:l,onChange:s,options:h,disabled:r,placeholder:a}){const{t:p}=E(),[m,t]=A.useState(!1),[x,N]=A.useState(""),d=A.useMemo(()=>{if(!x.trim())return h;const o=x.toLowerCase();return h.filter(c=>c.label.toLowerCase().includes(o)||c.value.toLowerCase().includes(o))},[h,x]),b=o=>{s(o),N(""),t(!1)};return e.jsxs($e,{open:m,onOpenChange:o=>{t(o),o&&N("")},children:[e.jsx(Ve,{asChild:!0,children:e.jsx(S,{value:l,onChange:o=>{s(o.target.value),N(o.target.value),m||t(!0)},onFocus:()=>{N(""),t(!0)},onClick:()=>{m||t(!0)},placeholder:a,disabled:r,autoComplete:"off"})}),e.jsx(He,{className:"max-h-60 w-[var(--radix-popover-trigger-width)] overflow-y-auto rounded-xl border border-[color:var(--surface-border)] bg-popover/96 p-1.5 shadow-[var(--surface-shadow-lg)] backdrop-blur",align:"start",onOpenAutoFocus:o=>o.preventDefault(),children:d.length===0?e.jsx("div",{className:"px-2 py-3 text-center text-xs text-muted-foreground",children:p("common.noMatches")}):d.map(o=>e.jsx("button",{type:"button",className:O("flex w-full items-center rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",o.value===l.trim()&&"bg-accent/90 text-accent-foreground"),onMouseDown:c=>{c.preventDefault(),b(o.value)},children:e.jsx("span",{className:"truncate",children:o.label})},o.value))})]})}function Ye({endpoint:l,tabs:s,customEndpoints:h,config:r,routes:a,routeError:p,savingRoute:m,isDirty:t,presets:x,presetName:N,presetError:d,savingPreset:b,applyingPreset:o,deletingPreset:c,presetsExpanded:i,savingClaudeValidation:n,savingCompatibilityPolicy:g,providerModelOptions:f,onTogglePresetsExpanded:M,onPresetNameChange:C,onSavePreset:le,onRequestPresetDiff:ie,onRequestDeletePreset:oe,onValidationModeChange:de,onCompatibilityEnabledChange:ce,onRouteChange:I,onRemoveRoute:q,onAddSuggestion:me,onAddRoute:xe,onResetRoutes:pe,onSaveRoutes:ue}){var W,Q;const{t:u}=E(),y=s.find(j=>j.key===l),L=((W=y==null?void 0:y.protocols)==null?void 0:W.includes("anthropic"))??l==="anthropic"?Ie:qe,ge=(y==null?void 0:y.label)??l;(y==null?void 0:y.isSystem)===!1?y.description:u(`settings.routing.descriptionByEndpoint.${l}`);const $=`route-source-${l}`,G=Be(l,h),K=((Q=y==null?void 0:y.protocols)==null?void 0:Q.some(j=>j.startsWith("openai")))??l==="openai",V=ze(l,r,h),H=Fe(l,r,h),B=G?(V==null?void 0:V.mode)??"off":"off",U=K?(H==null?void 0:H.enabled)??!1:!1,he=new Set(a.map(j=>j.source.trim()).filter(Boolean)),fe=`modelManagement.claudeValidation.options.${B}.description`;return e.jsx(ne,{children:e.jsxs(re,{className:"space-y-6 pt-6",children:[e.jsx("div",{className:"rounded-full bg-secondary px-4 py-3 text-xs text-muted-foreground",children:u("settings.routing.wildcardHint")}),G?e.jsx("div",{className:"rounded-xl border border-primary/12 bg-[linear-gradient(135deg,hsl(var(--primary)/0.08),hsl(var(--accent)/0.72))] p-4 shadow-[var(--surface-shadow)] dark:border-sky-300/12 dark:bg-[linear-gradient(135deg,rgba(14,165,233,0.12),rgba(15,23,42,0.72))]",children:e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-primary dark:text-sky-100",children:u("modelManagement.claudeValidation.title")}),e.jsx("p",{className:"max-w-2xl text-xs leading-5 text-muted-foreground dark:text-slate-300",children:u("modelManagement.claudeValidation.description")})]}),e.jsxs("div",{className:"flex w-full max-w-xs flex-col gap-2 self-start sm:self-auto",children:[e.jsx(w,{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-primary/70 dark:text-sky-200/75",children:u("modelManagement.claudeValidation.modeLabel")}),e.jsxs(Z,{value:B,onValueChange:j=>de(j),disabled:n,children:[e.jsx(ee,{className:"border-primary/15 bg-card/90 dark:border-white/10 dark:bg-slate-950/50",children:e.jsx(se,{})}),e.jsxs(ae,{children:[e.jsx(R,{value:"off",children:u("modelManagement.claudeValidation.options.off.label")}),e.jsx(R,{value:"anthropic-strict",children:u("modelManagement.claudeValidation.options.anthropic-strict.label")}),e.jsx(R,{value:"claude-code",children:u("modelManagement.claudeValidation.options.claude-code.label")})]})]}),e.jsx("span",{className:O("text-xs",B==="off"?"text-muted-foreground dark:text-slate-400":"text-primary/80 dark:text-sky-200/80"),children:u(fe)})]})]})}):null,K?e.jsx("div",{className:"rounded-xl border border-primary/12 bg-[linear-gradient(135deg,hsl(var(--primary)/0.08),hsl(var(--accent)/0.72))] p-4 shadow-[var(--surface-shadow)] dark:border-sky-300/12 dark:bg-[linear-gradient(135deg,rgba(14,165,233,0.12),rgba(15,23,42,0.72))]",children:e.jsxs("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium text-primary dark:text-sky-100",children:u("modelManagement.openaiCompatibility.title")}),e.jsx("p",{className:"max-w-2xl text-xs leading-5 text-muted-foreground dark:text-slate-300",children:u("modelManagement.openaiCompatibility.description")})]}),e.jsx("div",{className:"flex w-full max-w-xs flex-col gap-2 self-start sm:self-auto",children:e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-primary/12 bg-card/85 px-3 py-2 dark:border-white/10 dark:bg-slate-950/50",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(w,{className:"text-[11px] font-semibold uppercase tracking-[0.16em] text-primary/70 dark:text-sky-200/75",children:u("modelManagement.openaiCompatibility.toggleLabel")}),e.jsx("p",{className:"text-xs text-muted-foreground dark:text-slate-300",children:u(U?"modelManagement.openaiCompatibility.enabledHint":"modelManagement.openaiCompatibility.disabledHint")})]}),e.jsx(te,{checked:U,onCheckedChange:ce,disabled:g,"aria-label":u("modelManagement.openaiCompatibility.toggleLabel")})]})})]})}):null,p?e.jsx("p",{className:"text-sm text-destructive",children:p}):null,e.jsx(Ze,{presets:x,presetName:N,presetError:d,savingPreset:b,applyingPreset:o,deletingPreset:c,expanded:i,onToggleExpanded:M,onPresetNameChange:C,onSavePreset:le,onRequestPresetDiff:ie,onRequestDeletePreset:oe}),e.jsxs("div",{className:"space-y-3 rounded-xl bg-secondary/50 p-4",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(w,{className:"text-sm font-semibold text-foreground",children:u("modelManagement.routesEditorTitle")}),e.jsxs(k,{variant:"outline",children:[a.length," active"]})]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:u("modelManagement.overview.routesEditorHint")})]}),e.jsxs("div",{className:"self-start rounded-full bg-card px-3 py-2 text-[11px] font-medium text-muted-foreground",children:["Active workspace · ",ge]})]}),a.length===0?e.jsxs("div",{className:"rounded-xl border-2 border-dashed border-border/30 bg-background/60 p-12 text-center text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium",children:u("settings.routing.empty")}),e.jsx("p",{className:"mt-2 text-xs",children:u("modelManagement.emptyRoutesHint")})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"hidden grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_auto] items-center gap-3 px-1 text-xs font-medium text-muted-foreground md:grid",children:[e.jsx("span",{children:u("settings.routing.source")}),e.jsx("span",{}),e.jsx("span",{children:u("settings.routing.target")}),e.jsx("span",{})]}),a.map((j,P)=>e.jsxs("div",{className:"rounded-xl bg-card p-3 shadow-sm",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between md:hidden",children:[e.jsxs(k,{variant:"outline",className:"text-[11px]",children:["#",P+1]}),e.jsx(v,{variant:"ghost",size:"icon",className:"h-8 w-8 text-muted-foreground hover:text-destructive",onClick:()=>q(j.id),disabled:m,children:e.jsx(T,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_auto] md:items-center",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(w,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground md:hidden",children:u("settings.routing.source")}),e.jsx(S,{value:j.source,onChange:z=>I(j.id,"source",z.target.value),placeholder:u("settings.routing.sourcePlaceholder"),list:$,disabled:m,"aria-label":`route-source-${P+1}`})]}),e.jsx(D,{className:"hidden h-4 w-4 flex-shrink-0 text-muted-foreground md:block"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(w,{className:"text-[11px] uppercase tracking-[0.16em] text-muted-foreground md:hidden",children:u("settings.routing.target")}),e.jsx(Je,{value:j.target,onChange:z=>I(j.id,"target",z),options:f,disabled:m,placeholder:u("settings.routing.targetPlaceholder")})]}),e.jsx(v,{variant:"ghost",size:"icon",className:"hidden h-8 w-8 text-muted-foreground hover:text-destructive md:inline-flex",onClick:()=>q(j.id),disabled:m,children:e.jsx(T,{className:"h-4 w-4"})})]})]},j.id))]})]}),e.jsxs("div",{className:"flex flex-col gap-3 rounded-xl bg-card p-4 shadow-[var(--surface-shadow)] md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm font-medium",children:u("modelManagement.actions.footerTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:u(t?"modelManagement.actions.footerDirtyHint":"modelManagement.actions.footerSavedHint")})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-3 md:flex md:flex-wrap md:items-center",children:[e.jsx(v,{variant:"outline",size:"sm",onClick:xe,disabled:m,className:"w-full",children:u("settings.routing.add")}),e.jsx(v,{variant:"outline",size:"sm",onClick:pe,disabled:m||!t,className:"w-full",children:u("common.actions.reset")}),e.jsxs(v,{size:"sm",onClick:ue,disabled:m,className:"relative w-full",children:[u(m?"common.actions.saving":"modelManagement.actions.saveRoutes"),t?e.jsx("span",{className:"absolute -right-1 -top-1 h-2 w-2 rounded-full bg-amber-500"}):null]})]})]}),e.jsxs("div",{className:"space-y-3 rounded-xl bg-secondary/50 p-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(w,{className:"text-sm font-medium text-foreground",children:u("settings.routing.suggested")}),e.jsx(k,{variant:"outline",className:"text-[11px]",children:L.length})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:u("modelManagement.overview.suggestionHint")})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:L.map(j=>{const P=he.has(j);return e.jsx(v,{variant:P?"ghost":"outline",size:"sm",onClick:()=>me(j),disabled:m||P,className:O("h-7 rounded-md px-2.5 text-[11px] font-normal",P?"opacity-45":"bg-background/70"),children:j},`${l}-${j}`)})})]}),e.jsx("datalist",{id:$,children:L.map(j=>e.jsx("option",{value:j},`${$}-${j}`))})]})})}function Ze({presets:l,presetName:s,presetError:h,savingPreset:r,applyingPreset:a,deletingPreset:p,expanded:m,onToggleExpanded:t,onPresetNameChange:x,onSavePreset:N,onRequestPresetDiff:d,onRequestDeletePreset:b}){const{t:o}=E();return e.jsxs("div",{className:"rounded-xl bg-card shadow-[var(--surface-shadow)]",children:[e.jsx("button",{type:"button",className:"flex w-full items-center justify-between gap-3 rounded-xl p-4 text-left transition-colors hover:bg-accent",onClick:t,children:e.jsxs("div",{className:"flex items-center gap-2",children:[m?e.jsx(be,{className:"h-4 w-4"}):e.jsx(ve,{className:"h-4 w-4"}),e.jsx("h3",{className:"font-medium",children:o("modelManagement.presets.title")}),e.jsx(k,{variant:"secondary",className:"text-xs",children:l.length})]})}),m?e.jsxs("div",{className:"space-y-4 border-t border-border/45 px-4 pb-4 pt-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:o("modelManagement.presets.description")}),e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center",children:[e.jsx(S,{value:s,onChange:c=>x(c.target.value),placeholder:o("modelManagement.presets.namePlaceholder"),disabled:r,className:"w-full md:w-48"}),e.jsx(v,{onClick:N,disabled:r,className:"w-full md:w-auto",children:o(r?"modelManagement.presets.saving":"modelManagement.presets.save")})]}),h?e.jsx("p",{className:"text-sm text-destructive",children:h}):null,l.length===0?e.jsx("p",{className:"py-4 text-center text-sm text-muted-foreground",children:o("modelManagement.presets.empty")}):e.jsx(Ce,{children:e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:l.map(c=>{const i=a===c.name,n=p===c.name,g=Object.entries(c.modelRoutes??{}),f=g.length;return e.jsxs("div",{className:"flex flex-col gap-3 rounded-xl bg-secondary/50 px-4 py-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs(Ee,{children:[e.jsx(Pe,{asChild:!0,children:e.jsxs("div",{className:"min-w-0 flex-1 cursor-default",children:[e.jsx("span",{className:"block truncate text-sm font-medium",children:c.name}),e.jsx(k,{variant:"outline",className:"mt-1 text-xs",children:f>0?o("modelManagement.presets.rulesCount",{count:f}):o("modelManagement.presets.noRules")})]})}),f>0?e.jsx(De,{side:"bottom",className:"max-w-xs",children:e.jsxs("div",{className:"space-y-1 text-xs",children:[g.slice(0,5).map(([M,C])=>e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"truncate",children:M}),e.jsx(D,{className:"h-3 w-3 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:C})]},M)),f>5?e.jsxs("div",{className:"text-muted-foreground",children:["…+",f-5]}):null]})}):null]}),e.jsxs("div",{className:"grid flex-shrink-0 gap-2 sm:flex sm:items-center",children:[e.jsx(v,{size:"sm",onClick:()=>d(c),disabled:i||n,className:"w-full sm:w-auto",children:o(i?"modelManagement.presets.applying":"modelManagement.presets.apply")}),e.jsx(v,{variant:"destructive",size:"sm",onClick:()=>b(c),disabled:n||i,className:"w-full sm:w-auto",children:o(n?"modelManagement.presets.deleting":"modelManagement.presets.delete")})]})]},c.name)})})})]}):null]})}function ys(){var p,m;const{t:l}=E(),s=Ge(),h=s.systemTabs.filter(t=>t.key!=="providers"),r=s.activeTab==="providers"?"anthropic":s.activeTab,a=s.tabs.find(t=>t.key===r)??null;return A.useEffect(()=>{s.activeTab==="providers"&&s.setActiveTab("anthropic")},[s.activeTab,s.setActiveTab]),e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Me,{icon:e.jsx(ye,{className:"h-5 w-5","aria-hidden":"true"}),title:l("routingManagement.title"),description:l("routingManagement.description"),eyebrow:l("routingManagement.eyebrow"),breadcrumb:"Gateway / Routing",badge:(a==null?void 0:a.label)??r,actions:e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:flex-wrap sm:justify-end",children:[e.jsx(v,{asChild:!0,variant:"outline",className:"w-full sm:w-auto",children:e.jsxs(we,{to:"/models",children:[e.jsx(Ne,{className:"h-4 w-4","aria-hidden":"true"}),l("nav.models")]})}),e.jsx(v,{onClick:s.handleOpenCreateEndpoint,className:"w-full sm:w-auto",children:l("modelManagement.addEndpoint")})]})}),e.jsx(We,{activeTab:r,customEndpoints:s.customEndpoints,customTabs:s.customTabs,isDirtyByEndpoint:s.isDirtyByEndpoint,onDeleteEndpoint:s.setConfirmAction,onEditEndpoint:s.handleOpenEditEndpoint,onSelectTab:s.setActiveTab,systemTabs:h}),e.jsx(Ye,{endpoint:r,applyingPreset:((p=s.applyingPreset)==null?void 0:p.endpoint)===r?s.applyingPreset.name:null,config:s.config,customEndpoints:s.customEndpoints,deletingPreset:((m=s.deletingPreset)==null?void 0:m.endpoint)===r?s.deletingPreset.name:null,isDirty:s.isDirtyByEndpoint[r]??!1,onAddRoute:()=>s.handleAddRoute(r),onAddSuggestion:t=>s.handleAddSuggestion(r,t),onPresetNameChange:t=>s.handlePresetNameChange(r,t),onRequestDeletePreset:t=>s.setConfirmAction({kind:"preset",endpoint:r,preset:t}),onRequestPresetDiff:t=>s.setPresetDiffDialog({endpoint:r,preset:t}),onRemoveRoute:t=>s.handleRemoveRoute(r,t),onResetRoutes:()=>s.handleResetRoutes(r),onRouteChange:(t,x,N)=>s.handleRouteChange(r,t,x,N),onSavePreset:()=>void s.handleSavePreset(r),onSaveRoutes:()=>void s.handleSaveRoutes(r),onCompatibilityEnabledChange:t=>void s.handleCompatibilityEnabledChange(r,t),onValidationModeChange:t=>void s.handleValidationModeChange(r,t),onTogglePresetsExpanded:()=>s.setPresetsExpanded(t=>({...t,[r]:!t[r]})),presetError:s.presetErrorByEndpoint[r],presetName:s.presetNameByEndpoint[r]??"",presets:s.presetsByEndpoint[r]??[],presetsExpanded:s.presetsExpanded[r]===!0,providerModelOptions:s.providerModelOptions,routeError:s.routeError[r],routes:s.routesByEndpoint[r]||[],savingClaudeValidation:s.savingClaudeValidation,savingCompatibilityPolicy:s.savingCompatibilityPolicy,savingPreset:s.savingPresetFor===r,savingRoute:s.savingRouteFor===r,tabs:s.tabs.filter(t=>t.key!=="providers")}),e.jsx(Ue,{open:s.endpointDrawerOpen,endpoint:s.editingEndpoint,onClose:()=>{s.setEndpointDrawerOpen(!1),s.setEditingEndpoint(void 0)},onSuccess:()=>{s.configQuery.refetch()}}),e.jsx(Xe,{dialog:s.presetDiffDialog,currentRoutes:s.presetDiffDialog?s.routesByEndpoint[s.presetDiffDialog.endpoint]||[]:[],onConfirm:(t,x)=>{s.setPresetDiffDialog(null),s.handleApplyPreset(t,x)},onClose:()=>s.setPresetDiffDialog(null)}),e.jsx(ke,{open:!!s.confirmAction,onOpenChange:t=>{!t&&!s.confirmingAction&&s.setConfirmAction(null)},title:s.confirmDialogTitle,description:s.confirmDialogDescription,confirmLabel:s.confirmingAction?l("common.actions.loading"):l("common.delete"),cancelLabel:l("common.actions.cancel"),loading:s.confirmingAction,onConfirm:s.handleConfirmDialog,children:s.confirmDialogName?e.jsx("div",{className:"rounded-lg bg-destructive/5 px-3 py-2 font-mono text-xs text-foreground ring-1 ring-destructive/20",children:s.confirmDialogName}):null})]})}export{ys as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,aP as J,aJ as xt,am as gt,r as m,X as ft}from"./vendor-z22RpOY0.js";import{C as Le}from"./ConfirmDialog-oYHVEpGJ.js";import{L as Fe,B as k,r as Te,g as bt,b as vt,u as jt}from"./app-COiQeF3y.js";import{P as yt}from"./PageHeader-DCqHI67a.js";import{C as A,a as L}from"./card-ChFVaqLf.js";import{B as E,q as G}from"./queryKeys-ucXCzh0P.js";import{I as w}from"./input-DW7jGTgj.js";import{L as v}from"./label-Ci1io7XA.js";import{S as V}from"./switch-CT24uL_Q.js";import{S as Nt,a as wt,b as Ct,c as Pt,d as kt}from"./select-BchX45jJ.js";import{c as M}from"./global-B-NXh5qD.js";import{u as R}from"./i18n-Bl2BcCDG.js";import{u as Me}from"./useApiQuery-tbd4JJaZ.js";import{u as Q}from"./useAppMutation-SONU2xFC.js";import{g as Oe}from"./gateway-BU3dR2tm.js";import{c as St}from"./clipboard-CALi6bTW.js";import"./DialogShell-DcOGCV8m.js";import"./radix-mHySgtou.js";import"./query-BbGWgOFk.js";import"./router-CL3rf_uf.js";const Rt=[{value:"fatal",labelKey:"fatal"},{value:"error",labelKey:"error"},{value:"warn",labelKey:"warn"},{value:"info",labelKey:"info"},{value:"debug",labelKey:"debug"},{value:"trace",labelKey:"trace"}],te=[{id:"section-basics",labelKey:"settings.sections.basics"},{id:"section-protocol",labelKey:"settings.sections.protocol"},{id:"section-security",labelKey:"settings.sections.security"},{id:"section-config-file",labelKey:"settings.sections.configFile"},{id:"section-cleanup",labelKey:"settings.sections.cleanup"}];function z(s){var o,r,c,a,i,h,p,T,g,d,N;const t=s.storePayloads,n=C=>typeof C=="boolean"?C:typeof t=="boolean"?t:!0;return{port:String(s.port??((o=s.http)==null?void 0:o.port)??""),host:s.host??((r=s.http)==null?void 0:r.host)??"127.0.0.1",logRetentionDays:String(s.logRetentionDays??30),logExportTimeoutSeconds:String(s.logExportTimeoutSeconds??60),storeRequestPayloads:n(s.storeRequestPayloads),storeResponsePayloads:n(s.storeResponsePayloads),logLevel:s.logLevel??"info",bodyLimitMb:(()=>{const C=s.bodyLimit;return typeof C=="number"&&Number.isFinite(C)&&C>0?String(Math.max(1,Math.round(C/(1024*1024)))):"10"})(),enableRoutingFallback:s.enableRoutingFallback===!0,httpEnabled:((c=s.http)==null?void 0:c.enabled)!==!1,httpPort:String(((a=s.http)==null?void 0:a.port)??s.port??4100),httpHost:((i=s.http)==null?void 0:i.host)??s.host??"127.0.0.1",httpsEnabled:((h=s.https)==null?void 0:h.enabled)===!0,httpsPort:String(((p=s.https)==null?void 0:p.port)??4443),httpsHost:((T=s.https)==null?void 0:T.host)??s.host??"127.0.0.1",httpsKeyPath:((g=s.https)==null?void 0:g.keyPath)??"",httpsCertPath:((d=s.https)==null?void 0:d.certPath)??"",httpsCaPath:((N=s.https)==null?void 0:N.caPath)??""}}function X(s){return{enabled:s.enabled,username:s.username??"",password:"",confirmPassword:""}}function Et({activeSection:s,onSelectSection:t}){const{t:n}=R();return e.jsxs(e.Fragment,{children:[e.jsx("nav",{className:"hidden xl:block",children:e.jsxs("div",{className:"sticky top-20 rounded-[1.1rem] border border-white/70 bg-card/95 p-3.5 shadow-[0_20px_48px_-42px_rgba(15,23,42,0.24)]",children:[e.jsx("p",{className:"mb-2.5 px-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:n("settings.sections.jump")}),e.jsx("div",{className:"space-y-1.5",children:te.map((o,r)=>e.jsxs("button",{type:"button",onClick:()=>t(o.id),className:M("flex w-full items-center gap-2.5 rounded-[0.85rem] px-3 py-2 text-left text-sm font-semibold transition-all duration-200",s===o.id?"bg-secondary text-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.62)]":"text-muted-foreground hover:text-foreground"),children:[e.jsx("span",{className:M("flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-semibold",s===o.id?"bg-primary text-primary-foreground":"bg-secondary text-muted-foreground"),children:r+1}),e.jsx("span",{children:n(o.labelKey)})]},o.id))})]})}),e.jsx("div",{className:"xl:hidden",children:e.jsx("div",{className:"overflow-x-auto pb-1",children:e.jsx("div",{className:"flex w-max gap-2 px-1",children:te.map(o=>e.jsx("button",{type:"button",onClick:()=>t(o.id),className:M("rounded-full px-4 py-2 text-xs font-semibold transition-all duration-150",s===o.id?"bg-secondary text-foreground font-medium":"text-muted-foreground hover:text-foreground hover:bg-secondary/50"),children:n(o.labelKey)},o.id))})})})]})}function At({configPath:s,defaultsSummary:t,form:n,protocolSummaryLabel:o,protocolChangesPending:r,isAuthDirty:c,isConfigDirty:a,authEnabled:i,authUsername:h}){const{t:p}=R();return e.jsx(A,{variant:"ghost",className:"rounded-[1.25rem] border border-white/70 bg-card/95 shadow-[0_20px_50px_-42px_rgba(15,23,42,0.24)]",children:e.jsxs(L,{className:"space-y-3 p-4",children:[e.jsxs("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.18em] text-primary/75",children:p("settings.overview.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:p("settings.overview.description")})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(E,{variant:a||c?"warning":"success",children:p(a||c?"modelManagement.actions.unsaved":"common.status.success")}),r?e.jsx(E,{variant:"outline",className:"border-amber-300 text-amber-700 dark:border-amber-700 dark:text-amber-300",children:p("settings.protocol.restartWarning")}):null]})]}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-3",children:[e.jsx(U,{label:p("settings.overview.cards.protocols"),value:o,helper:`${n.httpHost||"127.0.0.1"}:${n.httpPort}${n.httpsEnabled?` / ${n.httpsHost||"127.0.0.1"}:${n.httpsPort}`:""}`}),e.jsx(U,{label:p("settings.overview.cards.security"),value:p(i?"settings.overview.values.authEnabled":"settings.overview.values.authDisabled"),helper:h?`${p("settings.auth.username")}: ${h}`:p("settings.auth.enableHint")}),e.jsx(U,{label:p("settings.overview.cards.configFile"),value:s||p("settings.file.unknown"),helper:t??p("settings.defaults.none"),mono:!0})]})]})})}function Lt({defaultsSummary:s,errors:t,form:n,onInputChange:o,onSetForm:r,sectionRef:c}){const{t:a}=R();return e.jsx(A,{id:"section-basics",ref:c,className:"bg-card shadow-[var(--surface-shadow)]",children:e.jsxs(L,{className:"pt-6",children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold",children:a("settings.sections.basics")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a("settings.description")})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-3",children:[e.jsx(Y,{label:a("settings.fields.retention"),value:n.logRetentionDays}),e.jsx(Y,{label:a("settings.fields.logExportTimeout"),value:`${n.logExportTimeoutSeconds}s`}),e.jsx(Y,{label:a("settings.fields.bodyLimit"),value:`${n.bodyLimitMb} MB`})]})]}),e.jsxs("div",{className:"grid gap-5 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.port")}),e.jsx(w,{type:"number",min:1,max:65535,value:n.port,onChange:i=>o("port")(i.target.value),"aria-invalid":!!t.port}),t.port?e.jsx("p",{className:"text-xs text-destructive",children:t.port}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.host")}),e.jsx(w,{value:n.host,onChange:i=>o("host")(i.target.value),placeholder:a("settings.fields.hostPlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.retention")}),e.jsx(w,{type:"number",min:1,max:365,value:n.logRetentionDays,onChange:i=>o("logRetentionDays")(i.target.value),"aria-invalid":!!t.logRetentionDays}),t.logRetentionDays?e.jsx("p",{className:"text-xs text-destructive",children:t.logRetentionDays}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.logExportTimeout")}),e.jsx(w,{type:"number",min:5,max:600,value:n.logExportTimeoutSeconds,onChange:i=>o("logExportTimeoutSeconds")(i.target.value),"aria-invalid":!!t.logExportTimeoutSeconds}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settings.fields.logExportTimeoutHint")}),t.logExportTimeoutSeconds?e.jsx("p",{className:"text-xs text-destructive",children:t.logExportTimeoutSeconds}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.bodyLimit")}),e.jsx(w,{type:"number",min:1,max:2048,value:n.bodyLimitMb,onChange:i=>o("bodyLimitMb")(i.target.value),"aria-invalid":!!t.bodyLimitMb}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settings.fields.bodyLimitHint")}),t.bodyLimitMb?e.jsx("p",{className:"text-xs text-destructive",children:t.bodyLimitMb}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:a("settings.fields.logLevel")}),e.jsxs(Nt,{value:n.logLevel,onValueChange:i=>r(h=>({...h,logLevel:i})),children:[e.jsx(wt,{children:e.jsx(Ct,{})}),e.jsx(Pt,{children:Rt.map(i=>e.jsx(kt,{value:i.value,children:a(`settings.fields.logLevelOption.${i.labelKey}`)},i.value))})]})]}),e.jsxs("div",{className:"grid gap-4 md:col-span-2 sm:grid-cols-2",children:[e.jsx(Z,{label:a("settings.fields.storeRequestPayloads"),hint:a("settings.fields.storeRequestPayloadsHint"),checked:n.storeRequestPayloads,onCheckedChange:i=>r(h=>({...h,storeRequestPayloads:i}))}),e.jsx(Z,{label:a("settings.fields.storeResponsePayloads"),hint:a("settings.fields.storeResponsePayloadsHint"),checked:n.storeResponsePayloads,onCheckedChange:i=>r(h=>({...h,storeResponsePayloads:i}))}),e.jsx(Z,{label:a("settings.fields.enableRoutingFallback"),hint:a("settings.fields.enableRoutingFallbackHint"),checked:n.enableRoutingFallback,onCheckedChange:i=>r(h=>({...h,enableRoutingFallback:i}))})]}),e.jsxs("div",{className:"rounded-xl bg-secondary px-4 py-5 md:col-span-2",children:[e.jsx(v,{className:"text-xs uppercase tracking-wide text-muted-foreground",children:a("settings.fields.defaults")}),e.jsx("p",{className:"mt-2 text-sm",children:s??a("settings.defaults.none")})]})]})]})})}function Tt({errors:s,form:t,onSetForm:n,sectionRef:o}){const{t:r}=R();return e.jsx(A,{id:"section-protocol",ref:o,className:"bg-card shadow-[var(--surface-shadow)]",children:e.jsxs(L,{className:"space-y-6 pt-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold",children:r("settings.sections.protocol")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:r("settings.protocol.description")})]}),e.jsx("div",{className:"rounded-xl bg-amber-50 ring-1 ring-amber-200/50 p-4 shadow-sm dark:bg-amber-950/24 dark:ring-amber-500/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(J,{className:"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:r("settings.protocol.restartWarning")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r("settings.protocol.restartHint")}),e.jsx("code",{className:"block rounded-lg border border-border bg-secondary px-3 py-2 text-xs font-mono text-foreground dark:bg-secondary dark:border-border",children:"cc-gw restart --daemon"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r("settings.protocol.restartTip")})]})]})}),s.protocol?e.jsxs("div",{className:"rounded-xl bg-destructive/10 ring-1 ring-destructive/30 p-4 text-sm text-destructive shadow-sm",children:[e.jsx(J,{className:"mr-2 inline h-4 w-4"}),s.protocol]}):null,e.jsxs("div",{className:"rounded-xl bg-secondary p-5 dark:bg-secondary",children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(v,{className:"text-sm font-medium text-foreground",children:r("settings.protocol.http.enable")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r("settings.protocol.http.hint")})]}),e.jsx(V,{checked:t.httpEnabled,onCheckedChange:c=>n(a=>({...a,httpEnabled:c}))})]}),t.httpEnabled?e.jsxs("div",{className:"mt-4 grid gap-4 border-t border-border pt-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:r("settings.protocol.http.port")}),e.jsx(w,{type:"number",min:1,max:65535,value:t.httpPort,onChange:c=>n(a=>({...a,httpPort:c.target.value})),"aria-invalid":!!s.httpPort}),s.httpPort?e.jsx("p",{className:"text-xs text-destructive",children:s.httpPort}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:r("settings.protocol.http.host")}),e.jsx(w,{value:t.httpHost,onChange:c=>n(a=>({...a,httpHost:c.target.value})),placeholder:"127.0.0.1"})]})]}):null]}),e.jsxs("div",{className:"rounded-xl bg-secondary p-5 dark:bg-secondary",children:[e.jsxs("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(v,{className:"text-sm font-medium text-foreground",children:r("settings.protocol.https.enable")}),e.jsx(xt,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:r("settings.protocol.https.hint")})]}),e.jsx(V,{checked:t.httpsEnabled,onCheckedChange:c=>n(a=>({...a,httpsEnabled:c}))})]}),t.httpsEnabled?e.jsxs("div",{className:"mt-4 space-y-4 border-t border-border pt-4",children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:r("settings.protocol.https.port")}),e.jsx(w,{type:"number",min:1,max:65535,value:t.httpsPort,onChange:c=>n(a=>({...a,httpsPort:c.target.value})),"aria-invalid":!!s.httpsPort}),s.httpsPort?e.jsx("p",{className:"text-xs text-destructive",children:s.httpsPort}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:r("settings.protocol.https.host")}),e.jsx(w,{value:t.httpsHost,onChange:c=>n(a=>({...a,httpsHost:c.target.value})),placeholder:"127.0.0.1"})]})]}),e.jsx(ee,{label:r("settings.protocol.https.keyPath"),value:t.httpsKeyPath,onChange:c=>n(a=>({...a,httpsKeyPath:c})),placeholder:"~/.cc-gw/certs/key.pem"}),e.jsx(ee,{label:r("settings.protocol.https.certPath"),value:t.httpsCertPath,onChange:c=>n(a=>({...a,httpsCertPath:c})),placeholder:"~/.cc-gw/certs/cert.pem"}),e.jsx(ee,{label:r("settings.protocol.https.caPath"),value:t.httpsCaPath,onChange:c=>n(a=>({...a,httpsCaPath:c})),placeholder:"留空则不使用"}),e.jsx("div",{className:"rounded-xl bg-amber-50 ring-1 ring-amber-200/50 p-4 shadow-sm dark:bg-amber-950/24 dark:ring-amber-500/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(J,{className:"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx("p",{className:"text-sm font-medium text-amber-800 dark:text-amber-200",children:r("settings.protocol.https.warning")}),e.jsxs("p",{className:"text-xs leading-relaxed text-amber-700 dark:text-amber-300",children:[e.jsx("strong",{children:r("settings.protocol.https.invalidCert")}),r("settings.protocol.https.invalidCertDetail")]}),e.jsxs("p",{className:"text-xs leading-relaxed text-amber-700 dark:text-amber-300",children:[e.jsx("strong",{children:r("settings.protocol.https.recommended")}),r("settings.protocol.https.recommendedDetail")]}),e.jsx("p",{className:"text-xs leading-relaxed text-amber-600 dark:text-amber-400",children:r("settings.protocol.https.tip")})]})]})})]}):null]})]})})}function Mt({authErrors:s,authForm:t,authLoading:n,authSettings:o,needsPassword:r,onAuthReset:c,onAuthSave:a,onSetAuthForm:i,savingAuth:h,isAuthDirty:p,sectionRef:T}){const{t:g}=R();return e.jsx(A,{id:"section-security",ref:T,className:"bg-card shadow-[var(--surface-shadow)]",children:e.jsxs(L,{className:"space-y-5 pt-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold",children:g("settings.sections.security")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:g("settings.auth.description")})]}),n&&!o?e.jsx("div",{className:"flex min-h-[120px] items-center justify-center",children:e.jsx(Fe,{})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col gap-4 rounded-xl bg-secondary p-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{className:"text-sm font-medium",children:g("settings.auth.enable")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:g("settings.auth.enableHint")}),e.jsxs("div",{className:"flex flex-wrap gap-2 text-xs font-medium text-muted-foreground",children:[e.jsx("span",{className:"rounded-full bg-secondary px-3 py-1 text-[11px] tracking-[0.08em]",children:"/ui"}),e.jsx("span",{className:"rounded-full bg-secondary px-3 py-1 text-[11px] tracking-[0.08em]",children:"/api/*"}),e.jsx("span",{className:"rounded-full bg-secondary px-3 py-1 text-[11px] tracking-[0.08em]",children:"Cookie Session"})]})]}),e.jsxs("div",{className:"flex items-center gap-3 self-start sm:self-auto",children:[e.jsx(E,{variant:t.enabled?"success":"secondary",children:t.enabled?g("settings.auth.statusEnabled"):g("settings.auth.statusDisabled")}),e.jsx(V,{checked:t.enabled,onCheckedChange:d=>i(N=>({...N,enabled:d}))})]})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,0.85fr)]",children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2 sm:col-span-2",children:[e.jsx(v,{children:g("settings.auth.username")}),e.jsx(w,{value:t.username,onChange:d=>i(N=>({...N,username:d.target.value})),placeholder:g("settings.auth.usernamePlaceholder")}),s.username?e.jsx("p",{className:"text-xs text-destructive",children:s.username}):null]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:g("settings.auth.password")}),e.jsx(w,{type:"password",value:t.password,disabled:!t.enabled,onChange:d=>i(N=>({...N,password:d.target.value})),placeholder:g("settings.auth.passwordPlaceholder")}),s.password?e.jsx("p",{className:"text-xs text-destructive",children:s.password}):e.jsx("p",{className:"text-xs text-muted-foreground",children:g(r?"settings.auth.passwordHintRequired":"settings.auth.passwordHintOptional")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:g("settings.auth.confirmPassword")}),e.jsx(w,{type:"password",value:t.confirmPassword,disabled:!t.enabled,onChange:d=>i(N=>({...N,confirmPassword:d.target.value})),placeholder:g("settings.auth.confirmPasswordPlaceholder")}),s.confirmPassword?e.jsx("p",{className:"text-xs text-destructive",children:s.confirmPassword}):null]})]}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"rounded-xl bg-secondary p-4",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.34em] text-muted-foreground",children:g("settings.auth.status")}),e.jsx("p",{className:"mt-2 text-base font-semibold",children:o!=null&&o.enabled?g("settings.auth.statusEnabled"):g("settings.auth.statusDisabled")}),o!=null&&o.username?e.jsxs("div",{className:"mt-3 rounded-lg bg-accent px-3 py-2 text-xs font-medium text-primary",children:[g("settings.auth.username"),": ",o.username]}):null]}),e.jsx("div",{className:"rounded-xl bg-secondary px-4 py-3 text-xs text-muted-foreground",children:g(r?"settings.auth.passwordHintRequired":"settings.auth.passwordHintOptional")})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2 lg:flex lg:flex-wrap lg:justify-end",children:[e.jsx(k,{onClick:a,disabled:h||!p,className:"w-full lg:w-auto",children:g(h?"common.actions.saving":"settings.auth.actions.save")}),e.jsx(k,{variant:"outline",onClick:c,disabled:h||!p,className:"w-full lg:w-auto",children:g("common.actions.reset")})]})]})]})})}function Ot({configPath:s,onCopyPath:t,sectionRef:n}){const{t:o}=R();return e.jsx(A,{id:"section-config-file",ref:n,className:"bg-card shadow-[var(--surface-shadow)]",children:e.jsxs(L,{className:"space-y-3 pt-6",children:[e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold",children:o("settings.sections.configFile")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:o("settings.file.description")})]}),e.jsxs(k,{variant:"outline",size:"sm",onClick:t,className:"w-full sm:w-auto",children:[e.jsx(gt,{className:"mr-2 h-4 w-4"}),o("common.actions.copy")]})]}),e.jsx("code",{className:"block break-all rounded-lg bg-secondary px-4 py-3 text-xs font-mono text-muted-foreground",children:s||o("settings.file.unknown")}),e.jsx("div",{className:"rounded-lg bg-secondary px-4 py-3 text-xs text-muted-foreground",children:o("help.note")})]})})}function Ft({cleaning:s,clearingAll:t,onOpenCleanup:n,onOpenClearAll:o,sectionRef:r}){const{t:c}=R();return e.jsx(A,{id:"section-cleanup",ref:r,className:"bg-card shadow-[var(--surface-shadow)]",children:e.jsxs(L,{className:"space-y-4 pt-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold",children:c("settings.sections.cleanup")}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:c("settings.cleanup.description")})]}),e.jsx("div",{className:"rounded-lg bg-secondary px-4 py-3 text-xs text-muted-foreground",children:c("settings.cleanup.confirmCleanup")}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-2",children:[e.jsx("div",{className:"rounded-xl border border-amber-200 bg-amber-50 p-5 dark:border-amber-800 dark:bg-amber-950/30",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{variant:"warning",children:c("settings.cleanup.softLabel")}),e.jsx("p",{className:"text-sm font-medium",children:c("settings.cleanup.softTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:c("settings.cleanup.softDescription")}),e.jsx(k,{variant:"outline",onClick:n,disabled:s,className:"w-full sm:w-auto",children:c(s?"common.actions.cleaning":"common.actions.cleanup")})]})}),e.jsx("div",{className:"rounded-xl border border-destructive/30 bg-destructive/10 p-5 text-destructive",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx(E,{variant:"outline",className:"border-destructive/40 bg-destructive/10 text-destructive",children:c("settings.cleanup.hardLabel")}),e.jsx("p",{className:"text-sm font-medium",children:c("settings.cleanup.hardTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:c("settings.cleanup.clearAllWarning")}),e.jsx(k,{variant:"destructive",onClick:o,disabled:t,className:"w-full sm:w-auto",children:c(t?"settings.cleanup.clearingAll":"settings.cleanup.clearAll")})]})})]})]})})}function Ht({isAuthDirty:s,isConfigDirty:t,protocolChangesPending:n,onAuthReset:o,onAuthSave:r,onReset:c,onSave:a,saving:i,savingAuth:h}){const{t:p}=R();return!s&&!t?null:e.jsxs("div",{className:"sticky bottom-4 z-20 flex flex-col gap-3 rounded-xl bg-card border border-border px-6 py-5 shadow-lg md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(E,{variant:"secondary",children:p("modelManagement.actions.unsaved")}),t?e.jsx(E,{variant:"outline",children:p("settings.sections.basics")}):null,s?e.jsx(E,{variant:"outline",children:p("settings.sections.security")}):null,n?e.jsx(E,{variant:"outline",className:"border-amber-300 text-amber-700 dark:border-amber-700 dark:text-amber-300",children:p("settings.sections.protocol")}):null]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:p(n?"settings.toast.protocolRestartRequired":"modelManagement.actions.footerDirtyHint")})]}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2 lg:flex lg:flex-wrap lg:items-center",children:[s?e.jsxs(e.Fragment,{children:[e.jsx(k,{variant:"outline",onClick:o,disabled:h,className:"w-full lg:w-auto",children:p("common.actions.reset")}),e.jsx(k,{onClick:r,disabled:h,className:"w-full lg:w-auto",children:p(h?"common.actions.saving":"settings.auth.actions.save")})]}):null,t?e.jsxs(e.Fragment,{children:[e.jsx(k,{variant:"outline",onClick:c,disabled:i,className:"w-full lg:w-auto",children:p("common.actions.reset")}),e.jsx(k,{onClick:a,disabled:i,className:"w-full lg:w-auto",children:p(i?"common.actions.saving":"common.actions.save")})]}):null]})]})}function U({label:s,value:t,helper:n,mono:o=!1}){return e.jsxs("div",{className:"min-w-0 rounded-[0.95rem] bg-secondary/65 px-3.5 py-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.62)]",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.22em] text-muted-foreground",children:s}),e.jsx("p",{className:M("mt-1.5 truncate text-xl font-semibold text-foreground",o?"font-mono text-sm leading-tight":""),title:typeof t=="string"?t:void 0,children:t}),e.jsx("p",{className:"mt-1.5 line-clamp-2 text-xs leading-relaxed text-muted-foreground",children:n})]})}function Y({label:s,value:t}){return e.jsxs("div",{className:"rounded-lg bg-secondary px-3 py-2 text-center",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-[0.3em] text-muted-foreground",children:s}),e.jsx("p",{className:"mt-1 text-sm font-semibold text-foreground",children:t})]})}function Z({checked:s,className:t,hint:n,hintClassName:o,label:r,labelClassName:c,onCheckedChange:a}){return e.jsxs("div",{className:M("flex flex-col gap-3 rounded-xl bg-secondary p-4 sm:flex-row sm:items-center sm:justify-between",t),children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(v,{className:M("text-sm font-semibold text-foreground",c),children:r}),e.jsx("p",{className:M("text-xs text-muted-foreground",o),children:n})]}),e.jsx(V,{checked:s,onCheckedChange:a,className:"self-start sm:self-auto"})]})}function ee({label:s,onChange:t,placeholder:n,value:o}){return e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:s}),e.jsx(w,{value:o,onChange:r=>t(r.target.value),placeholder:n,className:"font-mono text-xs"})]})}const _={authStatusRequest(){return{url:"/api/auth/web",method:"GET"}},saveWebAuth:async s=>bt(vt.post("/api/auth/web",s)),cleanupLogs:async()=>Te({url:"/api/logs/cleanup",method:"POST"}),clearLogs:async()=>Te({url:"/api/logs/clear",method:"POST"})};function Dt(){const{t:s}=R(),{pushToast:t}=jt(),[n,o]=m.useState(te[0].id),r=m.useRef(new Map),c=m.useCallback(l=>{const x=r.current.get(l);x&&x.scrollIntoView({behavior:"smooth",block:"start"})},[]),a=m.useCallback(l=>x=>{x?r.current.set(l,x):r.current.delete(l)},[]),i=Me(G.config.info(),Oe.configInfoRequest()),h=Me(G.auth.web(),_.authStatusRequest()),p=Q({mutationFn:_.saveWebAuth,successToast:()=>({title:s("settings.auth.toast.success")}),errorToast:l=>({title:s("settings.auth.toast.failure",{message:l.message})}),invalidateKeys:[G.auth.web()]}),T=Q({mutationFn:_.cleanupLogs,successToast:l=>({title:l.deleted>0?s("settings.toast.cleanupSuccess",{count:l.deleted}):s("settings.toast.cleanupNone")}),errorToast:l=>({title:s("settings.toast.cleanupFailure",{message:l.message})})}),g=Q({mutationFn:_.clearLogs,successToast:l=>({title:s("settings.toast.clearAllSuccess",{logs:l.deleted,metrics:l.metricsCleared})}),errorToast:l=>({title:s("settings.toast.clearAllFailure",{message:l.message})})}),[d,N]=m.useState(null),[C,He]=m.useState(""),[u,H]=m.useState({port:"",host:"",logRetentionDays:"",logExportTimeoutSeconds:"60",storeRequestPayloads:!0,storeResponsePayloads:!0,logLevel:"info",bodyLimitMb:"10",enableRoutingFallback:!1,httpEnabled:!0,httpPort:"4100",httpHost:"127.0.0.1",httpsEnabled:!1,httpsPort:"4443",httpsHost:"127.0.0.1",httpsKeyPath:"",httpsCertPath:"",httpsCaPath:""}),[De,B]=m.useState({}),[Ke,se]=m.useState(!1),[qe,ae]=m.useState(!1),[_e,ne]=m.useState(!1),[Ve,Be]=m.useState(!1),[Ie,$e]=m.useState(!1),[j,le]=m.useState(null),[f,D]=m.useState({enabled:!1,username:"",password:"",confirmPassword:""}),[We,K]=m.useState({}),[Je,re]=m.useState(!1),Ge=m.useMemo(()=>{if(!(d!=null&&d.defaults))return null;const l=[];return d.defaults.completion&&l.push(s("settings.defaults.completion",{model:d.defaults.completion})),d.defaults.reasoning&&l.push(s("settings.defaults.reasoning",{model:d.defaults.reasoning})),d.defaults.background&&l.push(s("settings.defaults.background",{model:d.defaults.background})),l.length>0?l.join(" | "):s("settings.defaults.none")},[d,s]),Qe=m.useMemo(()=>u.httpEnabled&&u.httpsEnabled?s("settings.overview.values.httpAndHttps"):u.httpsEnabled?s("settings.overview.values.httpsOnly"):s("settings.overview.values.httpOnly"),[u.httpEnabled,u.httpsEnabled,s]),ze=m.useMemo(()=>f.enabled?j!=null&&j.hasPassword?f.username.trim()!==(j.username??""):!0:!1,[f.enabled,f.username,j]),O=m.useMemo(()=>d?z(d):null,[d]),Xe=m.useMemo(()=>O?JSON.stringify(u)!==JSON.stringify(O):!1,[u,O]),I=m.useMemo(()=>j?X(j):null,[j]),Ue=m.useMemo(()=>I?JSON.stringify(f)!==JSON.stringify(I):!1,[f,I]),Ye=m.useMemo(()=>O?["httpEnabled","httpPort","httpHost","httpsEnabled","httpsPort","httpsHost","httpsKeyPath","httpsCertPath","httpsCaPath","port","host"].some(x=>u[x]!==O[x]):!1,[u,O]);m.useEffect(()=>{i.data&&(N(i.data.config),He(i.data.path),H(z(i.data.config)))},[i.data]),m.useEffect(()=>{h.data&&(le(h.data),D(X(h.data)),K({}))},[h.data]),m.useEffect(()=>{!i.isError||!i.error||t({title:s("settings.toast.loadFailure",{message:i.error.message}),variant:"error"})},[i.error,i.isError,t,s]),m.useEffect(()=>{!h.isError||!h.error||t({title:s("settings.toast.authLoadFailure",{message:h.error.message}),variant:"error"})},[h.error,h.isError,t,s]);const Ze=m.useCallback(l=>x=>{H(y=>({...y,[l]:x}))},[]),oe=m.useCallback(()=>{const l={};if(!u.httpEnabled&&!u.httpsEnabled&&(l.protocol=s("settings.validation.protocolRequired")),u.httpEnabled){const S=Number(u.httpPort);(!Number.isFinite(S)||S<1||S>65535)&&(l.httpPort=s("settings.validation.httpPort"))}if(u.httpsEnabled){const S=Number(u.httpsPort);(!Number.isFinite(S)||S<1||S>65535)&&(l.httpsPort=s("settings.validation.httpsPort")),(!u.httpsKeyPath||!u.httpsCertPath)&&(l.protocol=s("settings.validation.httpsCertificate"))}const x=Number(u.port);(!Number.isFinite(x)||x<1||x>65535)&&(l.port=s("settings.validation.port"));const y=Number(u.logRetentionDays);(!Number.isFinite(y)||y<1||y>365)&&(l.logRetentionDays=s("settings.validation.retention"));const P=Number(u.logExportTimeoutSeconds);(!Number.isFinite(P)||P<5||P>600)&&(l.logExportTimeoutSeconds=s("settings.validation.logExportTimeout"));const F=Number(u.bodyLimitMb);return(!Number.isFinite(F)||F<1||F>2048)&&(l.bodyLimitMb=s("settings.validation.bodyLimit")),B(l),Object.keys(l).length===0},[u,s]),ie=m.useCallback(()=>{const l={},x=f.username.trim(),y=j?x!==(j.username??""):!0,P=f.enabled&&(!(j!=null&&j.hasPassword)||y);return f.enabled&&!x&&(l.username=s("settings.auth.validation.username")),f.password&&f.password.length<6&&(l.password=s("settings.auth.validation.minLength")),P&&!f.password&&(l.password=s("settings.auth.validation.passwordRequired")),(f.password||f.confirmPassword)&&f.password!==f.confirmPassword&&(l.confirmPassword=s("settings.auth.validation.confirmMismatch")),K(l),Object.keys(l).length===0},[f,j,s]),et=m.useCallback(async()=>{var l,x,y,P,F,S,ce,de,ue,me,pe,he,xe,ge,fe,be,ve,je,ye,Ne,we,Ce,Pe,ke,Se,Re;if(!d){t({title:s("settings.toast.loadFailure",{message:s("settings.toast.missingConfig")}),variant:"error"});return}if(oe()){se(!0);try{const q=Number(u.port),ot=Number(u.logRetentionDays),it=Number(u.logExportTimeoutSeconds),ct=Number(u.bodyLimitMb),b={...d,http:{enabled:u.httpEnabled,port:Number(u.httpPort),host:u.httpHost.trim()||"127.0.0.1"},https:{enabled:u.httpsEnabled,port:Number(u.httpsPort),host:u.httpsHost.trim()||"127.0.0.1",keyPath:u.httpsKeyPath.trim(),certPath:u.httpsCertPath.trim(),caPath:u.httpsCaPath.trim()||void 0},port:q,host:u.host.trim()||void 0,logRetentionDays:ot,logExportTimeoutSeconds:Math.min(Math.max(Math.round(it),5),600),storeRequestPayloads:u.storeRequestPayloads,storeResponsePayloads:u.storeResponsePayloads,logLevel:u.logLevel,bodyLimit:Math.max(1,Math.floor(ct*1024*1024)),enableRoutingFallback:u.enableRoutingFallback};delete b.requestLogging,delete b.responseLogging;const Ee={...b};delete Ee.webAuth,await Oe.saveConfig(Ee),N({...b,webAuth:d.webAuth});const Ae=W=>(W==null?void 0:W.trim())||void 0,dt=d.port??((l=d.http)==null?void 0:l.port)??4100,ut=b.port??((x=b.http)==null?void 0:x.port)??4100,mt=((y=d.host)==null?void 0:y.trim())||((F=(P=d.http)==null?void 0:P.host)==null?void 0:F.trim())||"127.0.0.1",pt=((S=b.host)==null?void 0:S.trim())||((de=(ce=b.http)==null?void 0:ce.host)==null?void 0:de.trim())||"127.0.0.1",ht=dt!==ut||mt!==pt||((ue=d.http)==null?void 0:ue.enabled)!==((me=b.http)==null?void 0:me.enabled)||((pe=d.http)==null?void 0:pe.port)!==((he=b.http)==null?void 0:he.port)||(((xe=d.http)==null?void 0:xe.host)??d.host??"127.0.0.1")!==(((ge=b.http)==null?void 0:ge.host)??b.host??"127.0.0.1")||((fe=d.https)==null?void 0:fe.enabled)!==((be=b.https)==null?void 0:be.enabled)||((ve=d.https)==null?void 0:ve.port)!==((je=b.https)==null?void 0:je.port)||(((ye=d.https)==null?void 0:ye.host)??d.host??"127.0.0.1")!==(((Ne=b.https)==null?void 0:Ne.host)??b.host??"127.0.0.1")||((we=d.https)==null?void 0:we.keyPath)!==((Ce=b.https)==null?void 0:Ce.keyPath)||((Pe=d.https)==null?void 0:Pe.certPath)!==((ke=b.https)==null?void 0:ke.certPath)||Ae((Se=d.https)==null?void 0:Se.caPath)!==Ae((Re=b.https)==null?void 0:Re.caPath);t({title:s(ht?"settings.toast.protocolRestartRequired":"settings.toast.saveSuccess"),variant:"success"}),i.refetch()}catch(q){t({title:s("settings.toast.saveFailure",{message:q instanceof Error?q.message:"unknown"}),variant:"error"})}finally{se(!1)}}},[d,i,u,t,s,oe]),tt=m.useCallback(()=>{d&&(H(z(d)),B({}))},[d]),st=m.useCallback(async()=>{if(ie()){re(!0);try{const l={enabled:f.enabled,username:f.username.trim()||void 0};f.password&&(l.password=f.password);const x=await p.mutateAsync(l);x.auth&&(le(x.auth),D({enabled:x.auth.enabled,username:x.auth.username??"",password:"",confirmPassword:""}),K({})),h.refetch()}catch{}finally{re(!1)}}},[f,h,p,ie]),at=m.useCallback(()=>{j&&(D(X(j)),K({}))},[j]),nt=m.useCallback(async()=>{if(!C){t({title:s("settings.toast.copyFailure",{message:s("settings.file.unknown")}),variant:"error"});return}try{await St(C),t({title:s("settings.toast.copySuccess"),variant:"success"})}catch(l){t({title:s("settings.toast.copyFailure",{message:l instanceof Error?l.message:"unknown"}),variant:"error"})}},[C,t,s]),lt=m.useCallback(async()=>{ae(!0);try{await T.mutateAsync()}catch{}finally{ae(!1)}},[T]),rt=m.useCallback(async()=>{ne(!0);try{await g.mutateAsync()}catch{}finally{ne(!1)}},[g]),$=i.isPending||!d&&i.isFetching;return m.useEffect(()=>{if($)return;const l=Array.from(r.current.values());if(l.length===0)return;const x=new IntersectionObserver(y=>{for(const P of y)if(P.isIntersecting){o(P.target.id);break}},{rootMargin:"-80px 0px -60% 0px",threshold:0});for(const y of l)x.observe(y);return()=>x.disconnect()},[$]),{activeSection:n,authErrors:We,authForm:f,authQuery:h,authSettings:j,clearingAll:_e,cleaning:qe,config:d,configPath:C,configQuery:i,confirmCleanupOpen:Ve,confirmClearAllOpen:Ie,defaultsSummary:Ge,errors:De,form:u,handleAuthReset:at,handleAuthSave:st,handleCleanupLogs:lt,handleClearAllLogs:rt,handleCopyPath:nt,handleInputChange:Ze,handleReset:tt,handleSave:et,handleSectionClick:c,isAuthDirty:Ue,isConfigDirty:Xe,isLoading:$,needsPassword:ze,protocolSummaryLabel:Qe,protocolChangesPending:Ye,saving:Ke,savingAuth:Je,sectionRefs:r,setAuthForm:D,setConfirmCleanupOpen:Be,setConfirmClearAllOpen:$e,setErrors:B,setForm:H,setSectionRef:a,t:s}}function ns(){var r,c;const{t:s}=R(),t=Dt(),n=Number(t.isConfigDirty)+Number(t.isAuthDirty),o=t.protocolChangesPending?s("settings.protocol.restartHint"):s("settings.overview.description");return e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(yt,{icon:e.jsx(ft,{className:"h-5 w-5","aria-hidden":"true"}),title:s("settings.title"),description:s("settings.description"),eyebrow:"Gateway Controls",breadcrumb:"Gateway / Settings",helper:o,badge:n>0?s("settings.overview.unsavedCount",{count:n}):void 0,actions:t.config?e.jsxs("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center",children:[e.jsx("div",{className:"rounded-full bg-secondary px-3.5 py-2 text-xs text-muted-foreground",children:t.protocolChangesPending?s("settings.protocol.restartWarning"):s("common.status.success")}),e.jsx(k,{variant:"outline",onClick:t.handleReset,disabled:t.saving||!t.isConfigDirty,className:"w-full sm:w-auto",children:s("common.actions.reset")}),e.jsx(k,{onClick:()=>void t.handleSave(),disabled:t.saving||!t.isConfigDirty,className:"w-full sm:w-auto",children:t.saving?s("common.actions.saving"):s("common.actions.save")})]}):null}),t.isLoading?e.jsx(A,{className:"bg-card/82",children:e.jsx(L,{className:"flex min-h-[220px] items-center justify-center",children:e.jsx(Fe,{})})}):t.config?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid gap-6 xl:grid-cols-[200px_1fr]",children:[e.jsx(Et,{activeSection:t.activeSection,onSelectSection:t.handleSectionClick}),e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(At,{configPath:t.configPath,defaultsSummary:t.defaultsSummary,form:t.form,protocolSummaryLabel:t.protocolSummaryLabel,protocolChangesPending:t.protocolChangesPending,isAuthDirty:t.isAuthDirty,isConfigDirty:t.isConfigDirty,authEnabled:((r=t.authSettings)==null?void 0:r.enabled)??!1,authUsername:(c=t.authSettings)==null?void 0:c.username}),e.jsx(Lt,{defaultsSummary:t.defaultsSummary,errors:t.errors,form:t.form,onInputChange:t.handleInputChange,onSetForm:t.setForm,sectionRef:t.setSectionRef("section-basics")}),e.jsx(Tt,{errors:t.errors,form:t.form,onSetForm:t.setForm,sectionRef:t.setSectionRef("section-protocol")}),e.jsx(Mt,{authErrors:t.authErrors,authForm:t.authForm,authLoading:t.authQuery.isPending||!t.authSettings&&t.authQuery.isFetching,authSettings:t.authSettings,needsPassword:t.needsPassword,onAuthReset:t.handleAuthReset,onAuthSave:()=>void t.handleAuthSave(),onSetAuthForm:t.setAuthForm,savingAuth:t.savingAuth,isAuthDirty:t.isAuthDirty,sectionRef:t.setSectionRef("section-security")}),e.jsx(Ot,{configPath:t.configPath,onCopyPath:()=>void t.handleCopyPath(),sectionRef:t.setSectionRef("section-config-file")}),e.jsx(Ft,{cleaning:t.cleaning,clearingAll:t.clearingAll,onOpenCleanup:()=>t.setConfirmCleanupOpen(!0),onOpenClearAll:()=>t.setConfirmClearAllOpen(!0),sectionRef:t.setSectionRef("section-cleanup")})]})]}),e.jsx(Ht,{isAuthDirty:t.isAuthDirty,isConfigDirty:t.isConfigDirty,protocolChangesPending:t.protocolChangesPending,onAuthReset:t.handleAuthReset,onAuthSave:()=>void t.handleAuthSave(),onReset:t.handleReset,onSave:()=>void t.handleSave(),saving:t.saving,savingAuth:t.savingAuth})]}):e.jsx(A,{className:"bg-card/82",children:e.jsx(L,{className:"pt-6",children:e.jsx("p",{className:"text-sm font-medium text-destructive",children:s("settings.toast.missingConfig")})})}),e.jsx(Le,{open:t.confirmCleanupOpen,onOpenChange:a=>{!a&&!t.cleaning&&t.setConfirmCleanupOpen(!1)},title:s("settings.cleanup.confirmTitle"),description:s("settings.cleanup.confirmDescription"),confirmLabel:t.cleaning?s("common.actions.cleaning"):s("common.actions.cleanup"),cancelLabel:s("common.actions.cancel"),loading:t.cleaning,onConfirm:async()=>{await t.handleCleanupLogs(),t.setConfirmCleanupOpen(!1)}}),e.jsx(Le,{open:t.confirmClearAllOpen,onOpenChange:a=>{!a&&!t.clearingAll&&t.setConfirmClearAllOpen(!1)},title:s("settings.cleanup.clearAllTitle"),description:s("settings.cleanup.clearAllWarning"),confirmLabel:t.clearingAll?s("settings.cleanup.clearingAll"):s("settings.cleanup.clearAll"),cancelLabel:s("common.actions.cancel"),loading:t.clearingAll,onConfirm:async()=>{await t.handleClearAllLogs(),t.setConfirmClearAllOpen(!1)}})]})}export{ns as default};
|