@vantaloom/runtime-darwin-arm64 0.10.6 → 0.10.7
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/VERSION +1 -1
- package/bin/easytier-cli +0 -0
- package/bin/easytier-core +0 -0
- package/bin/vantaloom-agent +0 -0
- package/bin/vantaloom-api +0 -0
- package/bin/vantaloom-browser +0 -0
- package/bin/vantaloomctl +0 -0
- package/cli/package.json +1 -1
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/web/404.html +1 -1
- package/web/__next.__PAGE__.txt +2 -2
- package/web/__next._full.txt +2 -2
- package/web/__next._head.txt +1 -1
- package/web/__next._index.txt +1 -1
- package/web/__next._tree.txt +1 -1
- package/web/_next/static/chunks/{04b1e90672998357.js → 175167e0ebf75b56.js} +1 -1
- package/web/_not-found/__next._full.txt +1 -1
- package/web/_not-found/__next._head.txt +1 -1
- package/web/_not-found/__next._index.txt +1 -1
- package/web/_not-found/__next._not-found/__PAGE__.txt +1 -1
- package/web/_not-found/__next._not-found.txt +1 -1
- package/web/_not-found/__next._tree.txt +1 -1
- package/web/_not-found.html +1 -1
- package/web/_not-found.txt +1 -1
- package/web/index.html +1 -1
- package/web/index.txt +2 -2
- /package/web/_next/static/{EcWYRFjEgCi8KtAfRmN8O → cS2KHagi5DlWBiBnsH7OF}/_buildManifest.js +0 -0
- /package/web/_next/static/{EcWYRFjEgCi8KtAfRmN8O → cS2KHagi5DlWBiBnsH7OF}/_clientMiddlewareManifest.json +0 -0
- /package/web/_next/static/{EcWYRFjEgCi8KtAfRmN8O → cS2KHagi5DlWBiBnsH7OF}/_ssgManifest.js +0 -0
|
@@ -49,4 +49,4 @@ ${e.detail}`:e.title;async function s(){try{await navigator.clipboard.writeText(
|
|
|
49
49
|
border-radius: 9999px;
|
|
50
50
|
background-clip: content-box;
|
|
51
51
|
}
|
|
52
|
-
</style>`,/<\/head>/i.test(t)?t.replace(/<\/head>/i,`${n}</head>`):`${n}${t}`},[r,t]);return(0,eb.jsx)("iframe",{title:e,sandbox:"allow-scripts",srcDoc:a,className:(0,eI.cn)("size-full border-0 bg-background",n)})}function Gp({file:e,value:t,labels:n}){let r=ew.useMemo(()=>{let n=e.bytes??(t?new TextEncoder().encode(t):[]),r=Math.min(n.length,4096),a=[];for(let e=0;e<r;e+=16){let t=Array.from({length:Math.min(16,r-e)},(t,r)=>n[e+r]??0);a.push({offset:e.toString(16).padStart(8,"0"),hex:t.map(e=>e.toString(16).padStart(2,"0")).join(" "),ascii:t.map(e=>e>=32&&e<=126?String.fromCharCode(e):".").join("")})}return a},[e.bytes,t]);return 0===r.length?(0,eb.jsx)("div",{className:"ui-text-body grid size-full place-items-center p-6 text-center text-muted-foreground",children:n.noContent}):(0,eb.jsx)("div",{className:"size-full overflow-auto bg-background p-3 ui-text-code",children:(0,eb.jsx)("div",{className:"grid min-w-max grid-cols-[5.5rem_30rem_1fr] gap-x-4",children:r.map(e=>(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:e.offset}),(0,eb.jsx)("span",{className:"font-mono text-foreground",children:e.hex}),(0,eb.jsx)("span",{className:"font-mono text-muted-foreground",children:e.ascii})]},e.offset))})})}function Gg({file:e,labels:t,onApprove:n}){return(0,eb.jsx)("div",{className:"grid size-full place-items-center bg-muted/20 p-6",children:(0,eb.jsxs)("div",{className:"grid max-w-md justify-items-center gap-3 text-center",children:[(0,eb.jsx)("div",{className:"grid size-10 place-items-center rounded-full border bg-background text-muted-foreground",children:(0,eb.jsx)(K7,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("h3",{className:"ui-text-body font-medium text-foreground",children:t.binaryTitle}),(0,eb.jsx)("p",{className:"ui-text-body text-muted-foreground",children:t.binaryDescription})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[Gs(e.size)&&(0,eb.jsx)(Bu,{variant:"outline",children:Gs(e.size)}),(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function Gx({labels:e}){return(0,eb.jsx)("div",{className:"ui-text-body grid size-full place-items-center p-6 text-center text-muted-foreground",children:e.unsupportedPreview})}function Gv({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=Go(e),o=e.src?e.src:t&&"svg"===Go(e)?`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`:void 0,l=r?.(e,t);return void 0!==l?(0,eb.jsx)("div",{"data-slot":"file-tab-custom-preview",className:(0,eI.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gm,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,eI.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(Gh,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,eI.cn)("grid size-full place-items-center overflow-auto bg-muted/20 p-6",a),children:(0,eb.jsx)("img",{src:o,alt:e.name,className:"max-h-full max-w-full rounded-lg border bg-background p-4"})}):"image"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-image-preview",className:(0,eI.cn)("grid size-full place-items-center overflow-auto bg-muted/20 p-6",a),children:(0,eb.jsx)("img",{src:o,alt:e.name,className:"max-h-full max-w-full rounded-md"})}):"video"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-video-preview",className:(0,eI.cn)("grid size-full place-items-center bg-muted/20 p-6",a),children:(0,eb.jsx)("video",{src:o,controls:!0,preload:"none",className:"max-h-full max-w-full rounded-md border bg-background"})}):(0,eb.jsx)(Gx,{labels:n})}function Gb({open:e,labels:t,currentView:n,currentMode:r,saving:a,modified:i,canSwitchView:o,canSwitchMode:l,canSave:s,canOpenHistory:c,onOpenChange:d,onToggleView:u,onToggleMode:f,onSave:h,onHistory:m}){let p=[o?{key:"view",label:"code"===n?t.preview:t.code,onClick:u,icon:"code"===n?(0,eb.jsx)(Ug,{className:"size-4"}):(0,eb.jsx)(uk,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(K9,{className:"size-4"}):(0,eb.jsx)(eN,{className:"size-4"})}:void 0,s?{key:"save",label:a?t.saving:t.save,onClick:h,disabled:a||!i,icon:(0,eb.jsx)(Gr,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Ge,{className:"size-4"})}:void 0].filter(e=>void 0!==e);return 0===p.length?null:(0,eb.jsx)("div",{"data-slot":"file-tab-floating-actions",className:"absolute right-3 bottom-3 z-20",children:(0,eb.jsxs)("div",{className:"relative size-8",children:[p.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,disabled:t.disabled,onClick:()=>{t.disabled||t.onClick()},className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0",t.disabled&&"opacity-45"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.actions,"aria-expanded":e,onClick:()=>d(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function Gy({file:e,value:t,defaultValue:n,onValueChange:r,mode:a,defaultMode:i="review",onModeChange:o,view:l,defaultView:s="code",onViewChange:c,modified:d=!1,onSave:u,onSaveError:f,largeBinaryThreshold:h=2097152,showHeader:m=!0,wrapLines:p=!1,renderPreview:g,onHistory:x,labels:v,className:b,editorClassName:y,previewClassName:w,headerClassName:j,...k}){var N;let S,C,M=ew.useMemo(()=>({...Ga,...v}),[v]),[E,O]=ew.useState(n??e.content??""),[P,z]=ew.useState(i),[I,A]=ew.useState(s),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),[L,$]=ew.useState(!1),F=ew.useRef(null),B=t??E,V=a??P,H=(N=l??I,(S=Gc(e)).includes(N)?N:S[0]),U=Go(e),q=Gc(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(Go(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=Go(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=Gs(e.size??B.length);async function J(){if(u&&!L){$(!0);try{await u(B),_(!1)}catch(e){f?.(e)}finally{$(!1)}}}return ew.useEffect(()=>{void 0===t&&O(n??e.content??""),R(!1),_(!1)},[n,e,t]),ew.useEffect(()=>{if(D)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof Node&&F.current?.contains(t)||_(!1)}},[D]),(0,eb.jsxs)("div",{ref:F,"data-slot":"file-tab-viewer","data-mode":V,"data-view":H,className:(0,eI.cn)("vtl-surface-panel relative grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",m?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",b),...k,children:[m&&(0,eb.jsxs)("div",{"data-slot":"file-tab-viewer-header",className:(0,eI.cn)("flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",j),children:[(0,eb.jsx)("span",{className:"grid size-5 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:"image"===U?(0,eb.jsx)(Gt,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Gn,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(K7,{className:"size-3.5"}):(0,eb.jsx)(v6,{className:"size-3.5"})}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 ui-text-kbd",children:Y.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[t>0&&(0,eb.jsx)("span",{className:"text-muted-foreground",children:M.pathSeparator}),(0,eb.jsx)("span",{className:(0,eI.cn)("truncate",t===Y.length-1?"font-medium text-foreground":"text-muted-foreground"),children:e})]},`${e}-${t}`))}),(0,eb.jsxs)("div",{className:"hidden shrink-0 items-center gap-1.5 sm:flex",children:[Z&&(0,eb.jsx)(Bu,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bu,{variant:"secondary",children:[(0,eb.jsx)(lK,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bu,{variant:"outline",children:[(0,eb.jsx)(K9,{className:"size-3"}),M.edit]}))]})]}),(0,eb.jsx)("div",{"data-slot":"file-tab-viewer-body",className:"min-h-0 overflow-hidden",children:X&&!T?(0,eb.jsx)(Gg,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(Gv,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(Gp,{file:e,value:B,labels:M}):(0,eb.jsx)(Gf,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&O(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(Gb,{open:D,labels:M,currentView:H,currentMode:V,saving:L,modified:d,canSwitchView:q,canSwitchMode:W&&"code"===H,canSave:K,canOpenHistory:!!(x&&e.path),onOpenChange:_,onToggleView:function(){var e;e="code"===H?"preview":"code",void 0===l&&A(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&z(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function Gw(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function Gj(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function Gk(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GN({tabs:e,defaultTabs:t=[],activeTabId:n,defaultActiveTabId:r,onActiveTabChange:a,onTabsChange:i,onCreateTab:o,onCloseTab:l,onTabReorder:s,onTabDetach:c,onExternalTabDrop:d,createActions:u=[],tabActions:f=[],reorderable:h=!0,detachable:m=!1,externalDropTypes:p=[],createLabel:g="New tab",moreLabel:x="More tab actions",closeLabel:v="Close tab",scrollLeftLabel:b="Scroll tabs left",scrollRightLabel:y="Scroll tabs right",tabListLabel:w="Open tabs",emptyContent:j,renderContent:k,showContent:N=!0,className:S,tabListClassName:C,contentClassName:M}){let[E,O]=ew.useState(t),P=ew.useRef(null),z=ew.useRef(null),[I,A]=ew.useState(),[T,R]=ew.useState(void 0),D=ew.useRef(void 0),[_,L]=ew.useState(void 0),[$,F]=ew.useState(!1),B=ew.useRef(void 0),V=ew.useRef(void 0),H=ew.useRef(!1),[U,q]=ew.useState(!1),[W,K]=ew.useState(!1),[G,X]=ew.useState(),Y=e??E,Z=Y.find(e=>!e.disabled),[J,Q]=ew.useState(r??Z?.id),ee=n??J,et=Y.find(e=>e.id===ee&&!e.disabled)??Z;ew.useEffect(()=>{!et&&Z&&void 0===n&&Q(Z.id)},[et,n,Z]);let en=ew.useCallback(t=>{void 0===e&&O(t),i?.(t)},[i,e]),er=ew.useCallback(e=>{D.current=e,R(e)},[]),ea=ew.useCallback(()=>{let e=z.current,t=new Map;if(!e)return t;for(let n of e.querySelectorAll("[data-tab-id]")){let e=n.getBoundingClientRect(),r=n.dataset.tabId;r&&t.set(r,{left:e.left,top:e.top})}return t},[]),ei=ew.useCallback((e,t=!0)=>{t&&(V.current=ea()),B.current=e,L(e)},[ea]),eo=ew.useCallback(()=>{let e=z.current;if(!e){q(!1),K(!1);return}let t=e.scrollWidth-e.clientWidth;q(e.scrollLeft>1),K(e.scrollLeft<t-1)},[]);function el(e){let t=z.current;if(!t)return;let n=Math.max(.7*t.clientWidth,160);t.scrollLeft+="left"===e?-n:n,window.requestAnimationFrame(eo)}ew.useEffect(()=>{F(!0)},[]),ew.useEffect(()=>{eo();let e=z.current;if(!e)return;let t=new ResizeObserver(eo);return t.observe(e),window.addEventListener("resize",eo),()=>{t.disconnect(),window.removeEventListener("resize",eo)}},[Y.length,eo]),ew.useLayoutEffect(()=>{let e=V.current,t=z.current;if(e&&t)for(let n of(V.current=void 0,t.querySelectorAll("[data-tab-id]"))){let t=n.dataset.tabId;if(!t)continue;let r=e.get(t);if(!r)continue;let a=n.getBoundingClientRect(),i=r.left-a.left,o=r.top-a.top;1>Math.abs(i)&&1>Math.abs(o)||n.animate([{transform:`translate(${i}px, ${o}px)`},{transform:"translate(0, 0)"}],{duration:150,easing:"cubic-bezier(0.2, 0, 0, 1)"})}},[_]);let es=ew.useCallback(e=>{let t=z.current;if(t)return Array.from(t.querySelectorAll("[data-tab-id]")).find(t=>t.dataset.tabId===e)},[]),ec=ew.useCallback((e,t)=>{let n=B.current??Y,r=n.findIndex(t=>t.id===e.tabId);if(-1===r)return;let a=t-e.offsetX,i=a+e.width,o=t>=e.currentX,l=n[r+1],s=n[r-1];if(o&&l&&!l.disabled){let e=es(l.id),t=e?.getBoundingClientRect();t&&i>=t.left+.7*t.width&&ei(Gk(n,r,r+1));return}if(!o&&s&&!s.disabled){let e=es(s.id),t=e?.getBoundingClientRect();t&&a<=t.right-.7*t.width&&ei(Gk(n,r,r-1))}},[es,Y,ei]);function ed(e){if(!d||0===p.length)return!1;let t=Array.from(e.dataTransfer.types);return p.some(e=>t.includes(e))}function eu(e){let t=z.current;if(!t)return{index:Y.length,left:0};let n=t.getBoundingClientRect(),r=Array.from(t.querySelectorAll("[data-tab-id]"));if(0===r.length)return{index:0,left:t.scrollLeft+8};for(let[a,i]of r.entries()){let r=i.getBoundingClientRect();if(e.clientX<r.left+r.width/2)return{index:a,left:r.left-n.left+t.scrollLeft}}let a=r[r.length-1].getBoundingClientRect();return{index:r.length,left:a.right-n.left+t.scrollLeft}}ew.useEffect(()=>{if(T)return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t,{once:!0}),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t)};function e(e){let t=D.current;if(!t)return;let n=e.clientX-t.startX,r=e.clientY-t.startY,a=t.dragging||Math.abs(n)>4||Math.abs(r)>4;a&&(e.preventDefault(),ec(t,e.clientX)),er({...t,currentX:e.clientX,currentY:e.clientY,dragging:a})}function t(e){let t=D.current;if(t?.dragging){e.preventDefault(),H.current=!0;let r=Y.find(e=>e.id===t.tabId),i=P.current?.getBoundingClientRect(),o=!!i&&(e.clientX<i.left||e.clientX>i.right||e.clientY<i.top||e.clientY>i.bottom);if(m&&c&&r&&o&&function(e,t){if(e.pinned)return!1;let r=Y.findIndex(t=>t.id===e.id);if(c?.(e,{tabs:Y,clientX:t.clientX,clientY:t.clientY,nativeEvent:t})===!1)return!1;let i=Y.filter(t=>t.id!==e.id);if(en(i),e.id===ee){let e=Gw(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){A(void 0),er(void 0),ei(void 0,!1);return}let l=B.current;l&&!(l.length===Y.length&&l.every((e,t)=>e.id===Y[t]?.id))&&(en(l),s?.(l))}A(void 0),er(void 0),ei(void 0,!1)}});let ef=et&&(k?.(et)??et.content??(0,eb.jsx)("div",{className:"grid min-h-44 place-items-center bg-muted/30 p-6 text-center text-muted-foreground",children:et.title})),eh=T?.dragging&&_?_:Y,em=T?.dragging?Y.find(e=>e.id===T.tabId):void 0,ep=T?.dragging&&em&&$?(0,ib.createPortal)((0,eb.jsxs)("div",{"data-slot":"multi-tab-drag-preview","aria-hidden":"true",className:"pointer-events-none fixed z-[100] flex h-9 min-w-0 items-center gap-1 rounded-t-lg border border-border bg-background px-2.5 text-foreground shadow-lg",style:{left:T.currentX-T.offsetX,top:T.top,width:T.width},children:[em.icon&&(0,eb.jsx)("span",{className:"grid size-4 shrink-0 place-items-center text-muted-foreground [&_svg]:size-3.5",children:em.icon}),(0,eb.jsx)("span",{className:"truncate ui-text-control font-medium",children:em.title}),em.modified&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-foreground/70"})]}),document.body):null;return(0,eb.jsxs)("div",{ref:P,"data-slot":"multi-tab-system",className:(0,eI.cn)("vtl-surface-panel grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden rounded-[var(--surface-panel-radius)] border",S),children:[(0,eb.jsxs)("div",{className:"relative flex min-w-0 shrink-0 items-end gap-1 border-b bg-muted/35 px-1.5 pt-1.5",children:[U&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":b,onClick:()=>el("left"),className:"mb-1 shrink-0",children:(0,eb.jsx)(mQ,{})}),(0,eb.jsxs)("div",{ref:z,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,eI.cn)("relative flex min-w-0 flex-1 items-end overflow-x-auto [scrollbar-width:none] data-[overflow=both]:[mask-image:linear-gradient(90deg,transparent,black_24px,black_calc(100%-24px),transparent)] data-[overflow=left]:[mask-image:linear-gradient(90deg,transparent,black_24px)] data-[overflow=right]:[mask-image:linear-gradient(90deg,black_calc(100%-24px),transparent)] [&::-webkit-scrollbar]:hidden",C),"data-overflow":U&&W?"both":U?"left":W?"right":void 0,onScroll:eo,onDragOver:function(e){ed(e)&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",X(eu(e)))},onDragLeave:function(e){if(!ed(e))return;let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||X(void 0)},onDrop:function(e){if(!ed(e))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let t=eu(e);X(void 0),d?.({tabs:Y,insertIndex:t.index,nativeEvent:e})},children:[eh.map((e,t)=>{let r=e.id===et?.id,i=eh[t+1],o=T?.dragging&&I===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==I;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsxs)("div",{onPointerDown:t=>(function(e,t){if(!h||e.disabled||0!==t.button)return;let n=t.currentTarget.getBoundingClientRect();A(e.id),ei(Y,!1),er({tabId:e.id,startX:t.clientX,startY:t.clientY,offsetX:t.clientX-n.left,top:n.top,width:n.width,currentX:t.clientX,currentY:t.clientY,dragging:!1})})(e,t),"data-slot":"multi-tab","data-tab-id":e.id,"data-state":r?"active":"inactive","data-dragging":I===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,eI.cn)("group/tab relative flex h-9 min-w-0 max-w-52 shrink-0 items-center gap-1 rounded-t-lg border border-b-0 px-2.5 transition-[border-color,background-color,color,box-shadow,outline-color] duration-150 ease-out",h&&!e.disabled&&"cursor-grab active:cursor-grabbing",r?"border-border bg-background text-foreground shadow-[0_-1px_0_var(--background)_inset]":"border-transparent bg-transparent text-muted-foreground hover:bg-background/70 hover:text-foreground",o&&"border-dashed border-border bg-muted/45 text-transparent shadow-none outline outline-1 outline-ring/30 [&_*]:opacity-0",e.disabled&&"pointer-events-none opacity-50"),children:[(0,eb.jsx)("button",{type:"button",role:"tab","aria-label":Gj(e.title),"aria-selected":r,disabled:e.disabled,onClick:t=>{var r;let i;if(H.current){H.current=!1,t.preventDefault();return}r=e.id,(i=Y.find(e=>e.id===r))&&!i.disabled&&(void 0===n&&Q(r),a?.(r))},className:"absolute inset-0 rounded-t-lg outline-none focus-visible:ring-2 focus-visible:ring-ring/50"}),(0,eb.jsxs)("div",{"aria-hidden":"true",className:"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-1.5",children:[e.icon&&(0,eb.jsx)("span",{className:"grid size-4 shrink-0 place-items-center text-muted-foreground [&_svg]:size-3.5",children:e.icon}),(0,eb.jsx)("span",{className:"truncate ui-text-control font-medium",children:e.title}),e.meta&&(0,eb.jsx)("span",{className:"shrink-0 ui-text-kbd text-muted-foreground",children:e.meta}),e.modified&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-foreground/70"})]}),!e.pinned&&(0,eb.jsx)("button",{type:"button",draggable:!1,onPointerDown:e=>e.stopPropagation(),"aria-label":e.closeLabel??(Gj(e.title)?`${v}: ${Gj(e.title)}`:v),onClick:()=>(function(e){if(e.pinned)return;let t=Y.findIndex(t=>t.id===e.id),r=Y.filter(t=>t.id!==e.id);if(en(r),l?.(e),e.id===ee){let e=Gw(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,eI.cn)("relative z-20 grid size-5 shrink-0 place-items-center rounded-md text-muted-foreground opacity-0 transition-all hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none group-hover/tab:opacity-100",r&&"opacity-100"),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]}),s&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"mb-2 h-4 w-px shrink-0 bg-border/80"})]},e.id)}),G?(0,eb.jsxs)("span",{"data-slot":"multi-tab-external-insert","aria-hidden":"true",className:"pointer-events-none absolute top-2 bottom-1 z-30 flex w-0 -translate-x-1/2 items-center justify-center",style:{left:G.left},children:[(0,eb.jsx)("span",{className:"h-full w-px rounded-full bg-foreground/80"}),(0,eb.jsx)("span",{className:"absolute top-0 size-1.5 rounded-full bg-foreground"})]}):null]}),(0,eb.jsxs)("div",{className:"mb-1 flex shrink-0 items-center gap-1",children:[W&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":y,onClick:()=>el("right"),children:(0,eb.jsx)(m0,{})}),u.length>0?(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,children:(0,eb.jsx)(lJ,{})})}),(0,eb.jsx)(yJ,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y5,{children:e.shortcut})]})]},t))})]}):(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,onClick:function(){let e=o?.();e&&(en([...Y,e]),e.disabled||(void 0===n&&Q(e.id),a?.(e.id)))},children:(0,eb.jsx)(lJ,{})}),f.length>0&&(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":x,children:(0,eb.jsx)(lY,{})})}),(0,eb.jsx)(yJ,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y5,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,eI.cn)("min-h-0 overflow-hidden",M),children:ef??j??(0,eb.jsx)("div",{"aria-hidden":"true",className:"min-h-44 rounded-lg border border-dashed bg-muted/30"})})]})}let GS=(0,ek.default)("ban",[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function GC({status:e}){return"done"===e?(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VN,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GS,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yM,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GM({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("div",{className:"h-1.5 w-16 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${n}%`}})}),(0,eb.jsxs)("span",{className:"shrink-0 text-[10px] tabular-nums text-muted-foreground",children:[e,"/",t]})]})}let GE={main:"主",subagent:"子"};function GO({node:e,depth:t,activeId:n}){let r=function e(t){if(!t.children||0===t.children.length)return"task"!==t.kind&&"subplan"!==t.kind?{done:0,total:0}:{done:+("done"===t.status),total:1};let n=0,r=0;for(let a of t.children){let t=e(a);n+=t.done,r+=t.total}return{done:n,total:r}}(e),a="phase"===e.kind,i=e.orchestration,o=void 0!==n&&e.id===n;return(0,eb.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("flex items-center gap-2 rounded-md px-1.5 py-1",o&&"bg-sky-teal/10 ring-1 ring-sky-teal/30"),style:{marginLeft:12*t},children:[(0,eb.jsx)(GC,{status:e.status}),(0,eb.jsx)("span",{className:(0,eI.cn)("min-w-0 flex-1 truncate text-[13px]","done"===e.status&&"text-muted-foreground line-through",o&&"font-medium text-foreground"),title:e.detail||e.title,children:e.title}),a&&i?(0,eb.jsxs)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:[GE[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GM,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(GO,{node:e,depth:t+1,activeId:n},e.id))]})}function GP({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState("");ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{let a=await sR(e,t);n&&(r(a.planState),void 0!==a.planDoc&&i(a.planDoc))};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let o=n?.activePath?.length?n.activePath[n.activePath.length-1]:void 0;return(0,eb.jsx)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:(0,eb.jsxs)(mu,{defaultValue:"doc",className:"flex min-h-0 flex-1 flex-col gap-0",children:[(0,eb.jsx)("div",{className:"shrink-0 border-b px-2 py-1.5",children:(0,eb.jsxs)(my,{children:[(0,eb.jsx)(mw,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mw,{value:"tree",children:"执行树"})]})}),(0,eb.jsx)(mj,{value:"doc",className:"min-h-0 flex-1",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:a.trim()?(0,eb.jsx)(VZ,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mj,{value:"tree",className:"min-h-0 flex-1",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:n?.tree?(0,eb.jsx)(GO,{node:n.tree,depth:0,activeId:o}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]})})}function Gz({conversationId:e,ownerMachineId:t,initialPath:n}){let[r,a]=ew.useState([]),[i,o]=ew.useState(n),[l,s]=ew.useState("");return ew.useEffect(()=>{if(!e)return;let n=!0,r=async()=>{let r=await s_(e,t);if(!n)return;let i=r.filter(e=>e.startsWith("plan/specs/"));a(i),o(e=>e??i[0])};r();let i=window.setInterval(r,1200);return()=>{n=!1,window.clearInterval(i)}},[e,t]),ew.useEffect(()=>{if(!e||!i)return void s("");let n=!0,r=async()=>{try{let r=await sD(e,i,t);n&&s(r.content)}catch{n&&s("")}};r();let a=window.setInterval(r,1200);return()=>{n=!1,window.clearInterval(a)}},[e,t,i]),(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsx)("div",{className:"flex shrink-0 flex-wrap gap-1 border-b px-2 py-1.5",children:0===r.length?(0,eb.jsx)("span",{className:"px-1 py-1 text-xs text-muted-foreground/70",children:"尚无规范文档"}):r.map(e=>(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors",e===i?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60"),onClick:()=>o(e),children:[(0,eb.jsx)(uC,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(VZ,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}let GI=(0,ek.default)("coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]),GA=(0,ek.default)("file-pen-line",[["path",{d:"m18.226 5.226-2.52-2.52A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.351",key:"1k2beg"}],["path",{d:"M21.378 12.626a1 1 0 0 0-3.004-3.004l-4.01 4.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"2t3380"}],["path",{d:"M8 18h1",key:"13wk12"}]]),GT=(0,ek.default)("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]),GR=(0,ek.default)("loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]),GD=(0,ek.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);function G_(e,t){return e?eR(`/v1/remote/${e}${t}`):eR(t)}async function GL(e,t){let{signal:n,timeoutMs:r=8e3}=t??{},a=new AbortController,i=r>0?setTimeout(()=>a.abort(),r):void 0;n&&n.addEventListener("abort",()=>a.abort(),{once:!0});try{let t=await fetch(G_(e,"/v1/extensions"),{cache:"no-store",signal:a.signal});if(!t.ok)throw Error(`Extensions API error: ${t.status}`);return await t.json()}finally{i&&clearTimeout(i)}}async function G$(e,t,n){let r=await fetch(G_(e,t),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:void 0===n?void 0:JSON.stringify(n)});if(!r.ok)throw Error(`Extensions API error: ${r.status}`);let a=await r.text();return a?JSON.parse(a):{}}async function GF(e,t){return G$(e,"/v1/extensions/browser/install",{variant:t})}async function GB(e,t){return G$(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function GV(e){return G$(e,"/v1/extensions/browser/uninstall")}async function GH(e,t){return G$(e,"/v1/extensions/browser/enable",{enabled:t})}async function GU(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(G_(e,"/v1/browser/info"),{cache:"no-store",signal:r.signal});if(!t.ok)return null;let n=await t.text(),a=n?JSON.parse(n):{};return{running:!!a.running,monitoring:!!a.monitoring}}catch{return null}finally{a&&clearTimeout(a)}}async function Gq(e,t){return{monitoring:!!(await G$(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let GW={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function GK(e){if(!e.children||0===e.children.length)return"task"!==e.kind&&"subplan"!==e.kind?{done:0,total:0}:{done:+("done"===e.status),total:1};let t=0,n=0;for(let r of e.children){let e=GK(r);t+=e.done,n+=e.total}return{done:t,total:n}}function GG(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=GG(n,t);if(e)return e}}}function GX({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 flex-1 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${n}%`}})}),(0,eb.jsxs)("span",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground",children:[e,"/",t]})]})}function GY({state:e}){let{phase:t,task:n}=function(e){let t,n=e.activePath??[];if(!e.tree||0===n.length)return{};for(let r of n){let n=GG(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?GG(e.tree,r):void 0}}(e),r=e.tree?GK(e.tree):{done:0,total:0},a=t?GK(t):void 0,i=r.total>0?Math.round(r.done/r.total*100):0,o=n?.status==="in_progress";return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(GT,{}),label:"任务进度"}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2 px-3 pb-2 text-[13px]",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:"当前阶段"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:t?.title??GW[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(GX,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}):null,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-muted-foreground",title:n.detail||n.title,children:n.title})]}):null,(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:"总体进度"}),(0,eb.jsxs)("span",{className:"ml-auto font-medium tabular-nums",children:[i,"%"]})]}),(0,eb.jsx)("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${i}%`}})})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"})]})}function GZ({icon:e,label:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-3 pb-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/70 [&_svg]:size-3.5",children:[e,(0,eb.jsx)("span",{children:t})]})}function GJ(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await GL(void 0,{signal:e,timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);n&&n.installed?n.running?t("running"):t(e=>"starting"===e?"starting":"stopped"):t("missing")}catch{t("missing")}},[]);ew.useEffect(()=>{let e=!0,t=new AbortController,n=()=>{e&&a(t.signal)};n();let r=window.setInterval(n,1e4);return()=>{e=!1,t.abort(),window.clearInterval(r)}},[a]);let i=ew.useCallback(async()=>{if(!n){r(!0),t("starting");try{await GH(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GL(void 0,{timeoutMs:6e3});if(e.extensions.find(e=>"browser"===e.id)?.running)return void t("running")}catch{}}}catch{}finally{r(!1),await a()}}},[n,a]);return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(Uh,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(GQ,{online:!0}):"starting"===e?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(GQ,{online:!1}),(0,eb.jsx)("span",{className:"truncate font-medium",children:"running"===e?"运行中":"starting"===e?"启动中":"stopped"===e?"已停止":"missing"===e?"未安装":"—"}),(0,eb.jsx)("span",{className:"ml-auto shrink-0",children:"stopped"===e?(0,eb.jsxs)("button",{type:"button",onClick:()=>void i(),className:"inline-flex items-center gap-1 rounded-md border border-border/70 px-1.5 py-0.5 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[(0,eb.jsx)(VN,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function GQ({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,eI.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function G0({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xk();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sz(e,t),sA(e,t).catch(()=>[]),sT(e,t).catch(()=>[])]);if(!n)return;r(a),i(o),l(s)}catch{}};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let c=ew.useMemo(()=>new Map(s.map(e=>[e.id,e])),[s]),d=e=>"local"===e||c.get(e)?.status==="online",u=e=>"local"===e?c.get("local")?.name??"本地":c.get(e)?.name??e,f=t??n?.conversation.ownerMachineId??"local",h=(n?.conversation.settings?.hosts??[]).filter(Boolean),m=n?.conversation.runUsage,p=n?.conversation.status==="working",g=(m?.cachedInputTokens??0)+(m?.cacheCreationInputTokens??0),{additions:x,deletions:v}=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=0,r=0;for(let a=Math.max(0,t);a<e.length;a+=1){let t=e[a],i=t?.additions??t?.meta?.additions,o=t?.deletions??t?.meta?.deletions;"number"==typeof i&&(n+=i),"number"==typeof o&&(r+=o)}return{additions:n,deletions:r}}(n?.events??[]),b=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=new Set;for(let r=Math.max(0,t);r<e.length;r+=1){let t=e[r];if(t?.kind==="subagent"&&Array.isArray(t.subagents))for(let e of t.subagents)e?.id&&n.add(e.id)}return n}(n?.events??[]),y=function e(t,n=0,r=[]){for(let a of t)r.push({node:a,depth:n}),a.children&&a.children.length>0&&e(a.children,n+1,r);return r}(a.filter(e=>b.has(e.id))),w=n?.conversation.planState;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col overflow-auto rounded-[inherit] bg-background text-sm",children:[(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(ub,{}),label:"环境信息"}),(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5 px-3 pb-2 text-[13px]",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-foreground/90",children:[(0,eb.jsx)(eP,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"运行于"}),(0,eb.jsx)(GQ,{online:d(f)}),(0,eb.jsx)("span",{className:"truncate font-medium",children:u(f)})]}),(0,eb.jsxs)("div",{className:"flex items-start gap-2",children:[(0,eb.jsx)(GD,{className:"mt-0.5 size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"mt-0.5 shrink-0 text-muted-foreground",children:"可访问"}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-wrap gap-x-3 gap-y-1",children:0===h.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"—"}):h.map(e=>(0,eb.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(GQ,{online:d(e)}),(0,eb.jsx)("span",{className:"truncate",children:u(e)})]},e))})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(GA,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"本轮变更"}),(0,eb.jsxs)("span",{className:"font-medium text-emerald-600 dark:text-emerald-400",children:["+",x]}),(0,eb.jsxs)("span",{className:"font-medium text-rose-600 dark:text-rose-400",children:["-",v]}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:"行"})]}),(0,eb.jsx)(GJ,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(GY,{state:w}):null,(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(uy,{}),label:"子智能体"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===y.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"本轮未释放子智能体"}):y.map(({node:e,depth:t})=>{let n="failed"===e.status;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",style:{paddingLeft:12*t},children:[e.running?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fg.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}),(0,eb.jsx)("span",{className:"truncate",children:e.subagentName||e.title||e.subagentType||"子智能体"}),(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-muted-foreground/70",children:e.running?"运行中":n?"失败":"已完成"})]},e.id)})}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(uO,{}),label:"后台任务"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===o.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"本轮无后台任务"}):o.map(e=>{let t="failed"===e.status||"timeout"===e.status,n="unknown"===e.status;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[e.running?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hE,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fg.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}),(0,eb.jsx)("span",{className:"truncate font-mono text-[12px]",title:e.command,children:e.command||"(命令)"}),e.orphaned?(0,eb.jsx)("span",{className:"shrink-0 rounded bg-amber-500/15 px-1 text-[10px] font-medium text-amber-600 dark:text-amber-400",title:"该后台进程脱离了本轮但仍在运行",children:"脱离"}):null,(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-muted-foreground/70",children:e.running?"运行中":n?"状态未知":t?"timeout"===e.status?"超时":"失败":"已完成"})]},e.id)})}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(GI,{}),label:p?"本轮消耗":"消耗额度"}),(0,eb.jsx)("div",{className:"grid grid-cols-3 gap-2 px-3 pb-3",children:[{label:"输入",value:m?.inputTokens},{label:"输出",value:m?.outputTokens},{label:"缓存",value:g}].map(e=>{let t;return(0,eb.jsxs)("div",{className:"rounded-lg border border-border/60 bg-muted/30 px-2 py-1.5",children:[(0,eb.jsx)("div",{className:"text-[11px] text-muted-foreground",children:e.label}),(0,eb.jsx)("div",{className:"font-mono text-sm font-medium tabular-nums",children:m?(t=e.value??0)>=1e6?`${(t/1e6).toFixed(2)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t):"—"})]},e.label)})})]})}let G1="application/vnd.vantaloom.canvas-node",G2="application/vnd.vantaloom.canvas-tab",G5="application/vnd.vantaloom.dashboard-widget",G4="application/vnd.vantaloom.workspace-card";var G3=e.i(78737);let G6=(0,ek.default)("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),G8=(0,ek.default)("smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]),G7=(0,ek.default)("tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]),G9=[{id:"phone",label:"Phone",width:390,userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"},{id:"tablet",label:"Tablet",width:820,userAgent:"Mozilla/5.0 (iPad; CPU OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"},{id:"desktop",label:"Desktop",width:1200,userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}],Xe=[{id:"adaptive",label:"自适应",adaptive:!0},{id:"16:9",label:"16:9",value:16/9},{id:"4:3",label:"4:3",value:4/3},{id:"3:2",label:"3:2",value:1.5},{id:"1:1",label:"1:1",value:1},{id:"9:16",label:"9:16",value:9/16}],Xt={urlLabel:"URL",urlPlaceholder:"https://example.com",navigate:"Navigate",actions:"Browser view options",devices:"User agent",ratios:"Viewport ratio",back:"Back",forward:"Forward",reload:"Reload preview",previewTitle:"Browser preview"};function Xn(e,t,n){return e.find(e=>e.id===t)??n}function Xr({id:e}){return"phone"===e?(0,eb.jsx)(G8,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(G7,{className:"size-4"}):(0,eb.jsx)(eP,{className:"size-4"})}function Xa({url:e,defaultUrl:t="https://vantaloom.local/workspace",onUrlChange:n,onNavigate:r,onBack:a,onForward:i,device:o,defaultDevice:l="desktop",onDeviceChange:s,ratio:c,defaultRatio:d="adaptive",onRatioChange:u,devices:f=G9,ratios:h=Xe,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...Xt,...x}),[x]),[k,N]=ew.useState(t),[S,C]=ew.useState(e??t),[M,E]=ew.useState(()=>[e??t]),[O,P]=ew.useState(0),[z,I]=ew.useState(l),[A,T]=ew.useState(d),[R,D]=ew.useState(!1),[_,L]=ew.useState(0),$=ew.useRef(null),F=ew.useId(),[B,V]=function(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useEffect(()=>{let t=e.current;if(!t)return;function r(e){t&&n(e??{width:t.clientWidth,height:t.clientHeight})}r();let a=new ResizeObserver(e=>{let t=e[0];t?r({width:t.contentRect.width,height:t.contentRect.height}):r()});return a.observe(t),()=>a.disconnect()},[]),[e,t]}(),H=e??k,U=Xn(f,o??z,f[0]??G9[0]),q=Xn(h,c??A,h[0]??Xe[0]),W=V.width>0&&V.height>0,K=q.adaptive||"adaptive"===q.id,G=q.value??16/9,X=K&&V.width||U.width,Y=K?V.height||U.width/G:X/G,Z=(W?V.width/V.height:1)<=G,J=Math.max(1,Math.round(W?K||Z?V.width:V.height*G:X)),Q=Math.max(1,Math.round(W?K?V.height:Z?V.width/G:V.height:Y)),ee=J/X,et=ew.useMemo(()=>({url:H,device:U,ratio:q,viewport:{width:J,height:Q,scale:ee}}),[U,q,H,ee,Q,J]);function en(t,a={history:"push"}){void 0===e&&N(t),"none"!==a.history&&E(e=>{let n=e.slice(0,O+1);return n[n.length-1]===t?n:(P(n.length),[...n,t])}),n?.(t),r?.(t)}return ew.useEffect(()=>{C(e??k)},[k,e]),ew.useEffect(()=>{if(R)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof Node&&$.current?.contains(t)||D(!1)}},[R]),(0,eb.jsxs)("div",{ref:$,"data-slot":"browser-tab-viewer","data-device":U.id,"data-ratio":q.id,className:(0,eI.cn)("vtl-surface-panel relative grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",g?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",v),...w,children:[g&&(0,eb.jsxs)("div",{"data-slot":"browser-tab-viewer-header",className:(0,eI.cn)("flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",b),children:[(0,eb.jsx)("span",{className:"grid size-5 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:(0,eb.jsx)(G6,{className:"size-3.5"})}),(0,eb.jsxs)("form",{onSubmit:function(e){let t;e.preventDefault();let n=(t=S.trim())?/^[a-z][a-z\d+\-.]*:\/\//i.test(t)?t:/^(localhost|127\.0\.0\.1|\[::1\])(?::\d+)?(?:\/|$)/i.test(t)?`http://${t}`:`https://${t}`:"";C(n),en(n)},className:"min-w-0 flex-1",children:[(0,eb.jsx)("label",{className:"sr-only",htmlFor:F,children:j.urlLabel}),(0,eb.jsx)(eA,{id:F,value:S,onChange:e=>C(e.target.value),placeholder:j.urlPlaceholder,className:"h-5 rounded-md border bg-background px-2 shadow-none ui-text-kbd",spellCheck:!1})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.back,disabled:O<=0,onClick:function(){if(O<=0)return;let e=O-1,t=M[e];t&&(P(e),C(t),en(t,{history:"none"}),a?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(G3.ArrowLeftIcon,{className:"size-3.5"})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.forward,disabled:O>=M.length-1,onClick:function(){if(O>=M.length-1)return;let e=O+1,t=M[e];t&&(P(e),C(t),en(t,{history:"none"}),i?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(ej.ArrowRightIcon,{className:"size-3.5"})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.reload,onClick:()=>L(e=>e+1),className:"size-5 rounded-md",children:(0,eb.jsx)(bi,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,eI.cn)("grid min-h-0 place-items-center overflow-hidden bg-muted/20",y),children:(0,eb.jsx)("div",{"data-slot":"browser-tab-viewer-viewport",className:"overflow-hidden rounded-lg border bg-background shadow-sm",style:{width:J,height:Q},children:p?p(et):(0,eb.jsx)("iframe",{title:j.previewTitle,src:m?void 0:H,srcDoc:m,sandbox:"allow-forms allow-modals allow-popups allow-same-origin allow-scripts",className:"size-full border-0 bg-background"},`${_}-${H}-${U.id}-${q.id}`)})}),(0,eb.jsxs)("div",{"data-slot":"browser-tab-floating-actions",className:"absolute right-3 bottom-3 z-20",children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-popover absolute right-0 bottom-10 grid w-56 gap-3 rounded-[var(--surface-popover-radius)] border p-3 transition-[opacity,transform] duration-150",R?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0"),children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"text-muted-foreground ui-text-kbd",children:j.devices}),(0,eb.jsx)("div",{className:"flex gap-1.5",children:f.map(e=>(0,eb.jsx)(ez.Button,{type:"button",variant:U.id===e.id?"default":"outline",size:"icon-sm","aria-label":e.label,title:e.label,className:"rounded-full",onClick:()=>{let t;return t=Xn(f,e.id,U),void(void 0===o&&I(t.id),s?.(t.id,t))},children:(0,eb.jsx)(Xr,{id:e.id})},e.id))})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"text-muted-foreground ui-text-kbd",children:j.ratios}),(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.map(e=>(0,eb.jsx)(ez.Button,{type:"button",variant:q.id===e.id?"default":"outline",size:"xs",className:"h-7 rounded-full px-2.5 ui-text-kbd",onClick:()=>{let t;return t=Xn(h,e.id,q),void(void 0===c&&T(t.id),u?.(t.id,t))},children:e.label},e.id))})]})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":j.actions,"aria-expanded":R,onClick:()=>D(e=>!e),className:"rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let Xi=(0,ek.default)("monitor-off",[["path",{d:"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2",key:"k0q8oc"}],["path",{d:"M22 15V5a2 2 0 0 0-2-2H9",key:"cp1ac0"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),Xo=(0,ek.default)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);function Xl({frame:e,cursor:t,connection:n,takeover:r,onTakeoverChange:a,onInput:i,onReconnect:o,machines:l,selectedMachineId:s,onSelectMachine:c,onStartBrowser:d,starting:u,monitoring:f,onMonitoringChange:h,className:m}){let p=ew.useRef(null),g=ew.useRef(null),x=ew.useRef(null),v=ew.useRef(t??null),b=ew.useRef(0),y=ew.useRef(!1),[w,j]=ew.useState(!1),k=ew.useCallback(()=>{let e=p.current,t=x.current;if(!e||!t)return;let n=e.getContext("2d");if(!n)return;n.drawImage(t,0,0,e.width,e.height);let r=v.current;if(!r)return;let a=Math.max(9,e.width/110);n.save(),n.beginPath(),n.arc(r.x,r.y,a,0,2*Math.PI),n.fillStyle="rgba(255,45,85,0.35)",n.fill(),n.lineWidth=Math.max(2,a/4),n.strokeStyle="rgba(255,255,255,0.95)",n.stroke(),n.beginPath(),n.arc(r.x,r.y,Math.max(2.5,.32*a),0,2*Math.PI),n.fillStyle="rgba(255,45,85,0.95)",n.fill(),n.restore()},[]);function N(t){let n=p.current;if(!n)return null;let r=n.getBoundingClientRect();if(0===r.width||0===r.height)return null;let a=(e?.width||n.width)/r.width,i=(e?.height||n.height)/r.height;return{x:Math.round((t.clientX-r.left)*a),y:Math.round((t.clientY-r.top)*i)}}function S(e,t){r&&i&&(e.preventDefault(),i({kind:"key",type:t,key:e.key}),"keyDown"===t&&1===e.key.length&&i({kind:"key",type:"char",key:e.key,text:e.key}))}ew.useEffect(()=>{let t=p.current;if(!t||!e?.b64)return;let n=new Image;return g.current=n,n.onload=()=>{if(g.current!==n)return;let r=e.width||n.naturalWidth,a=e.height||n.naturalHeight;t.width!==r&&(t.width=r),t.height!==a&&(t.height=a),x.current=n,k()},n.src=`data:image/jpeg;base64,${e.b64}`,()=>{n.onload=null,g.current===n&&(g.current=null)}},[e,k]),ew.useEffect(()=>{v.current=t??null,k()},[t,k]);let C="streaming"===n||!!e;return(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-panel relative flex size-full min-h-0 flex-col overflow-hidden",m),"data-slot":"live-browser-view",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd shrink-0",children:"浏览器"}),(0,eb.jsx)("div",{className:"min-w-0 flex-1",children:l.length>0?(0,eb.jsx)("select",{value:s??"",onChange:e=>c?.(e.target.value),className:"h-6 w-full max-w-[16rem] truncate rounded-md border bg-background px-2 ui-text-kbd",children:l.map(e=>(0,eb.jsxs)("option",{value:e.id,disabled:!e.running,children:[e.label,e.running?"":"(未运行)"]},e.id))}):(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"无可用浏览器"})}),h?(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:f?"default":"outline",className:"h-6 gap-1 rounded-md px-2 ui-text-kbd","aria-pressed":!!f,onClick:()=>h(!f),title:f?"浏览器监视:开启(有头实时画面,会打开一个真实浏览器窗口)。点击关闭后仅在 agent 每次操作后显示一帧。":"浏览器监视:关闭(仅在 agent 每次操作后显示一帧)。点击开启有头实时画面,会打开一个真实浏览器窗口。",children:[f?(0,eb.jsx)(eP,{className:"size-3.5"}):(0,eb.jsx)(Xi,{className:"size-3.5"}),"监视"]}):null,(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:r?"default":"outline",className:"h-6 gap-1 rounded-md px-2 ui-text-kbd","aria-pressed":r,onClick:()=>a(!r),disabled:"streaming"!==n,title:r?"切换到观看模式":"接管:在画面里直接操作",children:[r?(0,eb.jsx)(lW,{className:"size-3.5"}):(0,eb.jsx)(lZ,{className:"size-3.5"}),r?"接管中":"观看"]}),"error"===n&&o?(0,eb.jsx)(ez.Button,{type:"button",size:"icon-xs",variant:"ghost",className:"size-6 rounded-md","aria-label":"重新连接",onClick:o,children:(0,eb.jsx)(Xo,{className:"size-3.5"})}):null]}),(0,eb.jsxs)("div",{className:"relative grid min-h-0 flex-1 place-items-center overflow-hidden bg-black/85",children:[C?(0,eb.jsx)("canvas",{ref:p,tabIndex:r?0:-1,onPointerDown:function(e){if(!r||!i)return;let t=N(e);t&&(y.current=!0,e.currentTarget.setPointerCapture(e.pointerId),p.current?.focus(),i({kind:"mouse",type:"mousePressed",button:"left",...t}))},onPointerUp:function(e){if(!r||!i)return;let t=N(e);y.current=!1;try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}t&&i({kind:"mouse",type:"mouseReleased",button:"left",...t})},onPointerMove:function(e){if(!r||!i)return;let t=performance.now();if(t-b.current<33)return;b.current=t;let n=N(e);n&&i({kind:"mouse",type:"mouseMoved",button:y.current?"left":"none",...n})},onKeyDown:e=>S(e,"keyDown"),onKeyUp:e=>S(e,"keyUp"),onFocus:()=>j(!0),onBlur:()=>j(!1),className:(0,eI.cn)("max-h-full max-w-full object-contain outline-none",r?"cursor-crosshair":"cursor-default")}):(0,eb.jsx)("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:"connecting"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-5 animate-spin"}),(0,eb.jsx)("span",{children:"正在连接浏览器…"})]}):"error"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"连接浏览器失败"}),o?(0,eb.jsx)(ez.Button,{type:"button",size:"xs",variant:"outline",onClick:o,children:"重试"}):null]}):u?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-5 animate-spin"}),(0,eb.jsx)("span",{children:"正在启动浏览器…"})]}):0===l.length?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"未安装浏览器"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/70",children:"请在「官方扩展」页面安装 Vantaloom 浏览器"})]}):d?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器已停止"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:d,children:[(0,eb.jsx)(VN,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"等待 agent 操作后显示画面"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:()=>h(!0),children:[(0,eb.jsx)(eP,{className:"size-3.5"}),"开启浏览器监视以查看实时画面"]})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器未运行"})]})}),r&&C?(0,eb.jsxs)("div",{className:"pointer-events-none absolute inset-0",children:[(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-0 rounded-sm ring-2 ring-inset transition-colors",w?"ring-hot-pink":"ring-hot-pink/50")}),(0,eb.jsxs)("span",{className:"absolute left-2 top-2 rounded bg-hot-pink/90 px-1.5 py-0.5 text-[10px] font-medium text-white",children:["接管中",w?"":"(点击画面以捕获键盘)"]})]}):null]})]})}function Xs(e,t){return e?eR(`/v1/remote/${e}/browser${t}`):eR(`/v1/browser${t}`)}async function Xc(e,t){try{await fetch(Xs(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function Xd({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xk(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await GL(t,{timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);if(!r||!r.installed)return null;return{id:e,machineId:t,label:n,installed:r.installed,running:r.running}}catch{return null}}async function i(){let e=[{id:"",machineId:void 0,label:"本机"}];for(let t of n)t.isLocal||"online"===t.status&&e.push({id:t.id,machineId:t.id,label:t.name||t.id});let i=await Promise.all(e.map(e=>r(e.id,e.machineId,e.label)));t||a(i.filter(e=>null!==e))}i();let o=window.setInterval(i,1e4);return()=>{t=!0,window.clearInterval(o)}},[e,n,t]),r}(e,n),[i,o]=ew.useState(""),[l,s]=ew.useState(!1),[c,d]=ew.useState(!1),[u,f]=ew.useState(!1);ew.useEffect(()=>{0===a.length||a.some(e=>e.id===i)||o((a.find(e=>e.running)??a[0]).id)},[a,i]);let h=a.find(e=>e.id===i),m=!!h?.running;ew.useEffect(()=>{!m&&l&&s(!1)},[m,l]);let{frame:p,cursor:g,connection:x,reconnect:v}=function(e){let{machineId:t,enabled:n}=e,[r,a]=ew.useState(null),[i,o]=ew.useState(null),[l,s]=ew.useState("idle"),[c,d]=ew.useState(0),u=ew.useCallback(()=>{d(e=>e+1)},[]);return ew.useEffect(()=>{let e;if(!n){s("idle"),a(null),o(null);return}let r=!1,i=new AbortController;async function l(){s("connecting");try{let e=await fetch(Xs(t,"/screencast"),{cache:"no-store",headers:{Accept:"text/event-stream"},signal:i.signal});if(r)return;if(404===e.status||409===e.status){s("no-browser"),c();return}if(!e.ok||!e.body){s("error"),c();return}let n=e.body.getReader(),l=new TextDecoder,d="";for(s("streaming");;){let{value:e,done:t}=await n.read();if(r||t)break;let i=(d+=l.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==i;){let e=d.slice(0,i);d=d.slice(i+2),function(e){let t=e.split("\n").filter(e=>e.startsWith("data:")).map(e=>e.slice(5).trimStart());if(0===t.length)return;let n=t.join("\n");if(n&&"[DONE]"!==n)try{let e=JSON.parse(n);"frame"===e.type&&e.b64?a({b64:e.b64,width:e.meta?.width??0,height:e.meta?.height??0}):"cursor"===e.type&&"number"==typeof e.x&&"number"==typeof e.y&&o({x:e.x,y:e.y})}catch{}}(e),i=d.indexOf("\n\n")}}r||(s("connecting"),c())}catch{if(r||i.signal.aborted)return;s("error"),c()}}function c(){r||(e=setTimeout(()=>{r||l()},1500))}return l(),()=>{r=!0,i.abort(),e&&clearTimeout(e)}},[t,n,c]),{frame:r,cursor:i,connection:l,reconnect:u}}({machineId:h?.machineId,enabled:e&&m});ew.useEffect(()=>{if(!e||!m)return void f(!1);let t=!1;return GU(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{Gq(h?.machineId,e).then(e=>{f(e.monitoring),v()}).catch(()=>{})},[h,v]),y=a.map(e=>({id:e.id,machineId:e.machineId,label:e.label,running:e.running})),w=ew.useCallback(e=>{Xc(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await GH(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GL(h?.machineId,{timeoutMs:6e3});if(e.extensions.find(e=>"browser"===e.id)?.running)break}catch{}}}catch{}finally{d(!1),r(e=>e+1)}}},[h,c]);return(0,eb.jsx)(Xl,{cursor:g,className:t,frame:p,connection:m?x:"no-browser",takeover:l,onTakeoverChange:s,onInput:w,onReconnect:v,machines:y,selectedMachineId:i,onSelectMachine:o,onStartBrowser:h&&!m?()=>void j():void 0,starting:c,monitoring:u,onMonitoringChange:m?b:void 0})}function Xu({defaultUrl:e,className:t}){let{machines:n}=xk(),[r,a]=ew.useState(!1);return(ew.useEffect(()=>{let e=!1;async function t(){let t=[void 0];for(let e of n)e.isLocal||"online"===e.status&&t.push(e.id);let r=await Promise.all(t.map(async e=>{try{let t=await GL(e,{timeoutMs:6e3});return!!t.extensions.find(e=>"browser"===e.id)?.running}catch{return!1}}));e||a(r.some(Boolean))}t();let r=window.setInterval(t,12e3);return()=>{e=!0,window.clearInterval(r)}},[n]),r)?(0,eb.jsx)(Xd,{active:!0,className:t}):(0,eb.jsx)(Xa,{className:t,defaultUrl:e})}let Xf=[{policyNumber:3,name:"Allow HTTP Traffic",sourceZone:"Trust",sourceIPs:["192.168.1.0/24","10.0.0.0/8"],destinationZone:"Trust",destinationIPs:["192.168.2.0/24"],tags:["Web Access","Internal"],action:"allow",description:"Permits HTTP traffic from internal network"},{policyNumber:5,name:"Block Suspicious IPs",sourceZone:"Untrust",sourceIPs:["203.0.113.0/24","198.51.100.0/24"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Blocking","Security"],action:"deny",description:"Blocks known malicious IP ranges"},{policyNumber:9,name:"SSH Access Control",sourceZone:"Trust",sourceIPs:["172.16.0.0/12"],destinationZone:"Trust",destinationIPs:["10.50.0.0/16"],tags:["Admin Access","VPN"],action:"allow",description:"Restricted SSH access for admin network"},{policyNumber:12,name:"Database Port Protection",sourceZone:"Untrust",sourceIPs:["0.0.0.0/0"],destinationZone:"Trust",destinationIPs:["10.100.0.0/24"],tags:["Blocking","Database"],action:"deny",description:"Blocks external access to database ports"},{policyNumber:15,name:"API Gateway Access",sourceZone:"Trust",sourceIPs:["192.168.100.0/24","192.168.101.0/24"],destinationZone:"Trust",destinationIPs:["10.200.0.5"],tags:["API","VDI Env"],action:"allow",description:"Allows traffic to API gateway from specific subnets"},{policyNumber:18,name:"Drop Legacy SMB",sourceZone:"Trust",sourceIPs:["Any"],destinationZone:"Trust",destinationIPs:["10.20.0.0/16"],tags:["Legacy","Internal"],action:"drop",description:"Drops SMBv1 probes across workstation networks"},{policyNumber:22,name:"Agent Runtime Mesh",sourceZone:"Trust",sourceIPs:["10.10.4.0/24"],destinationZone:"Trust",destinationIPs:["10.10.8.0/24","10.10.12.0/24"],tags:["Agent","Runtime"],action:"allow",description:"Allows managed agent runtime channels between worker pools"},{policyNumber:27,name:"Block Public Admin Ports",sourceZone:"Untrust",sourceIPs:["0.0.0.0/0"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Blocking","Admin Access"],action:"deny",description:"Denies public access to SSH, RDP, and database admin ports"},{policyNumber:31,name:"Build Cache Access",sourceZone:"Trust",sourceIPs:["10.30.0.0/16"],destinationZone:"Trust",destinationIPs:["10.60.12.20"],tags:["Build","Internal"],action:"allow",description:"Allows build workers to reach shared cache storage"},{policyNumber:36,name:"Relay Egress",sourceZone:"Trust",sourceIPs:["10.40.0.0/16"],destinationZone:"Untrust",destinationIPs:["198.18.0.0/15"],tags:["Relay","Agent"],action:"allow",description:"Permits relay service egress to managed edge addresses"},{policyNumber:41,name:"Quarantine Subnet",sourceZone:"Quarantine",sourceIPs:["10.250.0.0/24"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Security","Blocking"],action:"deny",description:"Blocks quarantined hosts from internal services"},{policyNumber:48,name:"Observability Intake",sourceZone:"Trust",sourceIPs:["10.0.0.0/8"],destinationZone:"Trust",destinationIPs:["10.80.4.10"],tags:["Telemetry","Internal"],action:"allow",description:"Allows metrics and logs to the observability intake"}],Xh=Array.from(new Set(Xf.flatMap(e=>e.tags))).sort(),Xm=[["10.10.4.0/24","Agent workers","Trust","18"],["10.20.0.0/16","Workstations","Trust","41"],["10.250.0.0/24","Quarantine","Quarantine","03"],["198.18.0.0/15","Relay edge","Untrust","12"]],Xp=[["Database Port Protection","2026-06-12","Security"],["Relay Egress","2026-06-28","Network"],["Build Cache Access","2026-07-04","Build"],["Observability Intake","2026-07-18","Ops"]];function Xg({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,eI.cn)("mx-auto flex w-full justify-center",e),...t})}function Xx({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,eI.cn)("flex flex-row items-center gap-1",e),...t})}function Xv({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function Xb({className:e,isActive:t,size:n="icon",...r}){return(0,eb.jsx)("a",{"aria-current":t?"page":void 0,"data-slot":"pagination-link","data-active":t,className:(0,eI.cn)((0,ez.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function Xy({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(Xb,{"aria-label":t,size:"default",className:(0,eI.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(mQ,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function Xw({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(Xb,{"aria-label":t,size:"default",className:(0,eI.cn)("gap-1 px-2.5 sm:pr-2",e),...n,children:[(0,eb.jsx)("span",{className:"hidden sm:block",children:t}),(0,eb.jsx)(m0,{})]})}function Xj({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,eI.cn)("flex size-8 items-center justify-center",e),...n,children:[(0,eb.jsx)(lY,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:t})]})}function Xk({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XN(){let[e,t]=ew.useState(""),[n,r]=ew.useState("all"),[a,i]=ew.useState({allow:!1,drop:!1,deny:!1}),[o,l]=ew.useState(1),s=ew.useMemo(()=>["allow","drop","deny"].filter(e=>a[e]),[a]),c=ew.useMemo(()=>[{id:"policyNumber",header:"策略 #",accessorKey:"policyNumber",align:"right",width:84},{id:"name",header:"名称",accessorKey:"name",width:180,className:"font-medium"},{id:"sourceZone",header:"源区域",accessorKey:"sourceZone",width:112,cell:({row:e})=>(0,eb.jsx)(XM,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(XM,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XE,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return Xf.filter(e=>{let r=0===t.length||e.name.toLowerCase().includes(t)||e.description.toLowerCase().includes(t)||e.sourceIPs.some(e=>e.toLowerCase().includes(t))||e.destinationIPs.some(e=>e.toLowerCase().includes(t)),i="all"===n||e.tags.includes(n),o=!(a.allow||a.drop||a.deny)||a.allow&&"allow"===e.action||a.drop&&"drop"===e.action||a.deny&&"deny"===e.action;return r&&i&&o})},[a,e,n]),u=Math.max(1,Math.ceil(d.length/8)),f=Math.min(o,u),h=d.slice((f-1)*8,8*f);return ew.useEffect(()=>{l(1)},[a,e,n]),(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col p-3",children:[(0,eb.jsxs)("div",{className:"mb-3 flex shrink-0 items-center justify-between gap-3",children:[(0,eb.jsx)(Xk,{title:"防火墙策略"}),(0,eb.jsxs)(ez.Button,{size:"sm",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"新增策略"]})]}),(0,eb.jsxs)("div",{className:"mb-3 grid shrink-0 grid-cols-1 items-end gap-3 sm:grid-cols-[minmax(12rem,1fr)_10rem_auto]",children:[(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"搜索"}),(0,eb.jsxs)("span",{className:"relative",children:[(0,eb.jsx)(xN,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(eA,{value:e,onChange:e=>t(e.target.value),placeholder:"搜索策略...",className:"pl-8"})]})]}),(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"标签"}),(0,eb.jsxs)(gR,{value:n,onValueChange:r,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"全部标签"})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"all",children:"全部标签"}),Xh.map(e=>(0,eb.jsx)(xv,{value:e,children:e},e))]})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"动作"}),(0,eb.jsxs)(mV,{type:"multiple",variant:"outline",value:s,onValueChange:function(e){e.includes("clear")?(t(""),r("all"),i({allow:!1,drop:!1,deny:!1}),l(1)):i({allow:e.includes("allow"),drop:e.includes("drop"),deny:e.includes("deny")})},children:[(0,eb.jsx)(mH,{value:"allow",children:"允许"}),(0,eb.jsx)(mH,{value:"drop",children:"丢弃"}),(0,eb.jsx)(mH,{value:"deny",children:"拒绝"}),(0,eb.jsx)(mH,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qm,{rows:h,columns:c,rowId:"policyNumber",showHeader:!1,showToolbar:!1,rowHeight:40,className:"min-h-0 flex-1 rounded-lg shadow-none",labels:{noRows:"没有匹配的策略。",selectAllRows:"选择当前页策略",selectRow:e=>`选择第 ${e+1} 条策略`,resizeColumn:"调整列宽",sortAsc:"升序",sortDesc:"降序",sortClear:"取消排序",copyCell:"复制单元格",copied:"已复制"}}),(0,eb.jsx)(XS,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XS({page:e,totalPages:t,onPageChange:n}){let r=ew.useMemo(()=>t<=3?Array.from({length:t},(e,t)=>t+1):e<=2?[1,2,3]:e>=t-1?[t-2,t-1,t]:[e-1,e,e+1],[e,t]),a=r[0]??1,i=r[r.length-1]??t;function o(e,t){e.preventDefault(),n(t)}return(0,eb.jsx)(Xg,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(Xx,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xy,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,eI.cn)(1===e&&"pointer-events-none opacity-40"),onClick:t=>o(t,e-1)})}),a>1?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xj,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",isActive:e===t,onClick:e=>o(e,t),children:t})},t)),i<t?(0,eb.jsxs)(eb.Fragment,{children:[i<t-1?(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xj,{moreLabel:"更多页"})}):null,(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xw,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,eI.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XC({items:e,variant:t}){return(0,eb.jsx)("div",{className:"flex min-w-48 flex-wrap gap-1",children:e.map(e=>(0,eb.jsx)(Bu,{variant:t,children:e},e))})}function XM({zone:e}){return(0,eb.jsx)(Bu,{variant:"Trust"===e?"secondary":"outline",children:e})}function XE({action:e}){return(0,eb.jsx)(Bu,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XO({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,eb.jsx)("table",{"data-slot":"table",className:(0,eI.cn)("w-full caption-bottom text-sm",e),...t})})}function XP({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,eI.cn)("[&_tr]:border-b",e),...t})}function Xz({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,eI.cn)("[&_tr:last-child]:border-0",e),...t})}function XI({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,eI.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function XA({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,eI.cn)("h-9 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XT({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,eI.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XR({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XD({title:e,headers:t,rows:n}){return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col p-3",children:[(0,eb.jsx)(XR,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XO,{children:[(0,eb.jsx)(XP,{children:(0,eb.jsx)(XI,{children:t.map(e=>(0,eb.jsx)(XA,{children:e},e))})}),(0,eb.jsx)(Xz,{children:n.map(e=>(0,eb.jsx)(XI,{children:e.map((e,t)=>(0,eb.jsx)(XT,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function X_(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(XR,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(eA,{placeholder:"策略名称"}),(0,eb.jsx)(eA,{placeholder:"负责人"}),(0,eb.jsx)(eA,{placeholder:"源 CIDR"}),(0,eb.jsx)(eA,{placeholder:"目标 CIDR"})]}),(0,eb.jsx)("textarea",{placeholder:"用途",className:"min-h-32 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{size:"sm",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"提交申请"]})})]})}function XL(){return(0,eb.jsxs)(mu,{defaultValue:"policies",className:"vtl-firewall-workspace flex h-full min-h-0 flex-col",children:[(0,eb.jsx)("div",{className:"shrink-0 overflow-x-auto px-3 pt-3 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsxs)(my,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mw,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mw,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mw,{value:"renewals",children:"续期"}),(0,eb.jsx)(mw,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mw,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mj,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XN,{})}),(0,eb.jsx)(mj,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:Xm})}),(0,eb.jsx)(mj,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"续期",headers:["策略","续期时间","负责人"],rows:Xp})}),(0,eb.jsx)(mj,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X_,{})}),(0,eb.jsx)(mj,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function X$(e){return e.map(e=>{var t;return{id:e.id,name:e.name,path:e.path,kind:"folder"===(t=e.kind)?"folder":"image"===t?"image":"archive"===t?"archive":"text"===t?"text":"code"===t?"code":"executable"===t?"config":"unknown",hasChildren:"folder"===e.kind,readonly:e.readonly,disabled:e.disabled}})}async function XF(e,t){let n=t.machineId||"local";return X$((await uK(n,e.path)).items)}function XB({className:e,onOpenFile:t}){let[n,r]=ew.useState([]),[a,i]=ew.useState(!1),[o,l]=ew.useState(0),s=ew.useCallback(async()=>{i(!0);try{let e=await uW();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:X$(e.children)}))),l(e=>e+1)}catch{r([]),l(e=>e+1)}finally{i(!1)}},[]);return ew.useEffect(()=>{s()},[s]),ew.useEffect(()=>{function e(){s()}return window.addEventListener("vantaloom:file-system-changed",e),()=>window.removeEventListener("vantaloom:file-system-changed",e)},[s]),(0,eb.jsx)(HW,{className:e,compact:!0,openFilesOnSingleClick:!1,allowCreateFile:!1,allowCreateFolder:!1,allowRename:!1,allowDelete:!1,allowDragAndDrop:!1,allowBoxSelect:!1,defaultRoots:n,defaultExpandedIds:n.map(e=>e.id),loadingIds:a?n.map(e=>e.id):[],labels:{title:"Explorer",refresh:"刷新",collapseAll:"折叠",empty:"没有文件",noResults:"没有匹配文件",loading:"读取中..."},onLoadChildren:XF,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function XV({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dC,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fv,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fw,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fj,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(XB,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function XH(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useLayoutEffect(()=>{let t=e.current;if(!t)return;function r(){let e=t.getBoundingClientRect();n({width:e.width,height:e.height})}r();let a=new ResizeObserver(r);return a.observe(t),()=>a.disconnect()},[]),[e,t]}let XU=(0,ek.default)("shield-off",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]]);function Xq({open:e,placement:t="viewport",movePermissionGranted:n,onOpenChange:r,onAdd:a,onMovePermissionGrantedChange:i}){let o=[{key:"move-permission",label:n?"取消放行权限":"放行权限",icon:n?(0,eb.jsx)(jD,{className:"size-4"}):(0,eb.jsx)(XU,{className:"size-4"}),pressed:n,onClick:()=>i(!n)},{key:"add",label:"新建文件窗口",icon:(0,eb.jsx)(lJ,{className:"size-4"}),pressed:void 0,onClick:a}];return(0,eb.jsx)("div",{className:(0,eI.cn)("right-5 z-50","viewport"===t?"fixed bottom-5 max-md:bottom-20":"absolute bottom-5"),children:(0,eb.jsxs)("div",{className:"relative size-8",children:[o.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,title:t.label,onClick:t.onClick,className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0",t.pressed&&"border-foreground bg-foreground text-background hover:bg-foreground/90 hover:text-background"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":"文件窗口操作","aria-expanded":e,onClick:()=>r(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let XW=[];function XK(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function XG(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?XG(n.children,t):void 0;if(e)return e}}function XX(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function XY(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function XZ(e){return e.map(e=>({...e,children:e.children?XZ(e.children):void 0}))}let XJ=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),XQ=(0,ek.default)("octagon-alert",[["path",{d:"M12 16h.01",key:"1drbdi"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z",key:"1fd625"}]]),X0=(0,ek.default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]),X1={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function X2({items:e,expanded:t,defaultExpanded:n=!1,expansionDirection:r="down-left",title:a,labels:i,maxCollapsedItems:o=10,maxExpandedHeight:l=360,acceptExternalDrops:s=!1,removeOnExternalDrop:c=!1,className:d,onExpandedChange:u,onItemDragStart:f,onItemDragEnd:h,onItemDuplicate:m,onItemsRemove:p,onItemsReorder:g,onExternalDrop:x,onMouseEnter:v,onMouseLeave:b,...y}){let w={...X1,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,O]=ew.useState(n),[P,z]=ew.useState(),[I,A]=ew.useState({canScrollDown:!1,canScrollUp:!1}),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),L=ew.useRef(0),$=ew.useRef(void 0),F=ew.useRef(!1),B=ew.useRef(null),V=ew.useRef(null),H=void 0!==t,U=(H?t:j)||void 0!==N,q=Math.min(o,10),W=U?e:e.slice(0,q),K=E?C:void 0,G=44*W.length+18,X=Math.min(G,l),Y=U&&G>X,Z=0===e.length?"h-24":U?`${X}px`:"h-28",J=U&&Y?14:0;ew.useEffect(()=>{if(!U){O(!1),A({canScrollDown:!1,canScrollUp:!1});return}O(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),A({canScrollUp:!1,canScrollDown:G>X});let e=window.setTimeout(()=>{O(!0)},260);return()=>window.clearTimeout(e)},[G,X,U]),ew.useEffect(()=>()=>{void 0!==$.current&&window.clearTimeout($.current)},[]);let Q=ew.useCallback(e=>{H||k(e),u?.(e)},[H,u]);function ee(e,t=0){let n=e.currentTarget.getBoundingClientRect();return e.clientX>=n.left-t&&e.clientX<=n.right+t&&e.clientY>=n.top-t&&e.clientY<=n.bottom+t}function et(e){if(!U||!V.current)return 0;let t=Array.from(V.current.querySelectorAll('[data-slot="clipboard-stack-card"]'));if(0===t.length)return 0;for(let[n,r]of t.entries()){let t=r.getBoundingClientRect();if(e.clientY<t.top+t.height/2)return n}return t.length}function en(e){return void 0!==N||Array.from(e.dataTransfer.types).includes("application/vnd.vantaloom.clip-id")}return ew.useEffect(()=>{if(0===e.length||U)return;let t=window.requestAnimationFrame(()=>{B.current?.matches(":hover")&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0))});return()=>window.cancelAnimationFrame(t)},[e.length,Q,U]),ew.useEffect(()=>{if(!U||!Y||!K||!V.current)return;let e=W.findIndex(e=>e.id===K);if(e<0)return;let t=V.current,n=44*e-8,r=44*e+(W[e]?.expandedHeight??220)+12,a=t.scrollTop,i=a+t.clientHeight;n<a?t.scrollTo({top:Math.max(0,n),behavior:"smooth"}):r>i&&t.scrollTo({top:r-t.clientHeight,behavior:"smooth"})},[K,Y,W,U]),(0,eb.jsxs)("div",{ref:B,"data-slot":"clipboard-stack","data-expanded":U,"data-closing":T,"data-external-dragging":D,"data-expansion-direction":r,className:(0,eI.cn)("group/clipboard relative w-80 max-w-full overflow-visible py-2",d),onMouseEnter:function(e){v?.(e),ee(e)&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0))},onMouseMove:function(e){if(!U){ee(e,12)&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0));return}!U||N||ee(e,12)||(M(void 0),z(void 0),Q(!1),R(!0),void 0!==$.current&&window.clearTimeout($.current),$.current=window.setTimeout(()=>{R(!1),$.current=void 0},320))},onMouseLeave:function(e){b?.(e),N||(M(void 0),z(void 0),R(!0),Q(!1),void 0!==$.current&&window.clearTimeout($.current),$.current=window.setTimeout(()=>{R(!1),$.current=void 0},320))},onDragEnter:function(e){!s||en(e)||(L.current+=1,_(!0),R(!1))},onDragLeave:function(e){!s||en(e)||(L.current=Math.max(0,L.current-1),0===L.current&&(_(!1),z(void 0)))},onDragOver:function(e){!s||en(e)||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",_(!0),U?z(et(e)):z(0))},onDrop:function(t){if(!s||en(t))return;t.preventDefault(),t.stopPropagation();let n=P??et(t);L.current=0,_(!1),z(void 0),x?.({insertIndex:n,items:e,nativeEvent:t})},...y,children:[(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-header",className:(0,eI.cn)("mb-2 flex h-8 items-center gap-2 px-1 text-sm font-medium text-foreground transition-[opacity,transform] duration-200","down-left"===r&&"justify-end",U?"opacity-100":"translate-y-1 opacity-0"),children:[(0,eb.jsx)("span",{className:"inline-flex size-6 items-center justify-center rounded-lg border bg-background text-muted-foreground",children:(0,eb.jsx)(X0,{className:"size-3.5"})}),(0,eb.jsx)("span",{children:a??w.title}),(0,eb.jsx)("span",{className:"ml-auto tabular-nums text-muted-foreground",children:e.length})]}),(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-list",className:(0,eI.cn)("relative transition-[height] duration-300 ease-[cubic-bezier(.2,.8,.2,1)]"),style:{height:Z},children:[e.length>0&&"down-left"===r?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-pivot","aria-hidden":"true",className:(0,eI.cn)("pointer-events-none absolute top-3 right-[34px] z-50 size-2.5 rounded-full bg-foreground shadow-sm transition-[opacity,transform] duration-200 dark:bg-background",U?"scale-75 opacity-0":"opacity-100")}):null,s&&D?(0,eb.jsxs)("span",{"data-slot":"clipboard-stack-external-ghost","aria-hidden":"true",className:(0,eI.cn)("pointer-events-none absolute right-0 z-[70] h-14 w-[88%] rounded-xl border bg-background shadow-md shadow-black/10","clipboard-stack-external-ghost"),children:[(0,eb.jsx)("span",{className:"absolute top-3 right-[34px] size-2 rounded-full bg-foreground dark:bg-background"}),(0,eb.jsx)("span",{className:"absolute top-4 left-3 h-2 w-24 rounded-full bg-foreground/18"}),(0,eb.jsx)("span",{className:"absolute top-8 left-3 h-1.5 w-14 rounded-full bg-foreground/10"})]}):null,0===e.length?(0,eb.jsx)("div",{className:"flex h-24 items-center justify-center rounded-xl border border-dashed bg-muted/35 text-sm text-muted-foreground",children:w.empty}):(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-scroll-frame",className:"relative h-full",children:[(0,eb.jsx)("div",{"data-slot":"clipboard-stack-scroll",ref:V,className:(0,eI.cn)("relative h-full overflow-x-visible",U&&Y?"clipboard-stack-scrollbar-hidden overflow-y-auto pt-2 pr-1 pb-3":"overflow-visible"),onScroll:e=>{let t=e.currentTarget;A({canScrollUp:t.scrollTop>1,canScrollDown:t.scrollTop+t.clientHeight<t.scrollHeight-1})},onDragOver:function(e){U&&N&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move")},onDrop:function(t){if(!U||!N||void 0===P)return;t.preventDefault(),t.stopPropagation(),F.current=!0;let n=e.findIndex(e=>e.id===N),r=e[n];if(n<0||!r)return;let a=e.filter(e=>e.id!==N),i=Math.max(0,Math.min(P>n?P-1:P,a.length));a.splice(i,0,r),z(void 0),M(void 0),i!==n&&g?.(a,{item:r,fromIndex:n,toIndex:i,items:a})},children:(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-scroll-content",className:"relative",style:{width:U&&Y?`calc(100% - ${J}px)`:void 0,marginLeft:U&&Y?`${J}px`:void 0,height:U&&Y?G+28:U?G:"100%"},children:[void 0!==P?(0,eb.jsxs)("span",{"data-slot":"clipboard-stack-insert-line","aria-hidden":"true",className:"pointer-events-none absolute right-0 left-0 z-[80] flex items-center",style:{top:44*P-2},children:[(0,eb.jsx)("span",{className:"h-px flex-1 bg-foreground/70"}),(0,eb.jsx)("span",{className:"mx-1 size-1.5 rounded-full bg-foreground"}),(0,eb.jsx)("span",{className:"h-px flex-1 bg-foreground/70"})]}):null,W.map((t,n)=>(0,eb.jsx)(X5,{item:t,index:n,count:W.length,expanded:U,active:U&&t.id===K,top:U?44*n:void 0,expansionDirection:r,labels:w,onHover:()=>M(t.id),onDuplicate:()=>{let n=e.findIndex(e=>e.id===t.id);n<0||m?.(e,{item:t,index:n,items:e})},onDragOver:e=>{if(U&&N&&N!==t.id){let t=e.currentTarget.getBoundingClientRect();z(e.clientY<t.top+t.height/2?n:n+1)}},onDragStart:e=>{S(e.item.id),M(void 0),F.current=!1,f?.(e)},onDragEnd:t=>{let n=t.nativeEvent.dataTransfer.dropEffect,r=t.item.id,a=e.findIndex(e=>e.id===r),i=c&&!F.current&&"none"!==n&&a>=0;if(S(void 0),z(void 0),M(void 0),F.current?F.current=!1:Q(!1),i){let n=e.filter(e=>e.id!==r);p?.(n,{item:t.item,index:a,items:n})}h?.(t)}},t.id))]})}),Y&&I.canScrollUp?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-scroll-mask-top","aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 top-0 z-[90] h-8 bg-gradient-to-b from-background to-transparent"}):null,Y&&I.canScrollDown?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-scroll-mask-bottom","aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 bottom-0 z-[90] h-8 bg-gradient-to-t from-background to-transparent"}):null]})]})]})}function X5({item:e,index:t,count:n,expanded:r,active:a,top:i,expansionDirection:o,labels:l,onHover:s,onDuplicate:c,onDragOver:d,onDragStart:u,onDragEnd:f}){let h=Math.min(t,9),m="down-left"===o?-(4.5*h):[-4,2,-1,4][h]??0,p=r?a?n+20:n-t:n+t;return(0,eb.jsx)("article",{"data-slot":"clipboard-stack-card",draggable:!e.disabled,"aria-disabled":e.disabled,className:(0,eI.cn)("absolute right-0 min-h-16 w-full cursor-grab select-none rounded-xl border bg-background p-2.5 text-foreground shadow-sm shadow-black/5 outline-none transition-[top,transform,opacity,box-shadow,border-color] duration-300 ease-[cubic-bezier(.2,.8,.2,1)] active:cursor-grabbing","hover:border-foreground/35 hover:shadow-md hover:shadow-black/10 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/40",r&&"min-h-0 overflow-hidden py-2 transition-[top,transform,max-height,opacity,box-shadow,border-color] duration-300",r&&!a&&"max-h-11",e.disabled&&"cursor-not-allowed opacity-50"),style:{top:r?i??44*t:"down-left"===o?0:9*h,zIndex:p,maxHeight:r&&a?e.expandedHeight??220:void 0,transformOrigin:"down-left"===o?"calc(100% - 34px) 14px":"100% 0",transform:r?a?"translate3d(-10px, -6px, 0) rotate(0deg)":"translate3d(0, 0, 0) rotate(0deg)":`translate3d(${"down-left"===o?0:4*h}px, 0, 0) rotate(${m}deg)`},tabIndex:e.disabled?-1:0,onMouseDown:function(t){1!==t.button||e.disabled||t.preventDefault()},onMouseEnter:s,onFocus:s,onAuxClick:function(t){1!==t.button||e.disabled||(t.preventDefault(),c?.())},onDragOver:d,onDragStart:function(t){for(let[n,r]of(t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setData("text/plain",e.title),t.dataTransfer.setData("application/vnd.vantaloom.clip-id",e.id),Object.entries(e.dragData??{})))t.dataTransfer.setData(n,r);u?.({item:e,nativeEvent:t})},onDragEnd:function(t){f?.({item:e,nativeEvent:t})},children:(0,eb.jsxs)("div",{className:"flex min-w-0 items-start gap-2",children:[(0,eb.jsx)("div",{"data-slot":"clipboard-stack-card-media",className:"flex size-8 shrink-0 items-center justify-center rounded-lg border bg-muted text-muted-foreground",children:e.icon??(0,eb.jsx)(X0,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:e.title}),e.meta?(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-xs tabular-nums text-muted-foreground",children:e.meta}):null]}),e.description?(0,eb.jsx)("p",{className:(0,eI.cn)("mt-0.5 text-xs leading-5 text-muted-foreground transition-[max-height,opacity,transform] duration-200",a?"max-h-40 translate-y-0 opacity-100":"max-h-0 -translate-y-1 overflow-hidden opacity-0"),children:e.description}):null,e.content?(0,eb.jsx)("div",{className:(0,eI.cn)("mt-2 text-xs text-muted-foreground transition-[max-height,opacity,transform] duration-200",a?"max-h-80 translate-y-0 opacity-100":"max-h-0 -translate-y-1 overflow-hidden opacity-0"),children:e.content}):null]}),(0,eb.jsx)("span",{"aria-label":l.dragHandle,className:"mt-1 inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground",children:(0,eb.jsx)(fk,{className:"size-3.5"})})]})})}function X4({transfers:e}){let t=e.slice(0,10);if(0===t.length)return null;let n=t.map(e=>{var t,n,r;let a,i,o;return{id:e.id,title:(a="copy"===(t=e).mode?"复制":"移动",i=t.sources.length,o=t.sources[0],`${a} ${i>1?`${i} 项`:X6(o?.path??"")}`),description:(n=e).message?n.message:`${n.sources[0]?.machineId??"local"} -> ${n.target.machineId}`,meta:function(e){switch(e.status){case"completed":return"完成";case"failed":return"失败";case"queued":return"排队";default:return`${Math.round(e.progress?.percent??0)}%`}}(e),icon:"completed"===(r=e).status?(0,eb.jsx)(eO,{className:"size-4"}):"failed"===r.status?(0,eb.jsx)(XQ,{className:"size-4"}):"running"===r.status?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"copy"===r.mode?(0,eb.jsx)(lU,{className:"size-4"}):(0,eb.jsx)(XJ,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(X3,{transfer:e})}});return(0,eb.jsx)("div",{className:"pointer-events-auto fixed top-4 right-4 z-50 w-80 max-w-[calc(100vw-2rem)] max-md:left-4 max-md:right-auto max-md:w-auto max-md:max-w-[16rem]",children:(0,eb.jsx)(X2,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function X3({transfer:e}){let t=Math.max(0,Math.min(100,e.progress?.percent??0));return(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-border",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-[width] duration-300",style:{width:`${t}%`}})}),(0,eb.jsxs)("div",{className:"grid gap-1 tabular-nums",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"truncate",children:X6(e.target.path)}),(0,eb.jsxs)("span",{children:[Math.round(t),"%"]})]}),(0,eb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2 text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"truncate",children:[X8(e.progress.bytesDone)," /"," ",X8(e.progress.bytesTotal)]}),(0,eb.jsxs)("span",{children:[e.progress.entriesDone,"/",e.progress.entriesTotal]})]}),e.progress.currentPath?(0,eb.jsx)("div",{className:"truncate text-muted-foreground",children:X6(e.progress.currentPath)}):null]})]})}function X6(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function X8(e){if(!e)return"0 B";let t=["B","KB","MB","GB","TB"],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||0===r?Math.round(n):n.toFixed(1)} ${t[r]}`}let X7=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function X9({windowLayout:e,roots:t,active:n,zIndex:r,boardSize:a,onActivate:i,onClose:o,onMinimize:l,onWindowChange:s,onNavigate:c,onRootsChange:d,onCreateFolder:u,onRenameItem:f,onDeleteItems:h,onMoveItems:m}){return(0,eb.jsxs)("section",{className:(0,eI.cn)("absolute overflow-hidden rounded-xl border bg-card shadow-lg transition-[box-shadow,border-color] duration-150","vtl-file-manager-window",n&&"border-foreground shadow-xl"),style:{left:e.x,top:e.y,width:e.w,height:e.h,zIndex:r},onPointerDown:i,children:[(0,eb.jsxs)("div",{className:"grid h-9 cursor-grab grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 border-b bg-muted/35 px-2 active:cursor-grabbing",onPointerDown:function(t){t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),i();let n=t.clientX,r=t.clientY;function a(t){let a=Math.max(0,e.x+t.clientX-n),i=Math.max(0,e.y+t.clientY-r);s({...e,x:a,y:i})}window.addEventListener("pointermove",a),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",e)})},children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(ez.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"关闭窗口",onPointerDown:e=>e.stopPropagation(),onClick:o,children:(0,eb.jsx)(fg.XIcon,{})}),(0,eb.jsx)(ez.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"缩小到剪切板",onPointerDown:e=>e.stopPropagation(),onClick:l,children:(0,eb.jsx)(X7,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(wG,{roots:t,variant:"full",currentRootId:e.rootId,currentPath:e.path,draggableItems:!0,onNavigate:c,onRootsChange:e=>d(e),onCreateFolder:u,onRenameItem:f,onDeleteItems:h,onItemDrop:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>m({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r}),labels:{title:"文件管理",search:"搜索文件",newFolder:"新建",upload:"上传",refresh:"刷新",sort:"排序",view:"视图"},className:"vtl-file-window-explorer min-h-0 rounded-none border-0 shadow-none",contentClassName:"min-h-0",style:{height:"calc(100% - 2.25rem)",minHeight:0}}),(0,eb.jsx)("button",{type:"button","aria-label":"调整窗口大小",className:"absolute right-0 bottom-0 size-5 cursor-nwse-resize rounded-tl-md border-t border-l bg-background/80",onPointerDown:function(t){t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),i();let n=t.clientX,r=t.clientY;function o(t){let i=Math.max(420,Math.min(Math.max(420,a.width-e.x),e.w+t.clientX-n)),o=Math.max(320,e.h+t.clientY-r);s({...e,w:i,h:o})}window.addEventListener("pointermove",o),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",e)})}})]})}function Ye({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=XH(),[l,s]=ew.useState([]),[c,d]=ew.useState(XW),[u,f]=ew.useState(XW[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(XW.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await uK(e,n);s(n=>{var a;return a={...r,root:{...r.root,id:t,machineId:e}},n.map(e=>e.id!==a.root.id?e:XX(e.path,a.path)?{...e,children:XZ(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=XY(e,n),a=XY(t,n);if(r===a)return[];let i=r.endsWith("/")?r:`${r}/`;return a.startsWith(i)?a.slice(i.length).split("/").filter(Boolean):[]}(t,n,r);if(0===i.length)return XZ(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return XZ(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>XX(e.path,s)),d=t[c],u={...d??{id:`synthetic-${s}`,name:l,kind:"folder",path:s,children:[]},kind:"folder",children:e(d?.children??[],s,r+1)};if(c<0)return[...t,u];let f=[...t];return f[c]=u,f}(e,t,0)}(e.children,e.path,a.path,e.platform,a.items)})})},[]),S=ew.useCallback(async()=>{let e=Yr((await u0()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>Yr([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{uQ({mode:"move",sources:e.sources.map(e=>({machineId:e.machineId,path:e.path})),target:{machineId:e.target.machineId,path:e.target.path}}).then(C).catch(()=>{})},[C]),E=ew.useCallback(()=>{for(let e of c)N(e.machineId,e.rootId,e.path)},[N,c]);function O(e,t){d(n=>n.map(n=>n.id===e?t(n):n))}function P(e){let t=l[0];if(!t&&!e?.rootId)return;w.current+=1;let n=`files-window-${w.current}`,r=i.current?.getBoundingClientRect(),a=r?.width??o.width,s=r?.height??o.height,c=e?.w??680,u=e?.h??460,h=Math.max(0,(a-c)/2),m=Math.max(0,(s-u)/2),p={id:n,title:e?.title??XK(t?.name??"local",t?.path??""),machineId:e?.machineId??t?.machineId??"local",rootId:e?.rootId??t?.id??"local",path:e?.path??t?.path??"",x:e?.x??h+12*w.current,y:e?.y??m+12*w.current,w:c,h:u};d(e=>[...e,p]),f(n),N(p.machineId,p.rootId,p.path)}ew.useEffect(()=>{let e=!0;return(async function(){let t=await uW();if(e&&(s(t.roots),!j.current&&t.roots[0])){j.current=!0;let e=function(e,t=0){return{id:`files-${e.id.replace(/[^a-z0-9_-]/gi,"-")}-${t}`,title:XK(e.name,e.path),machineId:e.machineId,rootId:e.id,path:e.path,x:28+24*t,y:28+24*t,w:720,h:480}}(t.roots[0]);d([e]),f(e.id),N(e.machineId,e.rootId,e.path)}})().catch(()=>{}),S().catch(()=>{}),()=>{e=!1}},[N,S]),ew.useEffect(()=>{if(!h.some(e=>"pending"===e.status||"running"===e.status||"queued"===e.status))return;let e=window.setInterval(async()=>{let e=(await S().catch(()=>h)).filter(e=>"completed"===e.status&&!k.current.has(e.id));if(e.length>0){for(let t of e)k.current.add(t.id);E()}},1e3);return()=>window.clearInterval(e)},[E,S,h]);let z=sy(),I=c.find(e=>e.id===u);function A(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;O(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:XK(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{uY({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{uZ({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{uJ({machineId:e.machineId,paths:t.map(e=>e.path)}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onMoveItems:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>{let a=l.find(t=>t.id===e);if(!a)return;let i=t.flatMap(e=>{let t=XG(a.children,e);return t?[{machineId:a.machineId,path:t.path,name:t.name}]:[]});if(0===i.length)return;let o={sources:i,target:{machineId:n.machineId,path:r.path,name:r.name}};x?M(o):y(o)}}}return z?(0,eb.jsxs)("div",{className:(0,eI.cn)("flex h-full min-h-0 w-full flex-col",n),children:[c.length>1?(0,eb.jsx)("div",{className:"flex shrink-0 items-center gap-1 overflow-x-auto border-b px-2 py-1.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:c.map(e=>(0,eb.jsx)("button",{type:"button",className:(0,eI.cn)("shrink-0 rounded-md px-2.5 py-1 text-xs transition-colors",e.id===u?"bg-foreground text-background":"text-muted-foreground hover:bg-muted"),onClick:()=>f(e.id),children:e.title},e.id))}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:I?(0,eb.jsx)(Yt,{windowLayout:I,roots:l,...A(I)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(X4,{transfers:h}),(0,eb.jsx)(Xq,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),P()}}),(0,eb.jsx)(Yn,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]}):(0,eb.jsxs)("div",{ref:i,className:(0,eI.cn)("relative h-full min-h-0 w-full overflow-hidden rounded-[inherit]",n),onDragOver:e=>{Array.from(e.dataTransfer.types).includes("application/vnd.vantaloom.file-window")&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},onDrop:function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.file-window");if(t)try{let n=JSON.parse(t),r=i.current?.getBoundingClientRect();e.preventDefault(),e.stopPropagation(),P({...n,x:r?e.clientX-r.left-160:n.x,y:r?e.clientY-r.top-24:n.y})}catch{return}},children:[(0,eb.jsx)("div",{className:"relative h-full min-h-0",style:{minHeight:Math.max(r,o.height-48)},children:c.map((n,r)=>(0,eb.jsx)(X9,{windowLayout:n,roots:l,active:u===n.id,zIndex:20+r+20*(u===n.id),boardSize:o,onActivate:()=>f(n.id),onClose:()=>d(e=>e.filter(e=>e.id!==n.id)),onMinimize:()=>{t?.([{id:`clip-${n.id}`,title:n.title,description:"文件管理窗口",meta:`${Math.round(n.w)}x${Math.round(n.h)}`,payloads:{"application/vnd.vantaloom.file-window":{...n}},dragData:{"application/vnd.vantaloom.clip-kind":"file-window","application/vnd.vantaloom.file-window":JSON.stringify(n)}},...e.filter(e=>e.id!==`clip-${n.id}`)]),d(e=>e.filter(e=>e.id!==n.id))},onWindowChange:e=>O(n.id,()=>e),...A(n),onNavigate:({rootId:e,path:t})=>{let r=l.find(t=>t.id===e),a=r?.machineId??n.machineId;O(n.id,n=>({...n,machineId:a,rootId:e,path:t,title:XK(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{uY({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{uZ({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{uJ({machineId:n.machineId,paths:e.map(e=>e.path)}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onMoveItems:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>{let a=l.find(t=>t.id===e);if(!a)return;let i=t.flatMap(e=>{let t=XG(a.children,e);return t?[{machineId:a.machineId,path:t.path,name:t.name}]:[]});if(0===i.length)return;let o={sources:i,target:{machineId:n.machineId,path:r.path,name:r.name}};x?M(o):y(o)}},n.id))}),(0,eb.jsx)(X4,{transfers:h}),(0,eb.jsx)(Xq,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),P()}}),(0,eb.jsx)(Yn,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]})}function Yt({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(wG,{roots:t,variant:"full",currentRootId:e.rootId,currentPath:e.path,onNavigate:n,onRootsChange:e=>r(e),onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onItemDrop:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>l({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r}),labels:{title:"文件管理",search:"搜索文件",newFolder:"新建",upload:"上传",refresh:"刷新",sort:"排序",view:"视图"},className:"h-full min-h-0 rounded-none border-0 shadow-none",contentClassName:"min-h-0"})}function Yn({move:e,onCancel:t,onConfirm:n}){var r;let a=e?.sources??[],i=Math.max(0,a.length-4);return(0,eb.jsx)(d4,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"确认移动"}),(0,eb.jsx)(ug,{children:e?`将 ${1===(r=a).length?r[0]?Ya(r[0]):"0 项":`${r.length} 项`} 移动到 ${Ya(e.target)}`:""})]}),e?(0,eb.jsxs)("div",{className:"grid gap-2 rounded-lg border bg-muted/20 p-3 ui-text-body",children:[(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"移动内容"}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[a.slice(0,4).map(e=>(0,eb.jsx)("span",{className:"truncate",children:Ya(e)},`${e.machineId}:${e.path}`)),i>0?(0,eb.jsxs)("span",{className:"text-muted-foreground",children:["另有 ",i," 项"]}):null]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"目标位置"}),(0,eb.jsx)("span",{className:"truncate",children:Ya(e.target)})]})]}):null,(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function Yr(e){return e.slice(0,10)}function Ya(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function Yi({className:e}){return(0,eb.jsx)(Ye,{className:(0,eI.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var Yo=ew;function Yl(){return(Yl=Object.assign.bind()).apply(null,arguments)}var Ys=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jB.clsx)("recharts-dot",a);return kv(t)&&kv(n)&&kv(r)?ew.createElement("circle",Yl({},IH(e),Am(e),{className:i,cx:t,cy:n,r:r})):null},Yc=["points"];function Yd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Yu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yd(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yd(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yf(){return(Yf=Object.assign.bind()).apply(null,arguments)}function Yh(e){var{option:t,dotProps:n,className:r}=e;if((0,ew.isValidElement)(t))return(0,ew.cloneElement)(t,n);if("function"==typeof t)return t(n);var a=(0,jB.clsx)(r,"boolean"!=typeof t?t.className:""),i=null!=n?n:{},{points:o}=i,l=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(i,Yc);return ew.createElement(Ys,Yf({},l,{className:a}))}function Ym(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=CJ.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Tn(n),u=null==n?null:(0,ew.isValidElement)(n)?Iq(n.props):"object"!=typeof n||Array.isArray(n)?null:Iq(n),f=t.map((e,r)=>{var l,s,c=Yu(Yu(Yu({r:3},o),u),{},{index:r,cx:null!=(l=e.x)?l:void 0,cy:null!=(s=e.y)?s:void 0,dataKey:i,value:e.value,payload:e.payload,points:t});return ew.createElement(Yh,{key:"dot-".concat(r),option:n,dotProps:c,className:a})}),h={};return l&&null!=s&&(h.clipPath="url(#clipPath-".concat(d?"":"dots-").concat(s,")")),ew.createElement(_q,{zIndex:c},ew.createElement(IG,Yf({className:r},h),f))}function Yp(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Yg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yp(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yp(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Yx=e=>{var t,{point:n,childIndex:r,mainColor:a,activeDot:i,dataKey:o,clipPath:l}=e;if(!1===i||null==n.x||null==n.y)return null;var s=Yg(Yg(Yg({},{index:r,dataKey:o,cx:n.x,cy:n.y,r:4,fill:null!=a?a:"none",strokeWidth:2,stroke:"#fff",payload:n.payload,value:n.value}),IU(i)),Am(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(Ys,s),ew.createElement(IG,{className:"recharts-active-dot",clipPath:l},t)};function Yv(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=CJ.activeDot}=e,l=Nr(_t),s=Nr(_d);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_q,{zIndex:o},ew.createElement(Yx,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function Yb(e,t){var n,r,a=Nr(t=>PF(t,e)),i=Nr(e=>PH(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:PL.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:PB.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function Yy(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=Nr(F3),{needClipX:i,needClipY:o,needClip:l}=Yb(t,n);if(!l||!a)return null;var{x:s,y:c,width:d,height:u}=a;return ew.createElement("clipPath",{id:"clipPath-".concat(r)},ew.createElement("rect",{x:i?s:s-d/2,y:o?c:c-u/2,width:i?d:2*d,height:o?u:2*u}))}function Yw(e,t){var n,r;return null!=(n=null==(r=e.graphicalItems.cartesianItems.find(e=>e.id===t))?void 0:r.xAxisId)?n:0}function Yj(e,t){var n,r;return null!=(n=null==(r=e.graphicalItems.cartesianItems.find(e=>e.id===t))?void 0:r.yAxisId)?n:0}var Yk=(e,t,n)=>Im(e,"xAxis",Yw(e,t),n),YN=(e,t,n)=>Ih(e,"xAxis",Yw(e,t),n),YS=(e,t,n)=>Im(e,"yAxis",Yj(e,t),n),YC=(e,t,n)=>Ih(e,"yAxis",Yj(e,t),n),YM=j3([Ck,Yk,YS,YN,YC],(e,t,n,r,a)=>kR(e,"xAxis")?kU(t,r,!1):kU(n,a,!1)),YE=j3([PY,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YO=e=>kR(Ck(e),"xAxis")?"yAxis":"xAxis",YP=j3([YE,(e,t,n)=>zu(e,YO(e),"yAxis"===YO(e)?Yj(e,t):Yw(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=Ms(e);if(null!=r&&null!=a){var i=null==(n=t[r])?void 0:n.stackedData,o=null==i?void 0:i.find(e=>e.key===a);if(null!=o)return o.map(e=>[e[0],e[1]])}}}),Yz=j3([Ck,Yk,YS,YN,YC,YP,ke,YM,YE,e=>e.rootProps.baseValue],(e,t,n,r,a,i,o,l,s,c)=>{var d,{chartData:u,dataStartIndex:f,dataEndIndex:h}=o;if(null!=s&&("horizontal"===e||"vertical"===e)&&null!=t&&null!=n&&null!=r&&null!=a&&0!==r.length&&0!==a.length&&null!=l){var{data:m}=s;if(null!=(d=m&&m.length>0?m:null==u?void 0:u.slice(f,h+1)))return function(e){var t,{areaSettings:{connectNulls:n,baseValue:r,dataKey:a},stackedData:i,layout:o,chartBaseValue:l,xAxis:s,yAxis:c,displayedData:d,dataStartIndex:u,xAxisTicks:f,yAxisTicks:h,bandSize:m}=e,p=i&&i.length,g=((e,t,n,r,a)=>{var i=null!=n?n:t;if(kv(i))return i;var o="horizontal"===e?a:r,l=o.scale.domain();if("number"===o.type){var s=Math.max(l[0],l[1]),c=Math.min(l[0],l[1]);return"dataMin"===i?c:"dataMax"===i||s<0?s:Math.max(Math.min(l[0],l[1]),0)}return"dataMin"===i?l[0]:"dataMax"===i?l[1]:l[0]})(o,l,r,s,c),x="horizontal"===o,v=!1,b=d.map((e,t)=>{if(p)d=i[u+t];else{var r,o,l,d,b,y=kT(e,a);Array.isArray(y)?(d=y,v=!0):d=[g,y]}var w=null!=(r=null==(o=d)?void 0:o[1])?r:null,j=null==w||p&&!n&&null==kT(e,a);return x?{x:kF({axis:s,ticks:f,bandSize:m,entry:e,index:t}),y:j?null:null!=(b=c.scale.map(w))?b:null,value:d,payload:e}:{x:j?null:null!=(l=s.scale.map(w))?l:null,y:kF({axis:c,ticks:h,bandSize:m,entry:e,index:t}),value:d,payload:e}});return t=p||v?b.map(e=>{var t,n,r=Array.isArray(e.value)?e.value[0]:null;return x?{x:e.x,y:null!=r&&null!=e.y&&null!=(n=c.scale.map(r))?n:null,payload:e.payload}:{x:null!=r&&null!=(t=s.scale.map(r))?t:null,y:e.y,payload:e.payload}}):x?c.scale.map(g):s.scale.map(g),{points:b,baseLine:null!=t?t:0,isRange:v}}({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:a,dataStartIndex:f,areaSettings:s,stackedData:i,displayedData:d,chartBaseValue:c,bandSize:l})}});function YI(e){var t=IU(e);if(null!=t){var{r:n,strokeWidth:r}=t,a=Number(n),i=Number(r);return(Number.isNaN(a)||a<0)&&(a=3),(Number.isNaN(i)||i<0)&&(i=2),{r:a,strokeWidth:i}}return{r:3,strokeWidth:2}}var YA=["id"],YT=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function YR(){return(YR=Object.assign.bind()).apply(null,arguments)}function YD(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Y_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function YL(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y_(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y_(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Y$(e,t){return e&&"none"!==e?e:t}var YF=Yo.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:a,fill:i,name:o,hide:l,unit:s,tooltipType:c,id:d}=e,u={dataDefinedOnItem:n,getPosition:kE,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kW(o,t),hide:l,type:c,color:Y$(r,i),unit:s,graphicalItemId:d}};return Yo.createElement(Dl,{tooltipEntrySettings:u})});function YB(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=IH(r);return Yo.createElement(Ym,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function YV(e){var{showLabels:t,children:n,points:r}=e,a=r.map(e=>{var t,n,r={x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,width:0,lowerWidth:0,upperWidth:0,height:0};return YL(YL({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return Yo.createElement(Li,{value:t?a:void 0},n)}function YH(e){var{points:t,baseLine:n,needClip:r,clipPathId:a,props:i}=e,{layout:o,type:l,stroke:s,connectNulls:c,isRange:d}=i,{id:u}=i,f=YD(i,YA),h=IH(f),m=Iq(f);return Yo.createElement(Yo.Fragment,null,(null==t?void 0:t.length)>1&&Yo.createElement(IG,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},Yo.createElement(AN,YR({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&Yo.createElement(AN,YR({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&Yo.createElement(AN,YR({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),Yo.createElement(YB,{points:t,props:f,clipPathId:a}))}function YU(e){var t,n,{alpha:r,baseLine:a,points:i,strokeWidth:o}=e,l=null==(t=i[0])?void 0:t.y,s=null==(n=i[i.length-1])?void 0:n.y;if(!kP(l)||!kP(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kv(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kv(d))?Yo.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function Yq(e){var t,n,{alpha:r,baseLine:a,points:i,strokeWidth:o}=e,l=null==(t=i[0])?void 0:t.x,s=null==(n=i[i.length-1])?void 0:n.x;if(!kP(l)||!kP(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kv(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kv(d))?Yo.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function YW(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?Yo.createElement(YU,{alpha:t,points:r,baseLine:a,strokeWidth:i}):Yo.createElement(Yq,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function YK(e){var{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i}=e,{points:o,baseLine:l,isAnimationActive:s,animationBegin:c,animationDuration:d,animationEasing:u,onAnimationStart:f,onAnimationEnd:h}=r,m=TC((0,Yo.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CN(),[g,x]=(0,Yo.useState)(!1),v=(0,Yo.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,Yo.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return Yo.createElement(YV,{showLabels:!g,points:o},r.children,Yo.createElement(TS,{animationId:m,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:v,onAnimationStart:b,key:m},e=>{if(y){var c,d=y.length/o.length,u=1===e?o:o.map((t,n)=>{var r=Math.floor(n*d);if(y[r]){var a=y[r];return YL(YL({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return t});if(kv(l))c=kN(w,l,e);else c=null==l||kg(l)?kN(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return YL(YL({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),Yo.createElement(YH,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),Yo.createElement(IG,null,s&&Yo.createElement("defs",null,Yo.createElement("clipPath",{id:"animationClipPath-".concat(n)},Yo.createElement(YW,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),Yo.createElement(IG,{clipPath:"url(#animationClipPath-".concat(n,")")},Yo.createElement(YH,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),Yo.createElement(Lc,{label:r.label}))}function YG(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,Yo.useRef)(null),i=(0,Yo.useRef)();return Yo.createElement(YK,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class YX extends Yo.PureComponent{render(){var{hide:e,dot:t,points:n,className:r,top:a,left:i,needClip:o,xAxisId:l,yAxisId:s,width:c,height:d,id:u,baseLine:f,zIndex:h}=this.props;if(e)return null;var m=(0,jB.clsx)("recharts-area",r),{r:p,strokeWidth:g}=YI(t),x=Tn(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return Yo.createElement(_q,{zIndex:h},Yo.createElement(IG,{className:m},o&&Yo.createElement("defs",null,Yo.createElement(Yy,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&Yo.createElement("clipPath",{id:"clipPath-dots-".concat(u)},Yo.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),Yo.createElement(YG,{needClip:o,clipPathId:u,props:this.props})),Yo.createElement(Yv,{points:n,mainColor:Y$(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&Yo.createElement(Yv,{points:f,mainColor:Y$(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var YY={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:"auto",legendType:"line",stroke:"#3182bd",strokeWidth:1,type:"linear",label:!1,xAxisId:0,yAxisId:0,zIndex:CJ.area};function YZ(e){var t,{activeDot:n,animationBegin:r,animationDuration:a,animationEasing:i,connectNulls:o,dot:l,fill:s,fillOpacity:c,hide:d,isAnimationActive:u,legendType:f,stroke:h,xAxisId:m,yAxisId:p}=e,g=YD(e,YT),x=Nr(Ck),v=Nr(CH),{needClip:b}=Yb(m,p),y=S7(),{points:w,isRange:j,baseLine:k}=null!=(t=Nr(t=>Yz(t,e.id,y)))?t:{},N=Nr(F3);if("horizontal"!==x&&"vertical"!==x||null==N||"AreaChart"!==v&&"ComposedChart"!==v)return null;var{height:S,width:C,x:M,y:E}=N;return w&&w.length?Yo.createElement(YX,YR({},g,{activeDot:n,animationBegin:r,animationDuration:a,animationEasing:i,baseLine:k,connectNulls:o,dot:l,fill:s,fillOpacity:c,height:S,hide:d,layout:x,isAnimationActive:u,isRange:j,legendType:f,needClip:b,points:w,stroke:h,width:C,left:M,top:E,xAxisId:m,yAxisId:p})):null}var YJ=Yo.memo(function(e){var t=AU(e,YY),n=S7();return Yo.createElement(_j,{id:t.id,type:"area"},e=>Yo.createElement(Yo.Fragment,null,Yo.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Y$(r,a),value:kW(n,t),payload:e}]})(t)}),Yo.createElement(YF,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),Yo.createElement(_z,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:k$(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),Yo.createElement(YZ,YR({},t,{id:e}))))},Fk);function YQ(){return(YQ=Object.assign.bind()).apply(null,arguments)}function Y0(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}YJ.displayName="Area";var Y1=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y0(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y0(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,layout:"horizontal",margin:{top:5,right:5,bottom:5,left:5},responsive:!1,reverseStackOrder:!1,stackOffset:"none",syncMethod:"index"},Fu),Y2=(0,ew.forwardRef)(function(e,t){var n,r=AU(e.categoricalChartProps,Y1),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fy,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(Fw,{chartData:s.data}),ew.createElement(FN,{layout:r.layout,margin:r.margin}),ew.createElement(FC,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(FS,{baseValue:r.baseValue,accessibilityLayer:r.accessibilityLayer,barCategoryGap:r.barCategoryGap,maxBarSize:r.maxBarSize,stackOffset:r.stackOffset,barGap:r.barGap,barSize:r.barSize,syncId:r.syncId,syncMethod:r.syncMethod,className:r.className,reverseStackOrder:r.reverseStackOrder}),ew.createElement(F9,YQ({},r,{ref:t})))}),Y5=["axis"],Y4=(0,ew.forwardRef)((e,t)=>ew.createElement(Y2,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Y5,tooltipPayloadSearcher:LO,categoricalChartProps:e,ref:t})),Y3=function(e){var{width:t,height:n}=e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(r%180+180)%180*Math.PI/180,i=Math.atan(n/t);return Math.abs(a>i&&a<Math.PI-i?n/Math.sin(a):t/Math.cos(a))};function Y6(e,t){if(t<1)return[];if(1===t)return e;for(var n=[],r=0;r<e.length;r+=t){var a=e[r];void 0!==a&&n.push(a)}return n}function Y8(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var i=n();return e*(t-e*i/2-r)>=0&&e*(t+e*i/2-a)<=0}function Y7(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Y9(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y7(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y7(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ze(e,t,n){var r,{tick:a,ticks:i,viewBox:o,minTickGap:l,orientation:s,interval:c,tickFormatter:d,unit:u,angle:f}=e;if(!i||!i.length||!a)return[];if(kv(c)||AS.isSsr)return null!=(r=Y6(i,(kv(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?AI(u,{fontSize:t,letterSpacing:n}):{width:0,height:0},p=(e,r)=>{var a,i="function"==typeof d?d(e.value,r):e.value;return"width"===h?(a=AI(i,{fontSize:t,letterSpacing:n}),Y3({width:a.width+m.width,height:a.height+m.height},f)):AI(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kp(x.coordinate-g.coordinate):1,b=function(e,t,n){var r="width"===n,{x:a,y:i,width:o,height:l}=e;return 1===t?{start:r?a:i,end:r?a+o:i+l}:{start:r?a+o:i+l,end:r?a:i}}(o,v,h);return"equidistantPreserveStart"===c?function(e,t,n,r,a){for(var i,o=(r||[]).slice(),{start:l,end:s}=t,c=0,d=1,u=l;d<=o.length;)if(i=function(){var t,i=null==r?void 0:r[c];if(void 0===i)return{v:Y6(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Y8(e,h,f,u,s);m||(c=0,u=l,d+=1),m&&(u=h+e*(f()/2+a),c+=d)}())return i.v;return[]}(v,b,p,i,l):"equidistantPreserveEnd"===c?function(e,t,n,r,a){var i=(r||[]).slice().length;if(0===i)return[];for(var{start:o,end:l}=t,s=1;s<=i;s++){for(var c,d=(i-1)%s,u=o,f=!0,h=d;h<i&&(0===(c=function(){var t,i=r[h];if(null==i)return 0;var o=h,s=()=>(void 0===t&&(t=n(i,o)),t),c=i.coordinate,m=h===d||Y8(e,c,s,u,l);if(!m)return f=!1,1;m&&(u=c+e*(s()/2+a))}())||1!==c);h+=s);if(f){for(var m=[],p=d;p<i;p+=s){var g=r[p];null!=g&&m.push(g)}return m}}return[]}(v,b,p,i,l):("preserveStart"===c||"preserveStartEnd"===c?function(e,t,n,r,a,i){var o=(r||[]).slice(),l=o.length,{start:s,end:c}=t;if(i){var d=r[l-1];if(null!=d){var u=n(d,l-1),f=e*(d.coordinate+e*u/2-c);o[l-1]=d=Y9(Y9({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Y8(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Y9(Y9({},d),{},{isShow:!0}))}}for(var h=i?l-1:l,m=function(t){var r,i=o[t];if(null==i)return 1;var l=i,d=()=>(void 0===r&&(r=n(i,t)),r);if(0===t){var u=e*(l.coordinate-e*d()/2-s);o[t]=l=Y9(Y9({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Y9(Y9({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Y8(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Y9(Y9({},l),{},{isShow:!0}))},p=0;p<h;p++)if(m(p))continue;return o}(v,b,p,i,l,"preserveStartEnd"===c):function(e,t,n,r,a){for(var i=(r||[]).slice(),o=i.length,{start:l}=t,{end:s}=t,c=function(t){var r,c=i[t];if(null==c)return 1;var d=c,u=()=>(void 0===r&&(r=n(c,t)),r);if(t===o-1){var f=e*(d.coordinate+e*u()/2-s);i[t]=d=Y9(Y9({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Y9(Y9({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Y8(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Y9(Y9({},d),{},{isShow:!0}))},d=o-1;d>=0;d--)if(c(d))continue;return i}(v,b,p,i,l)).filter(e=>e.isShow)}var Zt=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function Zn(){return(Zn=Object.assign.bind()).apply(null,arguments)}function Zr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Za(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zr(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Zi={x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd",zIndex:CJ.axis};function Zo(e){var{x:t,y:n,width:r,height:a,orientation:i,mirror:o,axisLine:l,otherSvgProps:s}=e;if(!l)return null;var c=Za(Za(Za({},s),IH(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=Za(Za({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=Za(Za({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",Zn({},c,{className:(0,jB.clsx)("recharts-cartesian-axis-line",(0,jF.default)(l,"className"))}))}function Zl(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jB.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,Za(Za({},r),{},{className:i}));else if("function"==typeof n)t=n(Za(Za({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jB.clsx)(o,Ld(n))),t=ew.createElement(A4,Zn({},r,{className:o}),a)}return t}function Zs(e){var{ticks:t,axisType:n,axisId:r}=e,a=k9();return(0,ew.useEffect)(()=>null==r||null==n?kE:(a(Fg({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(Fx({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zc=(0,ew.forwardRef)((e,t)=>{var{ticks:n=[],tick:r,tickLine:a,stroke:i,tickFormatter:o,unit:l,padding:s,tickTextProps:c,orientation:d,mirror:u,x:f,y:h,width:m,height:p,tickSize:g,tickMargin:x,fontSize:v,letterSpacing:b,getTicksConfig:y,events:w,axisType:j,axisId:k}=e,N=Ze(Za(Za({},y),{},{ticks:n}),v,b),S=IH(y),C=IU(r),M=AZ(S.textAnchor)?S.textAnchor:function(e,t){switch(e){case"left":return t?"start":"end";case"right":return t?"end":"start";default:return"middle"}}(d,u),E=function(e,t){switch(e){case"left":case"right":return"middle";case"top":return t?"start":"end";default:return t?"end":"start"}}(d,u),O={};"object"==typeof a&&(O=a);var P=Za(Za({},S),{},{fill:"none"},O),z=N.map(e=>Za({entry:e},function(e,t,n,r,a,i,o,l,s){var c,d,u,f,h,m,p=l?-1:1,g=e.tickSize||o,x=kv(e.tickCoord)?e.tickCoord:e.coordinate;switch(i){case"top":c=d=e.coordinate,m=(u=(f=n+!l*a)-p*g)-p*s,h=x;break;case"left":u=f=e.coordinate,h=(c=(d=t+!l*r)-p*g)-p*s,m=x;break;case"right":u=f=e.coordinate,h=(c=(d=t+l*r)+p*g)+p*s,m=x;break;default:c=d=e.coordinate,m=(u=(f=n+l*a)+p*g)+p*s,h=x}return{line:{x1:c,y1:u,x2:d,y2:f},tick:{x:h,y:m}}}(e,f,h,m,p,d,g,u,x))),I=z.map(e=>{var{entry:t,line:n}=e;return ew.createElement(IG,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(t.value,"-").concat(t.coordinate,"-").concat(t.tickCoord)},a&&ew.createElement("line",Zn({},P,n,{className:(0,jB.clsx)("recharts-cartesian-axis-tick-line",(0,jF.default)(a,"className"))})))}),A=z.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=Za(Za(Za(Za({verticalAnchor:E},S),{},{textAnchor:M,stroke:"none",fill:i},u),{},{index:t,payload:d,visibleTicksCount:N.length,tickFormatter:o,padding:s},c),{},{angle:null!=(n=null!=(a=null==c?void 0:c.angle)?a:S.angle)?n:0}),h=Za(Za({},f),C);return ew.createElement(IG,Zn({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},Ap(w,d,t)),r&&ew.createElement(Zl,{option:r,tickProps:h,value:"".concat("function"==typeof o?o(d.value,t):d.value).concat(l||"")}))});return ew.createElement("g",{className:"recharts-cartesian-axis-ticks recharts-".concat(j,"-ticks")},ew.createElement(Zs,{ticks:N,axisId:k,axisType:j}),A.length>0&&ew.createElement(_q,{zIndex:CJ.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},A)),I.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},I))}),Zd=(0,ew.forwardRef)((e,t)=>{var{axisLine:n,width:r,height:a,className:i,hide:o,ticks:l,axisType:s,axisId:c}=e,d=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,Zt),[u,f]=(0,ew.useState)(""),[h,m]=(0,ew.useState)(""),p=(0,ew.useRef)(null);(0,ew.useImperativeHandle)(t,()=>({getCalculatedWidth:()=>{var t;return(e=>{var{ticks:t,label:n,labelGapWithTick:r=5,tickSize:a=0,tickMargin:i=0}=e,o=0;if(t){Array.from(t).forEach(e=>{if(e){var t=e.getBoundingClientRect();t.width>o&&(o=t.width)}});var l=n?n.getBoundingClientRect().width:0;return Math.round(o+(a+i)+l+(n?r:0))}return 0})({ticks:p.current,label:null==(t=e.labelRef)?void 0:t.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}}));var g=(0,ew.useCallback)(e=>{if(e){var t=e.getElementsByClassName("recharts-cartesian-axis-tick-value");p.current=t;var n=t[0];if(n){var r=window.getComputedStyle(n),a=r.fontSize,i=r.letterSpacing;(a!==u||i!==h)&&(f(a),m(i))}}},[u,h]);return o||null!=r&&r<=0||null!=a&&a<=0?null:ew.createElement(_q,{zIndex:e.zIndex},ew.createElement(IG,{className:(0,jB.clsx)("recharts-cartesian-axis",i)},ew.createElement(Zo,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:IH(e)}),ew.createElement(Zc,{ref:g,axisType:s,events:d,fontSize:u,getTicksConfig:e,height:e.height,letterSpacing:h,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:l,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:c}),ew.createElement(_1,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(_7,{label:e.label,labelRef:e.labelRef}),e.children)))}),Zu=ew.forwardRef((e,t)=>{var n=AU(e,Zi);return ew.createElement(Zd,Zn({},n,{ref:t}))});Zu.displayName="CartesianAxis";var Zf=["x1","y1","x2","y2","key"],Zh=["offset"],Zm=["xAxisId","yAxisId"],Zp=["xAxisId","yAxisId"];function Zg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zx(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zg(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zv(){return(Zv=Object.assign.bind()).apply(null,arguments)}function Zb(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Zy=e=>{var{fill:t}=e;if(!t||"none"===t)return null;var{fillOpacity:n,x:r,y:a,width:i,height:o,ry:l}=e;return ew.createElement("rect",{x:r,y:a,ry:l,width:i,height:o,stroke:"none",fill:t,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function Zw(e){var{option:t,lineItemProps:n}=e;if(ew.isValidElement(t))r=ew.cloneElement(t,n);else if("function"==typeof t)r=t(n);else{var r,a,{x1:i,y1:o,x2:l,y2:s,key:c}=n,d=null!=(a=IH(Zb(n,Zf)))?a:{},{offset:u}=d,f=Zb(d,Zh);r=ew.createElement("line",Zv({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function Zj(e){var{x:t,width:n,horizontal:r=!0,horizontalPoints:a}=e;if(!r||!a||!a.length)return null;var{xAxisId:i,yAxisId:o}=e,l=Zb(e,Zm),s=a.map((e,a)=>{var i=Zx(Zx({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(Zw,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function Zk(e){var{y:t,height:n,vertical:r=!0,verticalPoints:a}=e;if(!r||!a||!a.length)return null;var{xAxisId:i,yAxisId:o}=e,l=Zb(e,Zp),s=a.map((e,a)=>{var i=Zx(Zx({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(Zw,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZN(e){var{horizontalFill:t,fillOpacity:n,x:r,y:a,width:i,height:o,horizontalPoints:l,horizontal:s=!0}=e;if(!s||!t||!t.length||null==l)return null;var c=l.map(e=>Math.round(e+a-a)).sort((e,t)=>e-t);a!==c[0]&&c.unshift(0);var d=c.map((e,l)=>{var s=c[l+1],d=null==s?a+o-e:s-e;if(d<=0)return null;var u=l%t.length;return ew.createElement("rect",{key:"react-".concat(l),y:e,x:r,height:d,width:i,stroke:"none",fill:t[u],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return ew.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},d)}function ZS(e){var{vertical:t=!0,verticalFill:n,fillOpacity:r,x:a,y:i,width:o,height:l,verticalPoints:s}=e;if(!t||!n||!n.length)return null;var c=s.map(e=>Math.round(e+a-a)).sort((e,t)=>e-t);a!==c[0]&&c.unshift(0);var d=c.map((e,t)=>{var s=c[t+1],d=null==s?a+o-e:s-e;if(d<=0)return null;var u=t%n.length;return ew.createElement("rect",{key:"react-".concat(t),x:e,y:i,width:d,height:l,stroke:"none",fill:n[u],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return ew.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},d)}var ZC=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return kD(Ze(Zx(Zx(Zx({},Zi),n),{},{ticks:k_(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},ZM=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return kD(Ze(Zx(Zx(Zx({},Zi),n),{},{ticks:k_(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZE={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:CJ.grid};function ZO(e){var t=Nr(kK),n=Nr(kG),r=Cj(),a=Zx(Zx({},AU(e,ZE)),{},{x:kv(e.x)?e.x:r.left,y:kv(e.y)?e.y:r.top,width:kv(e.width)?e.width:r.width,height:kv(e.height)?e.height:r.height}),{xAxisId:i,yAxisId:o,x:l,y:s,width:c,height:d,syncWithTicks:u,horizontalValues:f,verticalValues:h}=a,m=S7(),p=Nr(e=>Iu(e,"xAxis",i,m)),g=Nr(e=>Iu(e,"yAxis",o,m));if(!kz(c)||!kz(d)||!kv(l)||!kv(s))return null;var x=a.verticalCoordinatesGenerator||ZC,v=a.horizontalCoordinatesGenerator||ZM,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?Zx(Zx({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Cn(Array.isArray(j),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(b=j)}if((!y||!y.length)&&"function"==typeof x){var k=h&&h.length,N=x({xAxis:p?Zx(Zx({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Cn(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_q,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(Zy,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZN,Zv({},a,{horizontalPoints:b})),ew.createElement(ZS,Zv({},a,{verticalPoints:y})),ew.createElement(Zj,Zv({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(Zk,Zv({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZO.displayName="CartesianGrid";var ZP=["domain","range"],Zz=["domain","range"];function ZI(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZA(e,t){return e===t||!!(Array.isArray(e)&&2===e.length&&Array.isArray(t))&&2===t.length&&e[0]===t[0]&&e[1]===t[1]}function ZT(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=ZI(e,ZP),{domain:i,range:o}=t,l=ZI(t,Zz);return!!ZA(n,i)&&!!ZA(r,o)&&Fk(a,l)}var ZR=["type"],ZD=["dangerouslySetInnerHTML","ticks","scale"],Z_=["id","scale"];function ZL(){return(ZL=Object.assign.bind()).apply(null,arguments)}function Z$(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z$(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z$(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZB(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZV(e){var t=k9(),n=(0,ew.useRef)(null),r=CN(),{type:a}=e,i=ZB(e,ZR),o=C2(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZF(ZF({},i),{},{type:o})},[i,o]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($h(l)):n.current!==l&&t($m({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($p(n.current)),n.current=null)},[t]),null}var ZH=e=>{var{xAxisId:t,className:n}=e,r=Nr(k3),a=S7(),i="xAxis",o=Nr(e=>If(e,i,t,a)),l=Nr(e=>In(e,t)),s=Nr(e=>Ii(e,t)),c=Nr(e=>P$(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=ZB(e,ZD),{id:m,scale:p}=c,g=ZB(c,Z_);return ew.createElement(Zu,ZL({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jB.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},ZU={allowDataOverflow:PL.allowDataOverflow,allowDecimals:PL.allowDecimals,allowDuplicatedCategory:PL.allowDuplicatedCategory,angle:PL.angle,axisLine:Zi.axisLine,height:PL.height,hide:!1,includeHidden:PL.includeHidden,interval:PL.interval,label:!1,minTickGap:PL.minTickGap,mirror:PL.mirror,orientation:PL.orientation,padding:PL.padding,reversed:PL.reversed,scale:PL.scale,tick:PL.tick,tickCount:PL.tickCount,tickLine:Zi.tickLine,tickSize:Zi.tickSize,type:PL.type,niceTicks:PL.niceTicks,xAxisId:0},Zq=ew.memo(e=>{var t=AU(e,ZU);return ew.createElement(ew.Fragment,null,ew.createElement(ZV,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),ew.createElement(ZH,t))},ZT);Zq.displayName="XAxis";var ZW=["type"],ZK=["dangerouslySetInnerHTML","ticks","scale"],ZG=["id","scale"];function ZX(){return(ZX=Object.assign.bind()).apply(null,arguments)}function ZY(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZZ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ZY(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ZY(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZJ(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZQ(e){var t=k9(),n=(0,ew.useRef)(null),r=CN(),{type:a}=e,i=ZJ(e,ZW),o=C2(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZZ(ZZ({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($g(l)):n.current!==l&&t($x({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($v(n.current)),n.current=null)},[t]),null}function Z0(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=Nr(k3),s=S7(),c=k9(),d="yAxis",u=Nr(e=>Il(e,t)),f=Nr(e=>Io(e,t)),h=Nr(e=>If(e,d,t,s)),m=Nr(e=>PV(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||_4(a)||(0,ew.isValidElement)(a))&&null!=m){var e=i.current;if(e){var n=e.getCalculatedWidth();Math.round(u.width)!==Math.round(n)&&c($j({id:t,width:n}))}}},[h,u,c,a,t,r,m]),null==u||null==f||null==m)return null;var{dangerouslySetInnerHTML:p,ticks:g,scale:x}=e,v=ZJ(e,ZK),{id:b,scale:y}=m,w=ZJ(m,ZG);return ew.createElement(Zu,ZX({},v,w,{ref:i,labelRef:o,x:f.x,y:f.y,tickTextProps:"auto"===r?{width:void 0}:{width:r},width:u.width,height:u.height,className:(0,jB.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Z1={allowDataOverflow:PB.allowDataOverflow,allowDecimals:PB.allowDecimals,allowDuplicatedCategory:PB.allowDuplicatedCategory,angle:PB.angle,axisLine:Zi.axisLine,hide:!1,includeHidden:PB.includeHidden,interval:PB.interval,label:!1,minTickGap:PB.minTickGap,mirror:PB.mirror,orientation:PB.orientation,padding:PB.padding,reversed:PB.reversed,scale:PB.scale,tick:PB.tick,tickCount:PB.tickCount,tickLine:Zi.tickLine,tickSize:Zi.tickSize,type:PB.type,niceTicks:PB.niceTicks,width:PB.width,yAxisId:0},Z2=ew.memo(e=>{var t=AU(e,Z1);return ew.createElement(ew.Fragment,null,ew.createElement(ZQ,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),ew.createElement(Z0,t))},ZT);function Z5({machines:e,defaultMachineId:t,className:n,...r}){let[a,i]=ew.useState(t??e[0]?.id),o=e.find(e=>e.id===a)??e[0],[l,s]=ew.useState({});if(!o)return null;let c=l[o.id]??o.selectedMetricId??o.metrics[0]?.id,d=o.metrics.find(e=>e.id===c)??o.metrics[0];return(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-card flex h-full min-h-0 flex-col rounded-[var(--surface-card-radius)] border","vtl-performance-monitor",n),...r,children:[(0,eb.jsx)(mu,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(my,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mw,{value:e.id,children:e.name},e.id))})}),(0,eb.jsxs)("div",{className:"mt-3 grid min-h-0 flex-1 grid-cols-[14rem_minmax(0,1fr)] border-t",children:[(0,eb.jsx)("div",{className:"min-h-0 overflow-auto border-r p-2",children:o.metrics.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>s(t=>({...t,[o.id]:e.id})),className:(0,eI.cn)("grid w-full grid-cols-[3.75rem_minmax(0,1fr)] gap-3 px-2 py-2 text-left transition-colors",e.id===c&&"bg-muted"),children:[(0,eb.jsx)(Z9,{data:e.data,color:e.color}),(0,eb.jsxs)("span",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"block truncate text-base leading-tight",children:e.label}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.value}),e.detail?(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.detail}):null]})]},e.id))}),(0,eb.jsxs)("div",{className:"min-h-0 overflow-auto p-5",children:[(0,eb.jsxs)("div",{className:"grid grid-cols-[minmax(0,1fr)_auto] items-start gap-5",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("h2",{className:"text-4xl leading-none font-semibold tracking-normal",children:d?.title}),d?.subtitle?(0,eb.jsx)("p",{className:"mt-1 text-base text-muted-foreground",children:d.subtitle}):null]}),(0,eb.jsx)("div",{className:"text-right text-sm text-muted-foreground",children:d?.detail})]}),d?(0,eb.jsx)(Z4,{metric:d}):null]})]})]})}function Z4({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z8,{segments:e.composition}),(0,eb.jsx)(Z7,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z3,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:2})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mt-5 grid grid-cols-2 gap-3",children:(e.panels??[]).map(e=>(0,eb.jsx)(Z3,{panel:e},e.id))}),(0,eb.jsx)(Z7,{details:e.details,columns:3})]})}function Z3({panel:e,size:t="normal"}){let n={short:"h-[4rem]",normal:"full"===e.span?"h-20":"h-24",large:"h-[17.5rem]",tall:"h-[21.5rem]"}[t];return(0,eb.jsxs)("div",{className:(0,eI.cn)("mt-5","full"===e.span&&"col-span-2"),children:[(0,eb.jsxs)("div",{className:"mb-1 flex items-center justify-between text-sm",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:e.title}),e.value?(0,eb.jsx)("span",{className:"text-muted-foreground tabular-nums",children:e.value}):null]}),(0,eb.jsx)(Je,{data:e.data,color:e.color,className:(0,eI.cn)("w-full",n)})]})}function Z6(){return(0,eb.jsxs)("div",{className:"mt-1 flex justify-between text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{children:"60 秒"}),(0,eb.jsx)("span",{children:"0"})]})}function Z8({segments:e}){let t=e&&e.length>0?e:[{label:"used",value:64},{label:"available",value:36}];return(0,eb.jsxs)("div",{className:"mt-5",children:[(0,eb.jsx)("div",{className:"mb-1 text-sm text-muted-foreground",children:"内存组合"}),(0,eb.jsx)("div",{className:"flex h-[3.25rem] w-full overflow-hidden border border-primary/75 bg-background",children:t.map((e,n)=>(0,eb.jsx)("div",{className:(0,eI.cn)("h-full border-r border-primary/75 last:border-r-0",0===n?"bg-primary/20":n===t.length-1?"bg-background":"bg-primary/8"),style:{width:`${Math.max(0,e.value)}%`}},`${e.label}-${n}`))})]})}function Z7({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,eI.cn)("mt-5 grid gap-x-10 gap-y-4",2===t&&"grid-cols-2",3===t&&"grid-cols-3",4===t&&"grid-cols-4"),children:e.map(([e,t])=>(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"text-xs text-muted-foreground",children:e}),(0,eb.jsx)("div",{className:"truncate text-2xl leading-tight tabular-nums",children:t})]},e))}):null}function Z9({data:e,color:t}){return(0,eb.jsx)(Je,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Je({data:e,color:t="default",className:n,strokeWidth:r=1.6,compact:a=!1}){let i=ew.useMemo(()=>(e.length>1?e:[0,0]).map((e,t)=>({index:t,value:Math.max(0,Math.min(100,e))})),[e]),o=ew.useMemo(()=>({value:{label:"Value",color:"danger"===t?"var(--destructive)":"var(--foreground)"}}),[t]);return(0,eb.jsx)(Vr,{config:o,className:(0,eI.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Y4,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZO,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(Zq,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Z2,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(BK,{cursor:!1,content:(0,eb.jsx)(Vi,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(YJ,{dataKey:"value",type:"monotone",fill:"var(--color-value)",fillOpacity:"danger"===t?.16:.12,stroke:"var(--color-value)",strokeWidth:r,isAnimationActive:!1,dot:!1,activeDot:!1})]})})}Z2.displayName="YAxis";let Jt=(0,ek.default)("badge-alert",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]),Jn=(0,ek.default)("circle-pause",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]]),Jr={name:"名称",cpu:"CPU",memoryMb:"内存",diskMbps:"磁盘",networkMbps:"网络"};function Ja({machines:e,defaultMachineId:t,className:n,...r}){let[a,i]=ew.useState(t??e[0]?.id),[o,l]=ew.useState("cpu"),[s,c]=ew.useState("desc"),[d,u]=ew.useState({}),f=e.find(e=>e.id===a)??e[0],h=ew.useMemo(()=>{if(!f)return[];let e=[...function(e){let t=new Map,n=new Map;for(let t of e)void 0!==t.pid&&n.set(t.pid,t);for(let a of e){var r;let e=function e(t,n,r=new Set){void 0!==t.pid&&r.add(t.pid);let a=void 0!==t.parentPid?n.get(t.parentPid):void 0;return!a||void 0===a.pid||r.has(a.pid)||["bash","containerd","dockerd","explorer","init","kernel_task","launchd","services","sh","smss","svchost","system","systemd","wininit","winlogon","zsh"].includes(Jd(a))?t:e(a,n,r)}(a,n),i=Jd(e),o=t.get(i)??{kind:"group",id:i,name:(r=e,r.appName?.trim()||r.name.trim().replace(/\.(exe|com)$/i,"")||r.id),children:[],status:[],cpu:0,memoryMb:0,diskMbps:0,networkMbps:0};o.children.push(a),o.cpu+=a.cpu,o.memoryMb+=a.memoryMb,o.diskMbps+=a.diskMbps,o.networkMbps+=a.networkMbps,o.status=function(e,t){let n=new Set(e??[]);for(let e of t??[])n.add(e);return Array.from(n)}(o.status,a.status),t.set(i,o)}return Array.from(t.values()).map(e=>({...e,cpu:Jf(Math.min(100,e.cpu)),memoryMb:Jf(e.memoryMb),diskMbps:Jf(e.diskMbps),networkMbps:Jf(e.networkMbps)}))}(f.processes)].sort((e,t)=>Ju(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jc(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>Ju(e,t,o,s)))t.push(Jc(e,1))}return t},[f,d,s,o]),m=ew.useMemo(()=>h.map(e=>({memoryMb:e.memoryMb,diskMbps:e.diskMbps,networkMbps:e.networkMbps})),[h]);function p(e){e===o?c(e=>"asc"===e?"desc":"asc"):(l(e),c("name"===e?"asc":"desc"))}return f?(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-card flex h-full min-h-0 flex-col rounded-[var(--surface-card-radius)] border","vtl-process-monitor",n),...r,children:[(0,eb.jsx)(mu,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(my,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mw,{value:e.id,children:e.name},e.id))})}),(0,eb.jsxs)("div",{className:"mt-3 grid h-14 shrink-0 grid-cols-[minmax(12rem,1fr)_6.25rem_repeat(4,minmax(5rem,7rem))] border-y text-sm",children:[(0,eb.jsxs)("button",{type:"button",onClick:()=>p("name"),className:"flex items-end px-3 pb-2 text-left text-muted-foreground",children:["名称",(0,eb.jsx)(Ji,{active:"name"===o,direction:s})]}),(0,eb.jsx)("div",{className:"flex items-end px-3 pb-2 text-muted-foreground",children:"状态"}),["cpu","memoryMb","diskMbps","networkMbps"].map(e=>{var t,n;return(0,eb.jsxs)("button",{type:"button",onClick:()=>p(e),className:"grid content-end border-l px-3 pb-2 text-right",children:[(0,eb.jsx)("span",{className:"text-lg leading-none text-foreground",children:(t=f.totals,"cpu"===(n=e)?`${Math.round(t.cpu)}%`:"memoryMb"===n?`${Math.round(t.memory)}%`:"diskMbps"===n?`${Math.round(t.disk)}%`:"networkMbps"===n?`${Math.round(t.network)}%`:"")}),(0,eb.jsxs)("span",{className:"mt-1 text-xs text-muted-foreground",children:[Jr[e],(0,eb.jsx)(Ji,{active:o===e,direction:s,className:"ml-1 inline-flex"})]})]},e)})]}),(0,eb.jsx)("div",{className:"vtl-scrollbar-hidden min-h-0 flex-1 overflow-auto",children:h.map(e=>{var t;return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-9 grid-cols-[minmax(12rem,1fr)_6.25rem_repeat(4,minmax(5rem,7rem))] items-center text-sm","group"===e.kind&&"bg-muted/35"),children:[(0,eb.jsx)(Jo,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(Jl,{platform:f.platform,status:e.status}),(0,eb.jsx)(Js,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(Js,{value:e.memoryMb,max:Jh(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${Jm(t/1024)} GB`:`${Jm(t)} MB`}),(0,eb.jsx)(Js,{value:e.diskMbps,max:Math.max(1,Jh(m,"diskMbps")),label:`${Jm(e.diskMbps)} MB/秒`}),(0,eb.jsx)(Js,{value:e.networkMbps,max:Math.max(1,Jh(m,"networkMbps")),label:`${Jm(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function Ji({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jA:jI,{className:(0,eI.cn)("ml-1 size-3",n)}):null}function Jo({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xf:m0;return(0,eb.jsxs)("button",{type:"button","aria-expanded":t,onClick:n,className:"flex h-full min-w-0 items-center gap-2 px-3 text-left outline-none transition-colors hover:bg-muted/55 focus-visible:ring-[3px] focus-visible:ring-ring/20",children:[(0,eb.jsx)(r,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"size-2 rounded-sm bg-foreground/65"}),(0,eb.jsxs)("span",{className:"min-w-0 truncate font-medium",children:[e.name," (",e.children.length,")"]})]})}return(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 px-3",style:{paddingLeft:e.depth>0?34:void 0},children:[e.depth>0?(0,eb.jsx)("span",{className:"size-1.5 rounded-full bg-muted-foreground/70"}):(0,eb.jsx)("span",{className:"size-1.5 rounded-full bg-foreground/65"}),(0,eb.jsx)("span",{className:(0,eI.cn)("truncate",0===e.depth&&"font-medium"),children:e.name}),e.process.pid?(0,eb.jsx)("span",{className:"shrink-0 ui-text-kbd text-muted-foreground",children:e.process.pid}):null]})}function Jl({platform:e,status:t}){return t?.length?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 px-3 text-muted-foreground",children:[t.includes("suspended")?(0,eb.jsx)(Jn,{"aria-label":"linux"===e?"挂起进程":"挂起",className:"size-4"}):null,t.includes("auto-restart")?(0,eb.jsx)(lQ,{"aria-label":"linux"===e?"自动重启进程":"自动重启",className:"size-4"}):null,t.includes("running")?(0,eb.jsx)(Jt,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function Js({value:e,max:t,label:n}){let r=Math.min(1,Math.max(0,e/Math.max(1,t))),a=r>.78,i=a?`color-mix(in oklch, var(--destructive) ${Math.round(18+42*r)}%, var(--background))`:`color-mix(in oklch, var(--foreground) ${Math.round(5+20*r)}%, var(--background))`;return(0,eb.jsx)("div",{className:"vtl-process-heat-cell h-full border-l px-3 text-right tabular-nums","data-hot":a?"":void 0,style:{background:i},children:(0,eb.jsx)("span",{className:(0,eI.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jc(e,t){return{kind:"process",id:e.id,process:e,depth:t,name:e.appName&&0===t?e.appName:e.name,status:e.status,cpu:e.cpu,memoryMb:e.memoryMb,diskMbps:e.diskMbps,networkMbps:e.networkMbps}}function Jd(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function Ju(e,t,n,r){let a="asc"===r?1:-1;return"name"===n?e.name.localeCompare(t.name)*a:(e[n]-t[n])*a}function Jf(e){return Math.round(10*e)/10}function Jh(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function Jm(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function Jp({className:e}){let t=Jx("/api/local/machines/processes"),n=Jv("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Ja,{machines:r,className:(0,eI.cn)("h-full min-h-0 w-full",e)})}function Jg({className:e}){let t=Jx("/api/local/machines/performance"),n=Jv("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Z5,{machines:r,className:(0,eI.cn)("h-full min-h-0 w-full",e)})}function Jx(e){let[t,n]=ew.useState([]);return ew.useEffect(()=>{let t=!0,r=!1;async function a(){if(!r){r=!0;try{let r=await fetch(eR(e),{cache:"no-store"});if(!r.ok)return;let a=await r.json();t&&n(a.machines)}catch{t&&n([])}finally{r=!1}}}a();let i=window.setInterval(a,2e3);return()=>{t=!1,window.clearInterval(i)}},[e]),t}function Jv(e){let{machines:t}=xk(),[n,r]=ew.useState([]),a=ew.useMemo(()=>t.filter(e=>!e.isLocal&&"online"===e.status).map(e=>e.id),[t]);return ew.useEffect(()=>{if(0===a.length)return void r([]);let t=!0,n=!1;async function i(){if(!n){n=!0;try{let n=await Promise.all(a.map(async t=>{try{return(await sj(t,e)).machines??[]}catch{return[]}}));t&&r(n.flat())}finally{n=!1}}}i();let o=window.setInterval(i,5e3);return()=>{t=!1,window.clearInterval(o)}},[a,e]),n}let Jb=(0,ek.default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),Jy=(0,ek.default)("radio",[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]),Jw={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},Jj=[{id:"powershell",title:"PowerShell",shell:"PowerShell",cwd:"D:\\Projects\\Vantaloom-ui",status:"idle",initialOutput:"PowerShell 7.6.1\r\nPS D:\\Projects\\Vantaloom-ui> "}];function Jk(e,t,n){return e.getPropertyValue(t).trim()||n}function JN(e,t=!1){let n=getComputedStyle(e),r=Jk(n,"--foreground","#18181b"),a=Jk(n,"--terminal-background",Jk(n,"--background","#ffffff")),i="transparent"===a?Jk(n,"--background","#ffffff"):a,o=Jk(n,"--muted-foreground","#71717a"),l=Jk(n,"--border","#e4e4e7"),s=Jk(n,"--selection","#18181b");return{background:a,foreground:r,cursor:t?"transparent":r,cursorAccent:t?"transparent":i,selectionBackground:`color-mix(in oklch, ${s} 18%, transparent)`,selectionForeground:Jk(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:Jk(n,"--terminal-red","#bf616a"),green:Jk(n,"--terminal-green","#5e8c61"),yellow:Jk(n,"--terminal-yellow","#b06f3c"),blue:Jk(n,"--terminal-blue","#5e81ac"),magenta:Jk(n,"--terminal-magenta","#b48ead"),cyan:Jk(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:Jk(n,"--terminal-bright-red","#d06f79"),brightGreen:Jk(n,"--terminal-bright-green","#6b9a70"),brightYellow:Jk(n,"--terminal-bright-yellow","#c2824b"),brightBlue:Jk(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:Jk(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:Jk(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JS(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JC({initialOutput:t,data:n,dataKey:r,options:a,readOnly:i=!1,autoFocus:o=!1,localEcho:l=!1,onData:s,onResize:c,onReady:d,labels:u,className:f,terminalClassName:h,...m}){let p=ew.useMemo(()=>({loading:Jw.loading,...u}),[u]),g=ew.useRef(null),x=ew.useRef(null),v=ew.useRef(void 0),b=ew.useRef(s),y=ew.useRef(c),w=ew.useRef(d),j=ew.useRef(a),k=ew.useRef(i),N=ew.useRef(l),S=ew.useRef(!1),C=ew.useRef(void 0),M=ew.useRef(!1),[E,O]=ew.useState(!1);return ew.useEffect(()=>{b.current=s,y.current=c,w.current=d,j.current=a,k.current=i,N.current=l},[l,s,d,c,a,i]),ew.useEffect(()=>{let n,r=!1,a=[];!async function(){var i;let l,s,c,d,u;if(!g.current||M.current)return;M.current=!0;let[{Terminal:f},{FitAddon:h},{SearchAddon:m},{WebLinksAddon:p}]=await Promise.all([e.A(93626),e.A(16118),e.A(24306),e.A(46866)]);if(r||!g.current)return;let C=new f({convertEol:!1,cursorBlink:!0,cursorStyle:"block",drawBoldTextInBrightColors:!1,fontFamily:(l=getComputedStyle(i=g.current),u=(c=Jk(l,"--font-family-mono",s='"Cascadia Mono", "Cascadia Code", Consolas, "SFMono-Regular", "Liberation Mono", monospace'),d=getComputedStyle(i),c.replace(/var\((--[a-zA-Z0-9-_]+)(?:,[^)]+)?\)/g,(e,t)=>d.getPropertyValue(t).trim()||"")).trim(),`"Cascadia Mono", "Cascadia Code", Consolas, ${u||s}`),fontSize:13,letterSpacing:0,lineHeight:1.25,macOptionIsMeta:!0,minimumContrastRatio:4.5,scrollback:5e3,theme:JN(g.current),...j.current,allowTransparency:!0}),E=new h,P=new m,z=new p;function I(){try{E.fit(),y.current?.({cols:C.cols,rows:C.rows})}catch{}}for(let e of(C.loadAddon(E),C.loadAddon(P),C.loadAddon(z),C.open(g.current),x.current=C,v.current=E,O(!0),requestAnimationFrame(I),(n=new ResizeObserver(I)).observe(g.current),a.push(C.onData(e=>{k.current||(N.current&&("\r"===e?C.write("\r\n"):""===e?C.write("\b \b"):C.write(e)),b.current?.(e))})),JS(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:P,webLinksAddon:z,fit:I,focus:()=>C.focus(),clear:()=>C.clear(),setCursorSuppressed:function(e){let t=g.current;t&&(S.current=e,t.toggleAttribute("data-vtl-terminal-cursor-suppressed",e),C.options.theme=JN(t,e))},write:(e,t)=>C.write(e,t),writeln:e=>C.writeln(e)}),o&&C.focus()}();let i=new MutationObserver(()=>{let e=x.current,t=g.current;e&&t&&(e.options.theme=JN(t,S.current))});return i.observe(document.documentElement,{attributeFilter:["class","style"],attributes:!0}),()=>{for(let e of(r=!0,i.disconnect(),n?.disconnect(),a))e.dispose();x.current?.dispose(),x.current=null,v.current=void 0,S.current=!1,M.current=!1,O(!1)}},[o,t]),ew.useEffect(()=>{let e=x.current;if(e&&C.current!==r)for(let t of(C.current=r,JS(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,eI.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,eI.cn)("vtl-terminal-xterm size-full overflow-hidden p-1.5 font-mono","[&_.xterm]:h-full [&_.xterm]:p-0 [&_.xterm-viewport]:!bg-transparent","[&_.xterm-screen]:!bg-transparent [&_.xterm-helper-textarea]:!outline-none","[&[data-vtl-terminal-cursor-suppressed]_.xterm-cursor]:!opacity-0","[&_.xterm-viewport::-webkit-scrollbar]:w-2.5 [&_.xterm-viewport::-webkit-scrollbar-track]:bg-transparent","[&_.xterm-viewport::-webkit-scrollbar-thumb]:rounded-full [&_.xterm-viewport::-webkit-scrollbar-thumb]:border-[3px]","[&_.xterm-viewport::-webkit-scrollbar-thumb]:border-transparent [&_.xterm-viewport::-webkit-scrollbar-thumb]:bg-border [&_.xterm-viewport::-webkit-scrollbar-thumb]:bg-clip-content",h)}),!E&&(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-muted-foreground ui-text-code",children:p.loading})]})}function JM({status:e="idle"}){return"running"===e?(0,eb.jsx)(Jb,{className:"size-3.5 text-foreground"}):"success"===e?(0,eb.jsx)(eO,{className:"size-3.5 text-foreground"}):"error"===e?(0,eb.jsx)(eE,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(yM,{className:"size-3.5 text-muted-foreground"})}function JE({session:e}){return e.aiControlled?(0,eb.jsx)(Jy,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(JM,{status:e.status})}function JO({sessions:e,defaultSessions:t=Jj,activeSessionId:n,defaultActiveSessionId:r,onActiveSessionChange:a,onSessionsChange:i,onCreateSession:o,onCloseSession:l,onSessionData:s,onSessionResize:c,onSessionReady:d,showTabs:u=!0,allowCreateSession:f=!0,readOnly:h=!1,localEcho:m=!1,terminalOptions:p,labels:g,className:x,tabListClassName:v,terminalClassName:b,...y}){let w=ew.useMemo(()=>({...Jw,...g,status:{...Jw.status,...g?.status}}),[g]),[j,k]=ew.useState(t),N=e??j,S=N[0],[C,M]=ew.useState(r??S?.id),E=n??(N.some(e=>e.id===C)?C:S?.id),O=N.find(e=>e.id===E)??S;function P(t){void 0===e&&k(t),i?.(t)}function z(e){e.disabled||(void 0===n&&M(e.id),a?.(e.id,e))}return(0,eb.jsxs)("div",{"data-slot":"terminal-tab-group",className:(0,eI.cn)("vtl-surface-panel grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",u?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",x),...y,children:[u&&(0,eb.jsxs)("div",{"data-slot":"terminal-tab-list",role:"tablist","aria-label":w.terminalList,className:(0,eI.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uO,{className:"ml-1 size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto",children:N.map(e=>{let t=e.id===O?.id;return(0,eb.jsxs)("div",{className:(0,eI.cn)("group flex h-7 min-w-0 shrink-0 items-center rounded-md border border-transparent ui-text-control","transition-colors hover:bg-background/80",t?"bg-background text-foreground shadow-xs":"text-muted-foreground",e.disabled&&"pointer-events-none opacity-50"),children:[(0,eb.jsxs)("button",{type:"button",role:"tab","aria-selected":t,"aria-controls":`terminal-panel-${e.id}`,disabled:e.disabled,onClick:()=>z(e),className:"flex h-full min-w-0 items-center gap-1.5 rounded-md px-2 text-left outline-none focus-visible:ring-[3px] focus-visible:ring-ring/20",children:[(0,eb.jsx)(JE,{session:e}),(0,eb.jsx)("span",{className:"max-w-36 truncate",children:e.title}),e.shell&&(0,eb.jsx)("span",{className:"hidden text-muted-foreground ui-text-kbd sm:inline",children:e.shell})]}),e.closable&&(0,eb.jsx)("button",{type:"button","aria-label":w.closeTerminal(e.title),onClick:t=>{t.stopPropagation();l?.(e.id,e);let n=N.filter(t=>t.id!==e.id);if(P(n),e.id===E){let e=n.at(-1);e&&z(e)}},className:"mr-1 grid size-4 place-items-center rounded-sm text-muted-foreground opacity-0 outline-none transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/20 group-hover:opacity-100",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e.id)})}),f&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":w.newTerminal,onClick:function(){let e=o?.()??{id:`terminal-${Date.now()}`,title:`Terminal ${N.length+1}`,status:"idle",initialOutput:"",closable:!0};P([...N,e]),z(e)},className:"size-7 shrink-0",children:(0,eb.jsx)(lJ,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{"data-slot":"terminal-tab-panels",className:"relative min-h-0 overflow-hidden",children:N.map(e=>{let t=e.id===O?.id;return(0,eb.jsx)(JP,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JP({session:e,selected:t,terminalOptions:n,readOnly:r,localEcho:a,onSessionData:i,onSessionResize:o,onSessionReady:l,labels:s,terminalClassName:c}){let d=ew.useRef(null),u=ew.useRef(t);return ew.useEffect(()=>{if(t&&!u.current&&d.current){let e=d.current;requestAnimationFrame(()=>{e&&(e.fit(),e.terminal.refresh(0,e.terminal.rows-1),e.terminal.focus())})}u.current=t},[t]),(0,eb.jsx)("div",{id:`terminal-panel-${e.id}`,role:"tabpanel","aria-hidden":!t,"data-active":t,className:"absolute inset-0 min-h-0",style:{display:t?"block":"none"},children:(0,eb.jsx)(JC,{initialOutput:e.initialOutput,options:{...n,...e.options},readOnly:r||e.disabled,localEcho:a,autoFocus:t,onData:t=>i?.(e.id,t),onResize:t=>o?.(e.id,t),onReady:t=>{d.current=t,l?.(e.id,t)},labels:s,terminalClassName:c})})}function Jz({className:e,scopeId:t,state:n,onStateChange:r}){let[a,i]=ew.useState([]),[o,l]=ew.useState([]),[s,c]=ew.useState(),[d,u]=ew.useState("local"),[f,h]=ew.useState(),[m,p]=ew.useState(!1),[g,x]=ew.useState(!1),v=ew.useRef(new Map),b=ew.useRef(new Map),y=ew.useRef(new Map),w=ew.useRef(new Map),j=ew.useRef(new Map),k=ew.useRef(new Map),N=ew.useRef(new Map),S=ew.useRef(new Map),C=ew.useRef(!1),M=ew.useRef(n?.autoStart===!1),E=ew.useRef(n),O=ew.useRef(r),P=Array.isArray(n?.sessionIds)?n.sessionIds.join("\0"):"__all__",z=t?.trim()||void 0,I=z??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{O.current=r},[r]);let A=a.find(e=>e.id===d)??a[0],T=A?.shells?.find(e=>e.id===f)??A?.shells?.[0],R=ew.useMemo(()=>o.map(e=>e.id),[o]),D=ew.useMemo(()=>o.filter(e=>e.aiControlled).map(e=>e.id),[o]),_=R.join("\0"),L=D.join("\0"),$=ew.useCallback((e,t)=>{let n=b.current.get(e);if(t){let t=j.current.get(e);void 0!==t&&(window.clearTimeout(t),j.current.delete(e))}n?.setCursorSuppressed(t)},[]),F=ew.useCallback(e=>{let t=j.current.get(e);void 0!==t&&window.clearTimeout(t);let n=window.setTimeout(()=>{j.current.delete(e),$(e,!1)},90);j.current.set(e,n)},[$]),B=ew.useCallback(e=>{let t=w.current.get(e),n=b.current.get(e);if(!t||!n||t.writing)return;if(!t.buffer){w.current.delete(e),F(e);return}void 0!==t.drainTimer&&(window.clearTimeout(t.drainTimer),t.drainTimer=void 0);let r=t.buffer.slice(0,65536);t.buffer=t.buffer.slice(r.length),t.writing=!0,$(e,!0);try{n.write(r,()=>{(t.writing=!1,b.current.has(e))?t.buffer?t.drainTimer=window.setTimeout(()=>B(e),0):(w.current.delete(e),F(e)):w.current.delete(e)})}catch{t.writing=!1,w.current.delete(e),F(e)}},[F,$]),V=ew.useCallback((e,t)=>{if(!t)return;if(!b.current.get(e))return void y.current.set(e,`${y.current.get(e)??""}${t}`);let n=w.current.get(e);(n||(n={buffer:"",writing:!1},w.current.set(e,n)),n.buffer+=t,$(e,!0),n.buffer.length>=65536)?B(e):n.writing||void 0!==n.drainTimer||(n.drainTimer=window.setTimeout(()=>B(e),8))},[B,$]),H=ew.useCallback((e,t)=>{(k.current.set(e,t.sequence),"output"===t.type&&t.data)?V(e,t.data):"status"===t.type&&t.status&&l(n=>n.map(n=>n.id===e?{...n,status:t.status??n.status,updatedAt:t.createdAt}:n))},[V]),U=ew.useCallback(e=>{if(v.current.has(e))return;let t=new EventSource(function(e,t=0){let n=new URLSearchParams;t>0&&n.set("after",String(t));let r=n.toString();return eR(`/api/local/terminals/sessions/${encodeURIComponent(e)}/events${r?`?${r}`:""}`)}(e,k.current.get(e)??0));t.onmessage=t=>{try{H(e,JSON.parse(t.data))}catch{return}},v.current.set(e,t)},[H]),q=ew.useCallback(async()=>{if(A&&!m){M.current=!1,p(!0);try{let e=await fu({machineId:A.id,scopeId:z,shell:T?.id,cwd:A.defaultCwd,cols:100,rows:30});l(t=>t.some(t=>t.id===e.id)?t:[...t,e]),c(e.id),U(e.id)}catch{return}finally{p(!1)}}},[m,U,A,T,z]);function W(e){let t=N.current.get(e);return t||(t={buffer:"",inFlight:!1},N.current.set(e,t)),t}return ew.useEffect(()=>{let e=!0;return x(!1),async function(){try{let t=E.current,n=t?.sessionIds,r=Array.isArray(n)?new Set(n):void 0,[a,o]=await Promise.all([fc(),fd(z)]);if(!e)return;let s=r?o.sessions.filter(e=>r.has(e.id)):o.sessions;C.current=!1,M.current=t?.autoStart===!1,i(a.machines),l(s),c(e=>{let n=t?.activeSessionId??e;return n&&s.some(e=>e.id===n)?n:s[0]?.id});let d=a.machines[0];if(d){let e=a.machines.find(e=>e.id===t?.selectedMachineId)??d;u(e.id),h(n=>t?.selectedShellId&&e.shells?.some(e=>e.id===t.selectedShellId)?t.selectedShellId:n&&e.shells?.some(e=>e.id===n)?n:e.shells?.[0]?.id)}}finally{e&&x(!0)}}(),()=>{e=!1}},[P,z,I]),ew.useEffect(()=>{g&&O.current?.({sessionIds:R,activeSessionId:s,selectedMachineId:d,selectedShellId:f,autoStart:!M.current,aiControlledSessionIds:D})},[s,D,L,g,d,f,R,_]),ew.useEffect(()=>{let e=new Set(R);for(let e of o)U(e.id);for(let[t,n]of v.current)e.has(t)||(n.close(),v.current.delete(t))},[U,R,o]),ew.useEffect(()=>{!g||C.current||M.current||o.length>0||0===a.length||(C.current=!0,q())},[q,g,a.length,o.length]),ew.useEffect(()=>()=>{for(let e of v.current.values())e.close();for(let e of N.current.values())void 0!==e.timer&&window.clearTimeout(e.timer);for(let e of w.current.values())void 0!==e.drainTimer&&window.clearTimeout(e.drainTimer);for(let[e,t]of j.current)window.clearTimeout(t),$(e,!1);N.current.clear(),w.current.clear(),j.current.clear()},[$]),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid h-full min-h-0 w-full grid-rows-[auto_minmax(0,1fr)] overflow-hidden rounded-[inherit] border bg-card",e),children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5 border-b bg-muted/35 px-2 py-1.5",children:[(0,eb.jsxs)(gR,{value:A?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xm,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bn,{className:"size-3.5"}),(0,eb.jsx)(g$,{placeholder:"机器"})]}),(0,eb.jsx)(xx,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gR,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xm,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(g$,{placeholder:"Shell"})}),(0,eb.jsx)(xx,{align:"start",children:A?.shells?.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!A||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lJ,{className:"size-4"})})]}),(0,eb.jsx)(JO,{sessions:o.map(JI),activeSessionId:s,allowCreateSession:!1,localEcho:!1,labels:{loading:"启动终端...",terminalList:"终端会话",closeTerminal:e=>`关闭 ${e}`},onActiveSessionChange:e=>c(e),onCloseSession:e=>{let t,n,r;return v.current.get(e)?.close(),v.current.delete(e),b.current.delete(e),y.current.delete(e),t=w.current.get(e),t?.drainTimer!==void 0&&window.clearTimeout(t.drainTimer),w.current.delete(e),k.current.delete(e),void 0!==(n=j.current.get(e))&&(window.clearTimeout(n),j.current.delete(e)),r=N.current.get(e),void(r?.timer!==void 0&&window.clearTimeout(r.timer),N.current.delete(e),S.current.delete(e),l(t=>{let n=t.filter(t=>t.id!==e);return 0===n.length&&(M.current=!0),c(t=>t&&t!==e&&n.some(e=>e.id===t)?t:n[0]?.id),n}),ff(e).catch(()=>{}))},onSessionData:function(e,t){let n=W(e);n.buffer+=t,function e(t){let n=W(t);n.inFlight||void 0!==n.timer||(n.timer=window.setTimeout(()=>{n.timer=void 0,function(t){let n=N.current.get(t);if(!n||n.inFlight)return;let r=n.buffer;if(n.buffer="",!r){void 0===n.timer&&N.current.delete(t);return}n.inFlight=!0,fh(t,r).catch(()=>{}).finally(()=>{let n=N.current.get(t);n&&(n.inFlight=!1,n.buffer?e(t):void 0===n.timer&&N.current.delete(t))})}(t)},6))}(e)},onSessionResize:function(e,t){let n=`${t.cols}x${t.rows}`;S.current.get(e)!==n&&(S.current.set(e,n),fm(e,t).then(e=>{l(t=>t.map(t=>t.id===e.id?{...t,...e}:t))}).catch(()=>{}))},onSessionReady:function(e,t){b.current.set(e,t);let n=y.current.get(e);n&&(y.current.delete(e),V(e,n))},className:"min-h-0 rounded-none border-0"})]})}function JI(e){return{id:e.id,title:e.title,shell:e.ordinal?`T${e.ordinal}`:"",cwd:e.cwd,status:function(e){switch(e){case"running":return"running";case"exited":case"closed":return"success";case"failed":return"error";default:return"idle"}}(e.status),closable:!0,initialOutput:"",aiControlled:e.aiControlled,controller:e.controller}}function JA(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=uH("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(H8,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(Gy,{className:`${n} border-0`,file:a??r.file,value:e.defaultValue??r.defaultValue??"",defaultValue:e.defaultValue??r.defaultValue,view:e.defaultView,mode:e.defaultMode,modified:e.modified,onValueChange:n=>t.onTabChange?.({...e,defaultValue:n,modified:!0}),onViewChange:n=>t.onTabChange?.({...e,defaultView:n}),onModeChange:n=>t.onTabChange?.({...e,defaultMode:n}),onSave:t.onSaveFileTab?n=>t.onSaveFileTab?.(e,n):void 0,onHistory:()=>t.onOpenFileHistory?.(e),labels:{review:"审阅",edit:"编辑",view:"视图",code:"代码",preview:"预览",hex:"十六进制",actions:"文件菜单",save:"保存",saving:"保存中",history:"历史版本"}})}case"browser-tab-viewer":return(0,eb.jsx)(Xu,{className:`${n} border-0`,defaultUrl:e.defaultUrl??uH("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=uH("diff-tab-viewer");return(0,eb.jsx)(qS,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=uH("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(H8,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qm,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:JT(e)},source:void 0!==e.defaultValue?{type:JT(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(Jz,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function JT(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function JR(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e){case"multi-tab-system":{let e=t.nodeId,r=void 0!==t.tabs?t.tabs:[];return(0,eb.jsx)(GN,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:uV(n.kind),content:JA(n,{terminalScopeId:e?`${t.terminalScopeId??`canvas:node:${e}`}:tab:${n.id}`:t.terminalScopeId,terminalState:n.terminal,onTerminalStateChange:r=>e?t.onTabChange?.(e,{...n,terminal:r}):void 0,onRequestFileTab:()=>t.onRequestFileTab?.({nodeId:e,insertIndex:r.length}),onTabChange:n=>{e&&t.onTabChange?.(e,n)},onSaveFileTab:(n,r)=>e?t.onSaveFileTab?.(e,n,r):void 0,onOpenFileHistory:n=>e?t.onOpenFileHistory?.(e,n):void 0})})),activeTabId:t.activeTabId,detachable:!0,externalDropTypes:[G2],createLabel:"打开文件",emptyContent:(0,eb.jsx)(H8,{onChooseFile:()=>t.onRequestFileTab?.({nodeId:e,insertIndex:r.length})}),onCreateTab:()=>{t.onRequestFileTab?.({nodeId:e,insertIndex:r.length})},onActiveTabChange:n=>{e&&t.onActiveTabChange?.(e,n)},onTabsChange:n=>{if(!e)return;let a=n.map(e=>r.find(t=>t.id===e.id)).filter(e=>!!e);t.onTabsChange?.(e,a)},onTabDetach:(n,a)=>{if(!e)return!1;let i=r.find(e=>e.id===n.id);return!!i&&t.onTabDetach?.(e,i,{clientX:a.clientX,clientY:a.clientY})},onExternalTabDrop:({insertIndex:n,nativeEvent:r})=>{e&&t.onExternalTabDrop?.(e,n,r)}})}case"file-tree-panel":if(t.workspaceFolders)return(0,eb.jsx)(H3,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(XB,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(Jp,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(Jg,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(XL,{})});case"machine-file-management":return(0,eb.jsx)(Yi,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HE,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(G0,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GP,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(Gz,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"file-tab-viewer":case"browser-tab-viewer":case"diff-tab-viewer":case"data-table-tab-viewer":case"terminal-tab-group":return JA(t.tab??uH(e,`${e}-tab`),{terminalState:t.terminalState,terminalScopeId:t.terminalScopeId,onTerminalStateChange:t.onTerminalStateChange,onRequestFileTab:()=>t.onRequestFileTab?.({nodeId:t.nodeId}),onTabChange:e=>{t.nodeId&&t.onTabChange?.(t.nodeId,e)},onSaveFileTab:(e,n)=>t.nodeId?t.onSaveFileTab?.(t.nodeId,e,n):void 0,onOpenFileHistory:e=>t.nodeId?t.onOpenFileHistory?.(t.nodeId,e):void 0})}}function JD({kind:e,...t}){return JR(e,t)}let J_="application/vnd.vantaloom.agent-pane-shredder",JL="application/vnd.vantaloom.agent-pane-cutter";function J$(e,t){return(e?.activeSessionId??"")===(t.activeSessionId??"")&&(e?.selectedMachineId??"")===(t.selectedMachineId??"")&&(e?.selectedShellId??"")===(t.selectedShellId??"")&&(e?.autoStart??!0)===(t.autoStart??!0)&&(e?.sessionIds??[]).join("\0")===t.sessionIds.join("\0")&&(e?.aiControlledSessionIds??[]).join("\0")===(t.aiControlledSessionIds??[]).join("\0")}let JF=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(bt,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(Ug,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(Uc,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(s8,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(s9,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(Ug,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(Up,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Um,{})}];function JB(e,t,n=[50,50]){let r=e?.[t],a=r?.[0],i=r?.[1];return["number"==typeof a&&a>0?a:n[0],"number"==typeof i&&i>0?i:n[1]]}function JV(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function JH(e,t){return[e[t[0]]??50,e[t[1]]??50]}function JU({mode:e,sizes:t,onSizeGroupChange:n,children:r}){if("single"===e)return(0,eb.jsx)("div",{className:"size-full min-h-0",children:r[0]});if("horizontal-split"===e){let e=JB(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(a,e),onLayoutChanged:e=>n?.("outer",JH(e,a)),children:[(0,eb.jsx)(hN,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=JB(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(a,e),onLayoutChanged:e=>n?.("outer",JH(e,a)),children:[(0,eb.jsx)(hN,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=JB(t,"outer",[58,42]),a=JB(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("left",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=JB(t,"outer",[42,58]),a=JB(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("right",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=JB(t,"outer",[58,42]),a=JB(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("top",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=JB(t,"outer",[42,58]),a=JB(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("bottom",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=JB(t,"outer"),i=JB(t,"left"),o=JB(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(l,a),onLayoutChanged:e=>n?.("outer",JH(e,l)),children:[(0,eb.jsx)(hN,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(s,i),onLayoutChanged:e=>n?.("left",JH(e,s)),children:[(0,eb.jsx)(hN,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(c,o),onLayoutChanged:e=>n?.("right",JH(e,c)),children:[(0,eb.jsx)(hN,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function Jq({conversationId:e,ownerMachineId:t,index:n,content:r,clipboardItems:a,clipboardDraggingId:i,onAdd:o,onPanelDrop:l,onContentChange:s,onClear:c,onCut:d,workspaceFolders:u,onRequestFileTab:f,onOpenWorkspaceFile:h,onSaveFileTab:m,onOpenFileHistory:p}){let[g,x]=ew.useState();return(0,eb.jsx)("div",{"data-agent-pane":n,className:(0,eI.cn)("relative size-full min-h-0 min-w-0 overflow-hidden",r?.kind!=="subagent-conversation-panel"&&"bg-background","vtl-agent-workspace-pane",r?.kind==="subagent-conversation-panel"&&"vtl-agent-workspace-conversation-pane bg-transparent","panel"===g&&"ring-2 ring-foreground/60 ring-inset","shredder"===g&&"ring-2 ring-destructive/70 ring-inset","cutter"===g&&"ring-2 ring-amber-500/70 ring-inset"),onDragOver:e=>{let t=Array.from(e.dataTransfer.types);if(t.includes(JL)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(J_)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jP)&&(e.preventDefault(),e.dataTransfer.dropEffect="move",x("panel"))},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||x(void 0)},onDrop:e=>{if(Array.from(e.dataTransfer.types).includes(JL)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(J_)){e.preventDefault(),e.stopPropagation(),x(void 0),c(n);return}let t=function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id"),n=a.find(e=>e.id===t),r=n?n.payloads?.[jP]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jP);if(i)try{let e=JSON.parse(i);return n&&e.content?{item:n,content:e.content}:void 0}catch{return}}(e);t&&(e.preventDefault(),e.stopPropagation(),x(void 0),l(n,t.item,t.content))},children:r?(0,eb.jsx)("div",{className:(0,eI.cn)("size-full min-h-0 min-w-0 overflow-hidden rounded-none","vtl-agent-pane-content","subagent-conversation-panel"===r.kind&&"vtl-agent-pane-conversation-content",i&&"pointer-events-none"),children:jO(r)?JR(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{J$(r.terminal,e)||s(n,{...r,terminal:e})},workspaceFolders:u,nodeId:r.id,tabs:r.tabs,activeTabId:r.activeTabId,onRequestFileTab:({insertIndex:e})=>f?.(n,e),onOpenWorkspaceFile:h,onTabsChange:(e,t)=>{s(n,{...r,tabs:t,activeTabId:t.some(e=>e.id===r.activeTabId)?r.activeTabId:t[0]?.id})},onTabChange:(e,t)=>{"multi-tab-system"===r.kind?s(n,{...r,tabs:(r.tabs??[]).map(e=>e.id===t.id?t:e),activeTabId:t.id}):s(n,{...r,title:t.title,tab:t})},onSaveFileTab:(e,t,r)=>m?.(n,t,r),onOpenFileHistory:(e,t)=>p?.(n,t),onActiveTabChange:(e,t)=>{s(n,{...r,activeTabId:t})}}):(0,eb.jsx)(HE,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:r.events},r.id)},r.id):(0,eb.jsx)("div",{className:"vtl-agent-pane-empty grid size-full place-items-center p-4",children:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"rounded-full bg-background/90",onClick:o,"data-tour":"pane-add",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加"]})})})}function JW({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vx,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vb,{children:[(0,eb.jsx)(vy,{children:"没有匹配组件。"}),(0,eb.jsx)(vw,{heading:"可放入窗口",children:jC.map(e=>(0,eb.jsxs)(vj,{"data-tour":`pane-template-${e.id}`,value:`${e.title} ${e.description} ${e.keywords}`,onSelect:()=>n(e.id),children:[(0,eb.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsx)(vk,{children:"添加"})]},e.id))})]})]})})}function JK({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jO(e)?JR(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{J$(e.terminal,n)||i(t,{...e,terminal:n})},workspaceFolders:a,nodeId:e.id,tabs:e.tabs,activeTabId:e.activeTabId,onRequestFileTab:({insertIndex:e})=>c?.(t,e),onOpenWorkspaceFile:o,onTabsChange:(n,r)=>{i(t,{...e,tabs:r,activeTabId:r.some(t=>t.id===e.activeTabId)?e.activeTabId:r[0]?.id})},onTabChange:(n,r)=>{"multi-tab-system"===e.kind?i(t,{...e,tabs:(e.tabs??[]).map(e=>e.id===r.id?r:e),activeTabId:r.id}):i(t,{...e,title:r.title,tab:r})},onSaveFileTab:(e,n,r)=>l?.(t,n,r),onOpenFileHistory:(e,n)=>s?.(t,n),onActiveTabChange:(n,r)=>{i(t,{...e,activeTabId:r})}}):(0,eb.jsx)(HE,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let JG=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(ub,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uj,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(Uu,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(Uh,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(Ud,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uO,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(Uf,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uC,{})}];function JX(e,t,n){return Math.min(n,Math.max(t,e))}function JY({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加窗口",(0,eb.jsx)(xf,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(yJ,{align:t,sideOffset:6,className:"min-w-40",children:JG.map(t=>(0,eb.jsxs)(yQ,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function JZ({conversationId:e,ownerMachineId:t,panes:n,agentSide:r,columns:a,heights:i,onColumnsChange:o,onHeightsChange:l,onAddCard:s,onContentChange:c,onClear:d,workspaceFolders:u,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p}){let g=n.map((e,t)=>({content:e,index:t})).filter(e=>!!e.content),x=new Map(g.map(e=>[e.content.id,e])),v=g.map(e=>e.content.id).join("|"),b="left"===r,y=ew.useRef(0);0===y.current&&a.length>0&&(y.current=a.reduce((e,t)=>{let n=/^col-(\d+)/.exec(t.key);return n?Math.max(e,Number(n[1])):e},0));let w=ew.useCallback(()=>`col-${y.current+=1}`,[]),j=e=>o("function"==typeof e?e(a):e),k=e=>l("function"==typeof e?e(i):e),[N,S]=ew.useState(null),[C,M]=ew.useState(null),[E,O]=ew.useState(null),P=ew.useRef(null),z=ew.useRef(null),I=ew.useRef(null),A=ew.useRef(null);ew.useEffect(()=>{let e={};j(t=>{let n=new Set(g.map(e=>e.content.id)),r=t.map(e=>({...e,cardIds:e.cardIds.filter(e=>n.has(e))})).filter(e=>e.cardIds.length>0),a=new Set(r.flatMap(e=>e.cardIds)),o=g.map(e=>e.content.id).filter(e=>!a.has(e));if(o.length>0){r=r.map(e=>({...e,cardIds:[...e.cardIds]}));let t=P.current?.clientHeight??0,n=t=>t.cardIds.reduce((t,n,r)=>t+(e[n]??i[n]??320)+12*(r>0),0);for(let a of o){let i=!1;if(t>0)for(let o of r){let r=12*(o.cardIds.length>0),l=t-n(o)-r;if(l>=320){o.cardIds.push(a),i=!0;break}if(l>=140){o.cardIds.push(a),e[a]=Math.floor(l),i=!0;break}}i||(0===r.length||t>0?r.push({key:w(),width:360,cardIds:[a]}):r[0].cardIds.push(a))}}return!function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],a=t[n];if(!r||!a||r.key!==a.key||r.width!==a.width||r.cardIds.length!==a.cardIds.length)return!1;for(let e=0;e<r.cardIds.length;e+=1)if(r.cardIds[e]!==a.cardIds[e])return!1}return!0}(t,r)?r:t}),Object.keys(e).length>0&&k(t=>({...t,...e}))},[v,w]);let T=e=>i[e]??320;ew.useEffect(()=>{if(!N)return;let e=e=>{z.current?function(e,t){let n=P.current,r=z.current;if(!n||!r)return;let a=Array.from(n.querySelectorAll("[data-card-id]")),i=null,o=null,l=1/0;for(let n of a){let a=n.dataset.cardId;if(!a||a===r)continue;let s=n.getBoundingClientRect(),c=Math.max(s.left-e,0,e-s.right),d=Math.max(s.top-t,0,t-s.bottom),u=c*c+d*d;u<l&&(l=u,i=a,o=s)}if(!i||!o){I.current=null,O(null);return}let s=e-o.left,c=o.right-e,d=t-o.top,u=o.bottom-t,f=Math.min(s,c,d,u),h=f===d?"top":f===u?"bottom":f===s?"left":"right";I.current={id:i,edge:h};let m=n.getBoundingClientRect();O(function(e,t){switch(t){case"top":return{left:e.left,top:e.top-6-2,width:e.width,height:4};case"bottom":return{left:e.left,top:e.top+e.height+6-2,width:e.width,height:4};case"left":return{left:e.left-6-2,top:e.top,width:4,height:e.height};case"right":return{left:e.left+e.width+6-2,top:e.top,width:4,height:e.height}}}({left:o.left-m.left,top:o.top-m.top,width:o.width,height:o.height},h))}(e.clientX,e.clientY):A.current&&function(e,t){let n=A.current;if(!n)return;if("width"===n.kind){let t=JX(n.startWidth+(e-n.startX)*n.factor,240,760);j(e=>e.map(e=>e.key===n.columnKey?{...e,width:t}:e));return}if("growHeight"===n.kind){let e=Math.max(140,n.h0+(t-n.startY));k(t=>({...t,[n.cardId]:e}));return}let r=n.hA+n.hB,a=JX(n.hA+(t-n.startY),140,r-140);k(e=>({...e,[n.aboveId]:a,[n.belowId]:r-a}))}(e.clientX,e.clientY)},t=()=>(function(){let e=z.current;if(e){var t,n;let r=I.current;z.current=null,I.current=null,M(null),O(null),S(null),r&&(t=r.id,n=r.edge,e&&e!==t&&j(r=>{let a=r.map(e=>({...e,cardIds:[...e.cardIds]}));for(let t of a){let n=t.cardIds.indexOf(e);n>=0&&t.cardIds.splice(n,1)}let i=-1,o=-1;a.forEach((e,n)=>{let r=e.cardIds.indexOf(t);r>=0&&(i=n,o=r)});let l=a[i];if(!l)return r;if("top"===n||"bottom"===n)l.cardIds.splice("top"===n?o:o+1,0,e);else{let t=(b?"right"===n:"left"===n)?i:i+1;a.splice(t,0,{key:w(),width:a[i]?.width??360,cardIds:[e]})}return a.filter(e=>e.cardIds.length>0)}));return}A.current&&(A.current=null,S(null))})();return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t),window.addEventListener("pointercancel",t),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t),window.removeEventListener("pointercancel",t)}},[N]);let R=a.map((e,t)=>({column:e,realIndex:t}));b&&R.reverse();let D=(0,eb.jsx)("div",{className:(0,eI.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(JY,{onAddCard:s,align:b?"end":"start"})});return 0===g.length?null:(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0 flex-col",children:[D,(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto px-3 pb-3",children:(0,eb.jsxs)("div",{ref:P,className:"relative flex min-h-full items-start gap-3",children:[R.map(({column:n})=>{let r=[],i=0;for(let e=0;e<n.cardIds.length;e+=1)i+=T(n.cardIds[e]),e<n.cardIds.length-1&&(r.push(i+6),i+=12);let o=i,l=n.cardIds[n.cardIds.length-1],s=1===n.cardIds.length&&x.get(n.cardIds[0])?.content.kind==="status-monitor";return(0,eb.jsxs)("div",{className:(0,eI.cn)("relative flex shrink-0 flex-col gap-3",s&&"h-full"),style:{width:n.width},children:[n.cardIds.map(n=>{let r=x.get(n);if(!r)return null;let{content:a,index:i}=r;return(0,eb.jsxs)("div",{"data-card-id":a.id,style:s?void 0:{height:T(a.id)},className:(0,eI.cn)("group/card relative flex w-full flex-col overflow-hidden rounded-xl border border-border bg-background shadow-sm",s?"min-h-0 flex-1":"shrink-0",C===a.id?"opacity-40":"opacity-100"),children:[(0,eb.jsxs)("div",{onPointerDown:e=>{var t;return t=a.id,void(0===e.button&&(e.preventDefault(),e.stopPropagation(),z.current=t,I.current=null,M(t),O(null),S("drag")))},className:"flex shrink-0 cursor-grab touch-none select-none items-center justify-between gap-2 border-b border-border/60 px-2.5 py-1.5 active:cursor-grabbing",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:[(0,eb.jsx)(fk,{className:"size-3.5 shrink-0 text-muted-foreground/60"}),(0,eb.jsx)("span",{className:"truncate text-xs text-muted-foreground",children:a.title})]}),(0,eb.jsx)("button",{type:"button",onPointerDown:e=>e.stopPropagation(),onClick:()=>d(i),"aria-label":"关闭窗口",title:"关闭窗口",className:"grid size-5 shrink-0 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-3.5",children:(0,eb.jsx)(fg.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(JK,{content:a,index:i,conversationId:e,ownerMachineId:t,workspaceFolders:u,onContentChange:c,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p})})]},a.id)}),n.cardIds.slice(0,-1).map((e,t)=>(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:r=>{var a;return a=n.cardIds[t+1],void(0===r.button&&(r.preventDefault(),r.stopPropagation(),A.current={kind:"height",aboveId:e,belowId:a,startY:r.clientY,hA:T(e),hB:T(a)},S("resize")))},style:{top:r[t]??0},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})},`hbar-${e}`)),l&&!s?(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>{0===e.button&&(e.preventDefault(),e.stopPropagation(),A.current={kind:"growHeight",cardId:l,startY:e.clientY,h0:T(l)},S("resize"))},style:{top:o+6},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})}):null,(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>(function(e,t){if(0!==t.button)return;t.preventDefault(),t.stopPropagation();let n=a.find(t=>t.key===e)?.width??360;A.current={kind:"width",columnKey:e,startX:t.clientX,startWidth:n,factor:b?-1:1},S("resize")})(n.key,e),style:b?{left:-6}:{right:-6},className:(0,eI.cn)("group/wbar absolute inset-y-0 z-10 flex w-3 cursor-ew-resize items-center justify-center",b?"-translate-x-1/2":"translate-x-1/2"),children:(0,eb.jsx)("span",{className:"h-12 w-1 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/wbar:opacity-100"})})]},n.key)}),E?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute z-40 rounded-full bg-muted-foreground/70",style:{left:E.left,top:E.top,width:E.width,height:E.height}}):null]})}),N?(0,eb.jsx)("div",{"aria-hidden":!0,className:"absolute inset-0 z-50",style:{cursor:"drag"===N?"grabbing":A.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let JJ="vtl:workspace-layout-mode",JQ="vtl:workspace-agent-side",J0="vtl:workspace-layout-changed",J1={mode:"pane",agentSide:"left"};function J2(){let e=J1.mode,t=J1.agentSide;try{let n=window.localStorage.getItem(JJ);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(JQ);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function J5(e){try{e.mode&&window.localStorage.setItem(JJ,e.mode),e.agentSide&&window.localStorage.setItem(JQ,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(J0))}function J4({stack:e,rootTitle:t,rootOwnerMachineId:n,onNavigateRoot:r,onNavigateIndex:a,onOpenSubagent:i}){let o=e[e.length-1],[l,s]=ew.useState(null);if(ew.useEffect(()=>{let e;if(!o)return;let t=!1;async function r(){try{let a=await sz(o.id,n);if(t)return;s(a);let i="working"===a.conversation.status||!!a.conversation.running;e=window.setTimeout(r,i?900:5e3)}catch{if(t)return;e=window.setTimeout(r,3e3)}}return s(null),r(),()=>{t=!0,e&&window.clearTimeout(e)}},[o,n]),!o)return null;let c=l?.conversation.status??"working",d="working"===c||!!l?.conversation.running;return(0,eb.jsxs)("div",{className:"absolute inset-0 z-30 flex flex-col bg-background",children:[(0,eb.jsxs)("div",{className:"flex h-9 shrink-0 items-center gap-1 overflow-x-auto border-b px-2 text-xs",children:[(0,eb.jsx)("button",{type:"button",className:"shrink-0 rounded px-1.5 py-0.5 text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",onClick:r,children:t||"主对话"}),e.map((t,n)=>{let r=Hl(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(m0,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex shrink-0 items-center gap-1 rounded px-1.5 py-0.5 transition-colors hover:bg-accent/50",i?"font-medium text-foreground":"text-muted-foreground hover:text-foreground"),onClick:()=>a(n),children:[(0,eb.jsx)(o,{className:(0,eI.cn)("size-3",r.color)}),(0,eb.jsx)("span",{className:"max-w-[10rem] truncate",children:t.name||`${r.label}子代理`})]})]},t.id)}),(0,eb.jsx)("span",{className:"ml-auto shrink-0 pl-2",children:d?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-3 animate-spin"}),"运行中"]}):"paused"===c?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-destructive",children:[(0,eb.jsx)(hE,{className:"size-3"}),"已暂停"]}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-emerald-600 dark:text-emerald-500",children:[(0,eb.jsx)(eO,{className:"size-3"}),"完成"]})})]}),(0,eb.jsx)("div",{className:"relative min-h-0 flex-1",children:l?(0,eb.jsx)(V1,{events:l.events,bottomInset:16,contentClassName:"max-w-[42.5rem]",onOpenSubagent:e=>i(e),labels:{recall:"召回",branch:"分支",expand:"展开",collapse:"收起",completed:"完成",thinking:"运行中"}}):(0,eb.jsxs)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"mr-2 size-4 animate-spin"}),"正在打开子代理对话…"]})})]})}let J3=[],J6="vantaloom:file-system-changed";function J8(e,t){let n;if(0===t.length)return e;let r=new Map;for(let t=0;t<e.length;t+=1){let n=e[t]?.id;n&&r.set(n,t)}for(let a of t){let t=a?.id,i=t?r.get(t):void 0;if(void 0!==i){if(e[i]===a)continue;n||(n=e.slice()),n[i]=a}else n||(n=e.slice()),t&&r.set(t,n.length),n.push(a)}return n??e}function J7(e,t){if(0===e.length)return t;let n=new Set;for(let e of t)e?.id&&n.add(e.id);let r=e.filter(e=>e?.id&&!n.has(e.id));return 0===r.length?t:[...r,...t]}function J9(e){var t;let n=(t=e?.layoutMode,JF.some(e=>e.id===t)?t:"quad"),r="right"===e?.agentPosition?"right":"left",a=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};let t=e.shell&&"object"==typeof e.shell&&!Array.isArray(e.shell)?e.shell:void 0,n={};for(let e of["agent","panes"]){let r=t?.[e];"number"==typeof r&&Number.isFinite(r)&&r>0&&(n[e]=r)}return{...Object.keys(n).length?{shell:n}:{},outer:Qe(e.outer),left:Qe(e.left),right:Qe(e.right),top:Qe(e.top),bottom:Qe(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,JF.find(e=>e.id===n)?.slots??4)},()=>void 0);for(let[t,n]of(e?.panes??[]).entries()){let e=Number.isInteger(n.slot)?n.slot:t;e<0||e>=i.length||(i[e]=function(e,t){var n,r;let a=e.paneId||`${e.kind}-${t+1}`,i=!(n=e.props)||"object"!=typeof n||Array.isArray(n)?{}:n;if("subagent-conversation-panel"===e.kind)return{id:a,kind:"subagent-conversation-panel",title:Qn(i.title)??"Subagent",subagentId:Qn(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jM(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>uB(e?.kind)):void 0,s=jM(e.kind);return{id:a,kind:e.kind,title:Qn(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:Qn(i.activeTabId),terminal:"terminal-tab-group"===e.kind?!(r=i.terminal)||"object"!=typeof r||Array.isArray(r)?{sessionIds:[]}:{sessionIds:Array.isArray(r.sessionIds)?r.sessionIds.filter(e=>"string"==typeof e):[],activeSessionId:Qn(r.activeSessionId),selectedMachineId:Qn(r.selectedMachineId),selectedShellId:Qn(r.selectedShellId),autoStart:"boolean"==typeof r.autoStart?r.autoStart:void 0,aiControlledSessionIds:Array.isArray(r.aiControlledSessionIds)?r.aiControlledSessionIds.filter(e=>"string"==typeof e):void 0}:void 0}}(n,t))}return{layoutMode:n,agentPosition:r,layoutSizes:a,panes:i,cardColumns:Array.isArray(e?.cardLayout?.columns)?e.cardLayout.columns.filter(e=>e&&"string"==typeof e.key&&Array.isArray(e.cardIds)).map(e=>({key:e.key,width:"number"==typeof e.width&&e.width>0?e.width:360,cardIds:e.cardIds.filter(e=>"string"==typeof e)})):[],cardHeights:e?.cardLayout?.heights&&"object"==typeof e.cardLayout.heights?e.cardLayout.heights:{}}}function Qe(e){if(!Array.isArray(e))return;let t=e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0);return t.length?t:void 0}function Qt(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function Qn(e){return"string"==typeof e&&e.trim()?e:void 0}function Qr(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function Qa(e){return e.reduce((e,t)=>Math.max(e,Qr(t)),0)}function Qi({conversation:e,clipboardItems:t,clipboardDraggingId:n,onClipboardItemsChange:r,onClipboardDraggingChange:a,onOverlayOpenChange:i,onConversationCreated:o,onCancelDraft:l,subagentStack:s=[],onSubagentStackChange:c,subagentTree:d=[],mobileView:u="conversation",onMobilePaneCountChange:f}){let h=sy(),m=ew.useRef(null),p=ew.useRef(void 0),g=J9(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(J1);return ew.useEffect(()=>{t(J2());let e=()=>t(J2());return window.addEventListener(J0,e),window.addEventListener("storage",e),()=>{window.removeEventListener(J0,e),window.removeEventListener("storage",e)}},[]),e}(),j="card"===w.mode,[k,N]=ew.useState(!1),[S,C]=ew.useState(!1);ew.useEffect(()=>{try{C("1"===window.localStorage.getItem("vtl:agent-panes-collapsed"))}catch{}},[]);let M=ew.useCallback(()=>{C(e=>{let t=!e;try{window.localStorage.setItem("vtl:agent-panes-collapsed",t?"1":"0")}catch{}return t})},[]),[E,O]=ew.useState(g.layoutSizes),[P,z]=ew.useState(()=>g.panes),[I,A]=ew.useState(()=>g.cardColumns),[T,R]=ew.useState(()=>g.cardHeights),[D,_]=ew.useState(()=>e?.events??[]),[L,$]=ew.useState(()=>e?.eventsStart??0),[F,B]=ew.useState(()=>e?.eventsTotal??e?.events?.length??0),[V,H]=ew.useState(!1),U=L>0,[q,W]=ew.useState(null),[K,G]=ew.useState(new Set),[X,Y]=ew.useState(void 0),[Z,J]=ew.useState(()=>Ui(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Ua(e));window.localStorage.setItem(Ua(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>Ul(e?.conversation.id)),[en,er]=ew.useState([]),[ea,ei]=ew.useState(void 0),[eo,el]=ew.useState(!1),[es,ec]=ew.useState(!1),[ed,eu]=ew.useState(""),[ef,eh]=ew.useState(e?.conversation.status==="working"),[em,ep]=ew.useState(e?.conversation.status??"idle"),[eg,ex]=ew.useState(e?.conversation.settings?.permissionMode??"acceptEdits"),[ev,ey]=ew.useState([]),[ej,ek]=ew.useState(e?.conversation.tokens??0),[eN,eS]=ew.useState(e?.conversation.runUsage),[eC,eM]=ew.useState(e?.conversation.contextTokens??0),[eE,eO]=ew.useState(!1),eP=ew.useRef(em),[eA,eT]=ew.useState(),[e_,eL]=ew.useState(),[e$,eF]=ew.useState(),eB=ew.useRef(Qa(g.panes)),eV=ew.useRef(0),eH=ew.useRef(""),eU=JF.find(e=>e.id===x)?.slots??4,eq=e?.conversation.settings.folders??J3,{models:eW}=xK(),eK=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?eW.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[eW,e?.conversation.settings.mainModels]),eG=ji(e?.conversation.settings.engine),eX=ew.useMemo(()=>{if(eG){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jo(t),disabled:!0}]}return eK},[eG,e?.conversation.settings.ccModel,eK]),eY=!eG&&0===eK.length,[eZ,eJ]=ew.useState(!1),eQ=ef||"working"===em||eZ,e0=ew.useCallback(async t=>{if(!e||eE)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(eG){if(eQ)return void await s2(n,"请执行 /compact 压缩上下文。",r);eh(!0),ep("working");try{let e=await sG(n,{message:"/compact",modelRef:"",mode:"agent"},r);ep(e.conversation.status)}catch(e){eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"压缩请求失败")}return}if(eQ)return void await s2(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eO(!0);try{let e=await s5(n,t,void 0,r),a=await sz(n,r);a&&(_(a.events),$(a.eventsStart??0),B(a.eventsTotal??a.events.length),ek(a.conversation.tokens??0),eS(a.conversation.runUsage),eM(a.conversation.contextTokens??0));let i=Math.max(0,Math.round((e?.tokensSaved??0)/1e3));hF.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hF.error(e instanceof Error?e.message:"压缩失败")}finally{eO(!1)}},[e,eE,eQ,eG]),e1=ew.useMemo(()=>{if(!e)return;let t=eW.find(e=>e.value===ed),n=t?.contextLength||200,r=eC>0?eC:e.conversation.contextTokens??0;return{used:r,total:1e3*n,toolCalls:r,userMessages:0,other:void 0,onCompressPrecise:()=>e0("precise"),onCompressExtreme:()=>e0("extreme"),compressing:eE}},[e,eW,ed,eC,e0,eE]),e2=ew.useMemo(()=>{let t=e?.conversation.rounds;if(t?.length)return t;let n=[];for(let e of D){if("user"!==e.kind)continue;let t=n.length,r=(e.title??"").replace(/\s+/g," ").trim(),a=(r?r.slice(0,28):"")||`第 ${t+1} 轮`;n.push({runId:e.id,index:t,anchorEventId:e.id,title:a,summary:a,createdAt:""})}return n},[e?.conversation.rounds,D]),e5=ew.useCallback(async t=>{let n=e?.conversation.id,r=t.anchorEventId??D.find(e=>e.id.startsWith(`${t.runId}-`))?.id??D.find(e=>e.id===t.runId)?.id;if(r){if(D.some(e=>e.id===r))return void m.current?.scrollToEvent(r);if(n&&L>0)try{let t=await sI(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>J7(t.events,e)),$(t.start),t.total>0&&B(t.total))}catch{}window.setTimeout(()=>{m.current?.scrollToEvent(r)},60)}},[e?.conversation.id,e?.conversation.ownerMachineId,D,L]),e4=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Us(e));window.localStorage.setItem(Us(e),t)}catch{}}(e?.conversation.id,t),!t)return void Y(void 0);let r=D.findIndex(e=>e.id===t);if(r>=0)for(let e of e2){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=e2.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,e2]),e3=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await u9(e);return(t=e,n=r,t.defaultValue!==n.defaultValue||t.title!==n.title||t.file?.size!==n.file?.size||t.file?.mimeType!==n.file?.mimeType||t.file?.previewContent!==n.file?.previewContent||t.file?.src!==n.file?.src||t.file?.truncated!==n.file?.truncated)?r:e}catch{return e}},[]),e6=ew.useCallback(async e=>{if(!e||!jO(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(e3));return(t=r,n=a,t.length!==n.length||t.some((e,t)=>e!==n[t]))?{...e,tabs:a}:e}if("file-tab-viewer"===e.kind&&e.tab){let t=await e3(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[e3]),e8=ew.useCallback(async()=>{var e,t;let n=await Promise.all(P.map(async e=>e6(e)));e=P,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&z(n)},[P,e6]);ew.useEffect(()=>{i?.(void 0!==eA||void 0!==e_||void 0!==e$)},[e_,e$,i,eA]);let e7=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(e7.current!==t){e7.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>J8(e,n))},[e?.conversation.id,e?.events]);let e9=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sI(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>J7(n.events,e)),$(e=>n.events.length>0?n.start:Math.max(0,e-200)),n.total>0&&B(n.total)}finally{H(!1)}}},[e?.conversation.id,e?.conversation.ownerMachineId,L,V]);function te(e){if(!e.length)return;let t=e.map(jz);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function tt(e,t,n){if(!e||!jO(e))return e;if("multi-tab-system"===e.kind){var r;let a,i;return{...e,tabs:(r=e.tabs??[],a=r.filter(e=>e.id!==t.id),i=void 0===n?a.length:Math.min(Math.max(n,0),a.length),a.splice(i,0,t),a),activeTabId:t.id}}return"file-tab-viewer"===e.kind?{...e,title:t.title,tab:t}:e}function tn(e,t){return e&&jO(e)?"multi-tab-system"===e.kind?{...e,tabs:(e.tabs??[]).map(e=>e.id===t.id?t:e),activeTabId:t.id}:"file-tab-viewer"===e.kind?{...e,title:t.title,tab:t}:e:e}function tr(e){z(t=>{let n=t.findIndex(e=>void 0===e);return n>=0?t.map((t,r)=>r===n?e:t):[...t,e]})}function ta(e){eB.current+=1;let t=jE(e,`${e}-${eB.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;eD().then(n=>{tr(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tr(t)}ew.useEffect(()=>{let t=e?.conversation.id;if(!t||0===D.length||p.current===t)return;p.current=t;let n=function(e){if(e)try{return window.localStorage.getItem(Us(e))??void 0}catch{return}}(t),r=D[D.length-1]?.id;if(!n||n===r||!D.some(e=>e.id===n))return;let a=window.setTimeout(()=>{m.current?.scrollToEvent(n)},80);return()=>window.clearTimeout(a)},[e?.conversation.id,D.length]),ew.useEffect(()=>{J(Ui(e?.conversation.id)),et(Ul(e?.conversation.id)),er([]),ei(void 0),G(new Set)},[e?.conversation.id]),ew.useEffect(()=>{eh(e?.conversation.status==="working"),ep(e?.conversation.status??"idle")},[e?.conversation.id,e?.conversation.status]),ew.useEffect(()=>{ek(e?.conversation.tokens??0),eS(e?.conversation.runUsage),eM(e?.conversation.contextTokens??0)},[e?.conversation.id,e?.conversation.tokens,e?.conversation.runUsage,e?.conversation.contextTokens]),ew.useEffect(()=>{ex(e?.conversation.settings?.permissionMode??"acceptEdits")},[e?.conversation.id,e?.conversation.settings?.permissionMode]),ew.useEffect(()=>{let e=eK[0]?.id??"";eu(t=>eK.some(e=>e.id===t)?t:e)},[eK]),ew.useEffect(()=>{let t=J9(e?.panes);v(t.layoutMode),y(t.agentPosition),O(t.layoutSizes),z(t.panes),A(t.cardColumns),R(t.cardHeights),eB.current=Qa(t.panes)},[e?.conversation.id,e?.panes]),ew.useEffect(()=>{let t,n=e?.conversation.id,r=e?.conversation.ownerMachineId;if(!n)return;let a=!1,i=e=>{_(t=>J8(t,e.events)),ep(e.conversation.status),ek(e.conversation.tokens??0),eS(e.conversation.runUsage),eM(e.conversation.contextTokens??0)},o=e=>{void 0===t&&(t=window.setInterval(async()=>{try{let e=await sz(n,r);if(a)return;i(e),eh("working"===e.conversation.status)}catch{return}},e))};if(r&&"local"!==r)return o(600),()=>{a=!0,void 0!==t&&window.clearInterval(t)};let l=e?.conversation.lastSeq??0,s=new EventSource(eR(`/api/local/agent/conversations/${encodeURIComponent(n)}/events/stream?after=${l}`));return s.addEventListener("detail",e=>{try{let t=s4(JSON.parse(e.data));i(t),eh("working"===t.conversation.status)}catch{return}}),s.onerror=()=>{s.close(),o(350)},()=>{a=!0,s.close(),void 0!==t&&window.clearInterval(t)}},[e?.conversation.id,e?.conversation.ownerMachineId]),ew.useEffect(()=>{if(!e?.conversation.id)return;let t=window.setInterval(()=>{e8()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,e8]),ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t)return;let r=!1;sV(t,n);let a=window.setInterval(()=>{r||sV(t,n)},3e4);return()=>{r=!0,window.clearInterval(a),sH(t,n)}},[e?.conversation.id,e?.conversation.ownerMachineId]),ew.useEffect(()=>{let e=D.filter(e=>"change"===e.kind).map(e=>`${e.id}:${e.status??""}:${e.isStreaming?"1":"0"}`).join("|");e&&e!==eH.current&&(eH.current=e,window.dispatchEvent(new CustomEvent(J6)),e8())},[D,e8]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:I,heights:T},r=[],P.forEach((e,t)=>{if(e){if(jO(e))return void r.push({paneId:e.id,slot:t,kind:e.kind,machineId:e.terminal?.selectedMachineId,resourceId:e.terminal?.activeSessionId,props:{title:e.title,tab:e.tab,tabs:e.tabs,activeTabId:e.activeTabId,terminal:e.terminal}});r.push({paneId:e.id,slot:t,kind:e.kind,props:{title:e.title,subagentId:e.subagentId,events:e.events}})}}),{layoutMode:x,agentPosition:b,sizes:E,cardLayout:n,panes:r}),e?.conversation.ownerMachineId)},300);return()=>window.clearTimeout(n)},[b,I,T,e?.conversation.id,x,E,P]);let ti=ew.useCallback(e=>{z(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jO(r)&&r.tab&&(!r.tab.defaultUrl||r.tab.defaultUrl.startsWith("https://vantaloom.local"))?t.map((t,a)=>a===n&&r.tab?{...r,tab:{...r.tab,defaultUrl:e}}:t):t}eB.current+=1;let r=jE("browser-tab-viewer",`browser-tab-viewer-${eB.current}`),a=void 0!==r.tab?{...r,tab:{...r.tab,defaultUrl:e}}:r,i=t.findIndex(e=>void 0===e);return i>=0?t.map((e,t)=>t===i?a:e):j?[...t,a]:t})},[j]),to=ew.useRef(!1);function tl(e){z(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;eB.current+=1;let n=jE(e,`${e}-${eB.current}`),r=t.findIndex(e=>void 0===e);return r>=0?t.map((e,t)=>t===r?n:e):j?[...t,n]:t})}ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;to.current=!1;let r=!1,a=async()=>{if(!r&&!to.current)try{let e=(await eD())[0];if(r||to.current||!e)return;to.current=!0,ti(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,ti]);let ts=ew.useCallback((e,t)=>{z(n=>{if(n.some(n=>void 0!==n&&jO(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jE("terminal-tab-group",t),terminal:{sessionIds:[e.id],activeSessionId:e.id,autoStart:!1,aiControlledSessionIds:[e.id],selectedMachineId:e.machineId}},a=n.findIndex(e=>void 0===e);return a>=0?n.map((e,t)=>t===a?r:e):j?[...n,r]:n})},[j]),tc=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;tc.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fd();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||tc.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(tc.current.add(t.id),ts(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,ts]);let tf=ew.useCallback(()=>{tl("plan-doc-viewer")},[j]),th=ew.useCallback(()=>{tl("spec-doc-viewer")},[j]);ew.useEffect(()=>{let t=e?.conversation.id;if(W(null),!t)return;let n=e?.conversation.ownerMachineId,r=!0,a=async()=>{let e=await sR(t,n);r&&W(e.planState)};a();let i=window.setInterval(a,1500);return()=>{r=!1,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId]);let tm=q??e?.conversation.planState??null,tp=ew.useRef(void 0);function tg(e,t){z(n=>{let r=n.findIndex(t=>t?.kind===e);if(r>=0)return n.map((n,a)=>a===r&&n?{id:n.id,kind:e,title:t.title,tab:t}:n);eB.current+=1;let a={id:`${e}-${eB.current}`,kind:e,title:t.title,tab:t},i=n.findIndex(e=>void 0===e);return i>=0?n.map((e,t)=>t===i?a:e):[...n,a]})}async function tx(e,t,n){try{let r=await u8(e);if(j)return void tg("file-tab-viewer",r);z(e=>e.map((e,a)=>a===t?tt(e,r,n):e))}catch{hF.error("文件预览打开失败")}}function tv(e){if(j)return void tx(e,-1);let t=P.slice(0,eU).findIndex(e=>e?.kind==="multi-tab-system");t<0?hF.warning("请先放入一个多标签页组件"):tx(e,t)}function tb(e){let t=e.path?.trim()||e.name.trim();("diff"===e.kind||"diff"===e.meta)&&e.diff?function(e){let t=e.path?.trim()||e.name.trim(),n={id:function(e,t){let n=0x811c9dc5;for(let e=0;e<t.length;e+=1)n^=t.charCodeAt(e),n=Math.imul(n,0x1000193);return`${e}-${(n>>>0).toString(36)}`}("diff",`${e.mutationId??""}|${e.machineId??"local"}|${t}|${e.diff??""}`),kind:"diff-tab-viewer",title:`Diff ${e.name}`,file:{name:e.name,path:t,machineId:e.machineId??"local",kind:"code"},diff:e.diff};if(j)return tg("diff-tab-viewer",n);let r=P.slice(0,eU).findIndex(e=>e?.kind==="multi-tab-system");r<0?hF.warning("请先放入一个多标签页组件"):z(e=>e.map((e,t)=>t===r?tt(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||tv({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let e=tm?.approvals?.find(e=>!e.decision);e&&tp.current!==e.id&&(tp.current=e.id,tf())},[tm,tf]);let ty=e?.conversation.ownerMachineId??"local",tw=ew.useMemo(()=>{let e=e=>/^https?:\/\//i.test(e)||e.startsWith("data:"),t=async e=>{let{target:t,kind:n,label:r}=e;try{if("url"===n)return void window.open(t,"_blank","noopener,noreferrer");if("local-file"===n){let e=await fetch(eR(`/v1/files/reveal?path=${encodeURIComponent(t)}`),{cache:"no-store"});if(!e.ok){let t=await e.json().catch(()=>null);throw Error(t?.error??`reveal failed: ${e.status}`)}return}let e=await uG(ty,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void tv({machineId:ty,path:t});let a=eR(`/v1/remote/${encodeURIComponent(ty)}/files/raw?path=${encodeURIComponent(t)}`);await mK({url:a,label:r}),hF.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hF.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===ty?eR(`/v1/files/raw?${n}`):eR(`/v1/remote/${encodeURIComponent(ty)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===ty?"local-file":"remote-file",onOpen:e=>void t(e)}},[ty]);async function tj(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hF.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uX({machineId:a,path:r,content:n}),o={...await u7(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};z(t=>t.map((t,n)=>n===e?tn(t,o):t)),window.dispatchEvent(new CustomEvent(J6)),hF.success("文件已保存")}catch(e){throw hF.error("文件保存失败"),e}}async function tk(t){let n=e?.conversation.id,r=e$?.tab.file?.path,a=e$?.tab.file?.machineId??"local";if(e$&&n&&r)try{let i=await sQ(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await u7(i,{id:e$.tab.id,title:`${i.name} @ ${Ql(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:e$.tab.defaultView,defaultMode:"review"});z(e=>e.map((e,t)=>t===e$.paneIndex?tn(e,o):e)),eF(void 0)}catch{hF.error("历史版本打开失败")}}function tN(e,t,n){let i=P[e];eB.current=Math.max(eB.current,Qr(n)),z(t=>t.map((t,r)=>r===e?n:t)),r(e=>{let n=e.filter(e=>e.id!==t.id);if(!i)return n;let r=jz(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tS(e,t){z(n=>n.map((n,r)=>r===e?t:n))}function tC(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tM(e){var t=P[e];if(t&&jO(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])ff(e).catch(()=>{});z(t=>t.map((t,n)=>n===e?void 0:t))}function tE(e){let t=P[e];t&&te([t]),z(t=>t.map((t,n)=>n===e?void 0:t))}async function tO(t,n="chat",r=[]){let a=e?.conversation.id,i=eG?"":ed||eK[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return Ul(e);let r=n.slice(0,1e5),a=Ul(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(Uo(e),JSON.stringify(i))}catch{}return i}(a,t)),ef||"working"===em))return;if(!eG&&!i)return void hF.error("请先在代理模型配置里选择模型");G(function e(t,n=new Set){for(let r of t)n.add(r.id),e(r.children??[],n);return n}(d));let o=r.map(e=>"image"===e.kind?{kind:"image",name:e.name,mimeType:e.mimeType,data:e.dataUrl?.split(",")[1]??""}:{kind:"file",name:e.name,mimeType:e.mimeType,text:e.text??""}).filter(e=>"image"===e.kind?""!==e.data:(e.text??"")!=="");eh(!0),ep("working");try{let r=await sG(a,{message:t,modelRef:i,mode:n,attachments:o.length>0?o:void 0},e?.conversation.ownerMachineId);ep(r.conversation.status)}catch(e){eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"对话请求失败")}}async function tP(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=eG?"":r||ed||eK[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!eG&&!a)return void hF.error("请先在代理模型配置里选择模型");eh(!0),ep("working"),_(e=>e.map(e=>e.id===t.id?{...e,status:"retried"}:e));try{let r=await sX(n,{modelRef:a,mode:i,retryEventId:t.id},e?.conversation.ownerMachineId);ep(r.conversation.status)}catch(e){_(e=>e.map(e=>e.id===t.id?t:e)),eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"对话重试失败")}}}function tz(e){eQ?hF.error("对话正在运行,请先停止后再回退"):ei(e)}async function tI(){let t=e?.conversation.id;if(!ea||!t)return void ei(void 0);el(!0);try{let n=await sY(t,ea.id,e?.conversation.ownerMachineId);_(n.detail.events),$(0),B(n.detail.events.length),ep(n.detail.conversation.status),eh(!1),Q(n.prompt),c?.([]);let r=[];n.revertedFiles>0&&r.push(`恢复 ${n.revertedFiles} 个文件`),n.deletedFiles>0&&r.push(`删除 ${n.deletedFiles} 个新增文件`),n.archivedSubagents>0&&r.push(`归档 ${n.archivedSubagents} 个子代理`),hF.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hF.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hF.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tA(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await sZ(n,t.id,e?.conversation.ownerMachineId);o?.(r),hF.success("已创建分支对话")}catch(e){hF.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}async function tT(t){let n=e?.conversation.id;if(n)try{let r=e?.conversation.settings??{};await sq(n,{settings:{...r,...t}},e?.conversation.ownerMachineId)}catch(e){hF.error(e instanceof Error?e.message:"设置更新失败")}}async function tR(t,n){let r=e?.conversation.id;if(r)try{await s0(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hF.error(e instanceof Error?e.message:"审批操作失败")}}async function tD(){let t=e?.conversation.id;if(t){eJ(!0);try{await s1(t,e?.conversation.ownerMachineId)}catch{}}}function t_(){tO("继续","agent")}async function tL(t){let n=e?.conversation.id;if(!n)return;let r=ev.find(e=>e.id===t);if(!r)return;let a="string"==typeof r.content?r.content:String(r.content??"");if(a.trim()){ey(e=>e.filter(e=>e.id!==t));try{await s2(n,a.trim(),e?.conversation.ownerMachineId)}catch{}}}ew.useEffect(()=>{"idle"===em&&eZ&&eJ(!1)},[em,eZ]),ew.useEffect(()=>{let e=eP.current;if(eP.current=em,"working"===e&&"idle"===em&&ev.length>0){let e=ev[0];if(e){ey(ev.slice(1));let t="string"==typeof e.content?e.content:String(e.content??"");t.trim()&&tO(t.trim(),"agent")}}},[em]);let t$=Array.from({length:eU},(r,a)=>(0,eb.jsx)(Jq,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:P[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eT(a),onPanelDrop:tN,onContentChange:tS,onClear:tM,onCut:tE,workspaceFolders:eq,onRequestFileTab:(e,t)=>eL({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:tv,onSaveFileTab:tj,onOpenFileHistory:(e,t)=>eF({paneIndex:e,tab:t})},a)),tF=P.slice(0,eU).some(e=>e?.kind==="subagent-conversation-panel"),tB=E.shell?.agent??42,tV=E.shell?.panes??58,tH=w.agentSide,tU="control-room"===w.mode||k,tq=(0,eb.jsxs)(mV,{type:"single",value:tU?"hidden":tH,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),J5({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),J5({mode:"control-room"}))},children:[(0,eb.jsx)(mH,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s8,{})}),(0,eb.jsx)(mH,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(ct,{})}),(0,eb.jsx)(mH,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s9,{})})]}),tW=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HP,{ownerMachineId:e.conversation.ownerMachineId,title:e.conversation.title,className:"pr-12"}):null,e?(0,eb.jsx)("div",{className:"pointer-events-none absolute left-1 top-9 z-30 flex justify-start pt-1.5",children:(0,eb.jsx)("div",{className:"pointer-events-auto",children:(0,eb.jsx)(Hz,{rounds:e2,onJumpToRound:e5,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HE,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e9:void 0,models:e?eX:void 0,modelId:eG?eX[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tT({permissionMode:t})},running:eQ,disabled:!!e&&eY,onModelChange:eu,onSubmit:e?e=>{tO(e.value,"agent",e.attachments??[])}:void 0,onStop:tD,onOpenFile:tb,deliverable:tw,onOpenSubagent:function(e){e.id&&c?.([tC(e)])},onOpenPlan:tf,onOpenSpec:()=>th(),planPromptBar:e?(0,eb.jsx)(H9,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tm,modelRef:ed||eK[0]?.id||"",onOpenPlan:tf,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0,onRetry:tP,onApprovalDecision:tR,onContinue:t_,onRecallUserMessage:tz,onBranchAssistantMessage:tA,onActiveEventChange:e4,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tL,contextUsage:e1})}),s.length>0&&e?(0,eb.jsx)(J4,{stack:s,rootTitle:e.conversation.title,rootOwnerMachineId:e.conversation.ownerMachineId,onNavigateRoot:()=>c?.([]),onNavigateIndex:e=>c?.(s.slice(0,e+1)),onOpenSubagent:function(e){e.id&&c?.([...s,tC(e)])}}):null]}),tK=(0,eb.jsx)(hN,{id:"agent",defaultSize:tB,minSize:28,children:tW},"agent-conversation"),tG=(0,eb.jsx)(hN,{id:"panes",defaultSize:tV,minSize:32,children:(0,eb.jsxs)("section",{className:"vtl-agent-workspace-panel flex size-full min-h-0 min-w-0 flex-col bg-transparent","data-has-conversation-pane":tF?"true":void 0,children:[(0,eb.jsx)("div",{className:"flex h-11 shrink-0 items-center border-b px-3","data-tour":"pane-toolbar",children:(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)(mu,{value:x,onValueChange:e=>{let t,n;return t=JF.find(t=>t.id===e)?.slots??4,void((n=P.slice(t).filter(e=>!!e)).length&&te(n),z(Array.from({length:Math.max(4,t)},(e,n)=>n<t?P[n]:void 0)),v(e))},children:(0,eb.jsx)(my,{children:JF.map(e=>(0,eb.jsx)(mw,{value:e.id,"aria-label":e.label,title:e.label,className:"h-7 w-10 px-0 [&_svg]:size-4",children:e.icon},e.id))})}),tq,(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",draggable:!0,"aria-label":"剪切窗口内容",title:"拖拽到窗口以剪切到剪切板",className:"h-7 w-10 cursor-grab rounded-md text-muted-foreground active:cursor-grabbing [&_svg]:size-4",onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(JL,"cut")},children:(0,eb.jsx)(l0,{})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",draggable:!0,"aria-label":"粉碎窗口内容",title:"拖拽到窗口以清空",className:"h-7 w-10 cursor-grab rounded-md text-muted-foreground active:cursor-grabbing [&_svg]:size-4",onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(J_,"clear")},children:(0,eb.jsx)(cn,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(JU,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=Qt(t);O(t=>{var r;return(r=t[e],(r?.length??0)===(n?.length??0)&&(r??[]).every((e,t)=>.01>Math.abs(e-(n?.[t]??0))))?t:{...t,[e]:n}})},children:t$},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),tX=(0,eb.jsx)(JZ,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:P,agentSide:tH,columns:I,heights:T,onColumnsChange:A,onHeightsChange:R,onAddCard:ta,onContentChange:tS,onClear:tM,workspaceFolders:eq,onOpenWorkspaceFile:tv,onSaveFileTab:tj,onOpenFileHistory:(e,t)=>eF({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>eL({paneIndex:e,insertIndex:t})}),tY=(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===tH?"right-0 justify-end pr-1":"left-0 justify-start pl-1"),children:(0,eb.jsx)("button",{type:"button",onClick:M,"aria-label":S?"展开工作区":"收起工作区",title:S?"展开工作区":"收起工作区",className:"grid size-7 place-items-center rounded-md border bg-background/85 text-muted-foreground opacity-0 shadow-sm backdrop-blur transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 group-hover/panes:opacity-100 [&_svg]:size-4",children:"left"===tH?S?(0,eb.jsx)(ce,{}):(0,eb.jsx)(s7,{}):S?(0,eb.jsx)(tu,{}):(0,eb.jsx)(td,{})})}),tZ=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(JW,{open:void 0!==eA,onOpenChange:e=>{e||eT(void 0)},onAdd:function(e){if(void 0===eA)return;eB.current+=1;let t=jE(e,`${e}-${eB.current}`),n=P[eA];n&&te([n]),z(e=>e.map((e,n)=>n===eA?t:e)),eT(void 0)}}),(0,eb.jsx)(H6,{open:void 0!==e_,folders:eq,onOpenChange:e=>{e||eL(void 0)},onSelectFile:e=>{e_&&tx(e,e_.paneIndex,e_.insertIndex),eL(void 0)}}),(0,eb.jsx)(Qo,{open:void 0!==e$,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:e$?.tab,onOpenChange:e=>{e||eF(void 0)},onSelectVersion:e=>{tk(e)}}),(0,eb.jsx)(d4,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"回退对话到此处?"}),(0,eb.jsx)(ug,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{disabled:eo,children:"取消"}),(0,eb.jsx)(ux,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tI()},children:eo?"回退中…":"确认回退"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(jN,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HE,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e9:void 0,models:e?eX:void 0,modelId:eG?eX[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tT({permissionMode:t})},running:eQ,disabled:!!e&&eY,onModelChange:eu,onSubmit:e?e=>{tO(e.value,"agent",e.attachments??[])}:void 0,onStop:tD,onOpenFile:tb,deliverable:tw,onOpenSubagent:function(e){var t;let n=P.slice(0,eU),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hF.warning("请释放一个窗口再选中浏览");eV.current+=1;let o={id:t=`subagent-${e.id}-${eV.current}`,kind:"subagent-conversation-panel",title:e.title,subagentId:e.id,events:e.events?.length?e.events:[{id:`${t}-status`,kind:"done",title:e.detail??e.status??e.activity??e.title}]};z(e=>e.map((e,t)=>t===i?o:e))},onRetry:tP,onApprovalDecision:tR,onContinue:t_,onRecallUserMessage:tz,onBranchAssistantMessage:tA,onActiveEventChange:e4,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tL,contextUsage:e1}),paneElements:t$,panes:P,activeSlotCount:eU,onOpenPalette:eT,timeline:(0,eb.jsx)(Hz,{rounds:e2,onJumpToRound:e5,activeRunId:X})}),tZ,(0,eb.jsx)(hW,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[tU?(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 -z-10 opacity-0","aria-hidden":!0,children:(0,eb.jsx)(hk,{direction:"horizontal",children:tG})}),(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0 min-w-0 basis-[58%] shrink-0 flex-col",children:[(0,eb.jsx)(hk,{direction:"horizontal",children:tK}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:tq})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Ur,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:eQ,subagentTree:d,baselineSubagentIds:K,activeSubagentPath:s,onSelectMain:()=>c?.([]),onSelectSubagent:e=>c?.([e])})})]}):j&&!P.some(Boolean)?(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tW}),(0,eb.jsx)("div",{className:(0,eI.cn)("absolute top-2 z-20","left"===tH?"right-3":"left-3"),children:(0,eb.jsx)(JY,{onAddCard:ta,align:"left"===tH?"end":"start"})})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===tH?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tW}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tX})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tX}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tW})]})}):S?(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 -z-10 opacity-0","aria-hidden":!0,children:(0,eb.jsx)(hk,{direction:"horizontal",children:tG})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tW}),tY]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:{agent:tB,panes:tV},onLayoutChanged:e=>{let t=e.agent??tB,n=e.panes??tV;!function(e){let t=Qt(e),n=t[0],r=t[1];if(void 0===n||void 0===r)return;let a="left"===b?{agent:n,panes:r}:{agent:r,panes:n};O(e=>{let t=e.shell?.agent,n=e.shell?.panes;return .01>Math.abs((t??0)-a.agent)&&.01>Math.abs((n??0)-a.panes)?e:{...e,shell:{...e.shell,...a}}})}("left"===tH?[t,n]:[n,t])},children:["left"===tH?tK:tG,(0,eb.jsx)(hS,{withHandle:!0}),"left"===tH?tG:tK]},`${e?.conversation.id??"empty"}-${tH}`),tY]}),tZ,(0,eb.jsx)(hW,{position:"top-right"})]}):(0,eb.jsx)(jb,{onCreated:e=>o?.(e),onCancel:l})}function Qo({open:e,conversationId:t,ownerMachineId:n,tab:r,onOpenChange:a,onSelectVersion:i}){let[o,l]=ew.useState([]),[s,c]=ew.useState(!1),d=r?.file?.path,u=r?.file?.machineId??"local";return ew.useEffect(()=>{if(!e||!t||!d)return void l([]);let r=!1;return c(!0),sJ(t,{machineId:u,path:d},n).then(e=>{r||l(e.versions)}).catch(()=>{r||l([])}).finally(()=>{r||c(!1)}),()=>{r=!0}},[t,n,u,e,d]),(0,eb.jsx)(dC,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fv,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fw,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fj,{className:"sr-only",children:"浏览当前文件在此 Agent 会话中的修改历史。"}),(0,eb.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:r?.file?.name??r?.title??"文件"}),d?(0,eb.jsxs)("div",{className:"mt-0.5 truncate ui-text-kbd text-muted-foreground",children:[u,":",d]}):null]}),(0,eb.jsx)("div",{className:"max-h-[28rem] overflow-auto p-2",children:s?(0,eb.jsx)("div",{className:"px-3 py-8 text-center text-xs text-muted-foreground",children:"正在读取历史版本"}):0===o.length?(0,eb.jsx)("div",{className:"px-3 py-8 text-center text-xs text-muted-foreground",children:"还没有记录到这个文件的修改历史"}):(0,eb.jsx)("div",{className:"grid gap-1",children:o.map(e=>{var t;let n;return(0,eb.jsxs)("button",{type:"button",className:"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-md px-3 py-2 text-left transition-colors hover:bg-muted/70",onClick:()=>i(e),children:[(0,eb.jsxs)("span",{className:"min-w-0",children:[(0,eb.jsxs)("span",{className:"block truncate text-sm font-medium",children:[Ql(e.mutationId)," ·"," ","before"===e.state?"修改前":"修改后"]}),(0,eb.jsx)("span",{className:"mt-0.5 block truncate ui-text-kbd text-muted-foreground",children:Number.isFinite(n=Date.parse(t=e.createdAt))?new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(n):t})]}),(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,eb.jsxs)("b",{className:"font-medium text-emerald-600",children:["+",e.additions??0]}),(0,eb.jsxs)("b",{className:"font-medium text-rose-600",children:["-",e.deletions??0]})]})]},e.id)})})})]})})}function Ql(e){return e.replace(/^mut-/,"").slice(0,16)}var Qs=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{let n=(0,l1.createSlot)(`Primitive.${t}`),r=ew.forwardRef((e,r)=>{let{asChild:a,...i}=e;return"u">typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,eb.jsx)(a?n:t,{...i,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),Qc=ew.forwardRef((e,t)=>(0,eb.jsx)(Qs.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function Qd({className:e,...t}){return(0,eb.jsx)(Qc,{"data-slot":"label",className:(0,eI.cn)("flex w-fit items-center gap-2 text-sm font-medium leading-snug peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]/field:opacity-50",e),...t})}function Qu({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,eI.cn)("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch",e),...n})}function Qf(e){let t=new URLSearchParams;e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return n?`?${n}`:""}async function Qh(e){return(await Qk(`/api/local/skills${Qf(e)}`)).skills??[]}async function Qm(e,t){return Qk(`/api/local/skills/${encodeURIComponent(e)}${Qf(t)}`)}async function Qp(e){await Qk(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function Qg(e,t){return Qk("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function Qx(e,t){return Qk("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function Qv(){return(await Qk("/api/local/skills/sources")).sources??[]}async function Qb(e){let t=new URLSearchParams;e?.scope&&t.set("scope",e.scope),e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return(await Qk(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function Qy(e,t,n){return Qk(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qf(n)}`)}async function Qw(e){return Qk("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function Qj(e,t,n){await Qk(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qf(n)}`,{method:"DELETE"})}async function Qk(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"skill/memory api failed");return r}Qc.displayName="Label";let QN={global:"全局",project:"项目",conversation:"对话"},QS=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QC({conversationId:e,workspace:t,scopes:n,className:r}){let a=n??["global","project","conversation"],[i,o]=ew.useState([]),[l,s]=ew.useState(!0),[c,d]=ew.useState(""),[u,f]=ew.useState(""),[h,m]=ew.useState(null),[p,g]=ew.useState(!1),[x,v]=ew.useState(a[0]??"global"),b=ew.useMemo(()=>({conversationId:e,workspace:t}),[e,t]),y=ew.useCallback(async()=>{s(!0),d("");try{let e=await Qb(b);o(e)}catch(e){d(e instanceof Error?e.message:"读取记忆失败")}finally{s(!1)}},[b]);async function w(e){f(e.name);try{let t=await Qy(e.scope,e.name,b);m({editing:!0,scope:t.scope,name:t.name,description:t.description,type:t.type,body:t.body})}catch(e){d(e instanceof Error?e.message:"读取记忆正文失败")}finally{f("")}}async function j(){if(h&&h.name.trim()){g(!0),d("");try{await Qw({scope:h.scope,name:h.name.trim(),description:h.description.trim(),type:h.type,body:h.body,conversationId:e,workspace:t}),m(null),await y()}catch(e){d(e instanceof Error?e.message:"保存记忆失败")}finally{g(!1)}}}async function k(e){f(e.name),d("");try{await Qj(e.scope,e.name,b),await y()}catch(e){d(e instanceof Error?e.message:"删除记忆失败")}finally{f("")}}return ew.useEffect(()=>{y()},[y]),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3",r),children:[(0,eb.jsx)("div",{className:"flex items-center justify-end",children:(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-8",onClick:()=>void y(),"aria-label":"刷新记忆",children:(0,eb.jsx)(bi,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mu,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(my,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mw,{value:e,className:"flex-1",children:QN[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mj,{value:e,className:"mt-3 grid gap-2",children:[(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-8",onClick:()=>{m({editing:!1,scope:e,name:"",description:"",type:"pattern",body:""})},children:[(0,eb.jsx)(lJ,{className:"size-4"}),"新增",QN[e],"记忆"]})}),l?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取记忆"}):0===t.length?(0,eb.jsxs)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:["暂无",QN[e],"记忆。"]}):(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:t.map(e=>{var t;return(0,eb.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"mt-0.5 line-clamp-2 text-xs text-muted-foreground",children:e.description||"(无描述)"})]}),(0,eb.jsx)(Bu,{variant:"secondary",className:"shrink-0",children:(t=e.type,QS.find(e=>e.value===t)?.label??t)})]}),e.paths&&e.paths.length>0?(0,eb.jsx)("p",{className:"line-clamp-1 text-[11px] text-muted-foreground/80",children:e.paths.join(",")}):null,(0,eb.jsxs)("div",{className:"mt-auto flex gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void w(e),disabled:u===e.name,children:"查看 / 编辑"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs text-destructive hover:text-destructive",onClick:()=>void k(e),disabled:u===e.name,children:[(0,eb.jsx)(bo,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dC,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fv,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fb,{children:(0,eb.jsxs)(fw,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QN[h.scope]:"",")"]})}),h?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(eA,{value:h.name,disabled:h.editing,onChange:e=>m({...h,name:e.currentTarget.value}),placeholder:"例如 api-error-handling"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"描述"}),(0,eb.jsx)(eA,{value:h.description,onChange:e=>m({...h,description:e.currentTarget.value}),placeholder:"一行用于相关性匹配的描述"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gR,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:QS.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"正文"}),(0,eb.jsx)(y6,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fy,{children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",onClick:()=>m(null),disabled:p,children:"取消"}),(0,eb.jsxs)(ez.Button,{type:"button",onClick:()=>void j(),disabled:p||!h?.name.trim(),children:[(0,eb.jsx)(Gr,{className:"size-4"}),p?"保存中":"保存"]})]})]})})]})}let QM=(0,ek.default)("cloud-download",[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]]),QE=(0,ek.default)("package-plus",[["path",{d:"M16 16h6",key:"100bgy"}],["path",{d:"M19 13v6",key:"85cyf1"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);function QO({conversationId:e,workspace:t,className:n}){let[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState(!0),[c,d]=ew.useState(""),[u,f]=ew.useState(""),[h,m]=ew.useState(null),[p,g]=ew.useState(!1),[x,v]=ew.useState(""),[b,y]=ew.useState(""),w=ew.useMemo(()=>({conversationId:e,workspace:t}),[e,t]),j=ew.useCallback(async()=>{s(!0),d("");try{let[e,t]=await Promise.all([Qh(w),Qv()]);a(e),o(t)}catch(e){d(e instanceof Error?e.message:"读取技能失败")}finally{s(!1)}},[w]);async function k(e){g(!0);try{let t=await Qm(e.name,w);m(t)}catch(e){d(e instanceof Error?e.message:"读取技能正文失败")}finally{g(!1)}}async function N(e){f(e.name),d("");try{await Qp(e.name),await j()}catch(e){d(e instanceof Error?e.message:"删除失败")}finally{f("")}}async function S(n){if(e||t){f(n.name),d("");try{await Qg(n.name,w),await j()}catch(e){d(e instanceof Error?e.message:"安装到工作区失败")}finally{f("")}}}async function C(){let e=b.trim();if(e){f("__pull__"),d("");try{await Qx(e,x),y(""),await j()}catch(e){d(e instanceof Error?e.message:"拉取技能失败")}finally{f("")}}}ew.useEffect(()=>{j()},[j]);let M=!!(e||t);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3",n),children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-end gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"grid min-w-[7rem] flex-1 gap-1",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"从源拉取技能"}),(0,eb.jsxs)(gR,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xm,{className:"h-9 w-full",children:(0,eb.jsx)(g$,{placeholder:"选择源"})}),(0,eb.jsx)(xx,{children:0===i.length?(0,eb.jsx)(xv,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xv,{value:"local"===e.label?"local":e.url||e.label,children:[e.label,e.readOnly?"(只读)":""]},e.label))})]})]}),(0,eb.jsxs)("div",{className:"grid min-w-[8rem] flex-[2] gap-1",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"技能名称"}),(0,eb.jsx)("input",{value:b,onChange:e=>y(e.currentTarget.value),placeholder:"kebab-name",className:"h-9 rounded-md border border-input bg-transparent px-3 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring/40"})]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:"__pull__"===u||!b.trim(),onClick:()=>void C(),children:[(0,eb.jsx)(QM,{className:"size-4"}),"拉取"]}),(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-9",onClick:()=>void j(),"aria-label":"刷新技能列表",children:(0,eb.jsx)(bi,{className:"size-4"})})]}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,l?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取技能库"}):0===r.length?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"尚无可用技能。可从上方源拉取,或让 agent 把当前流程保存为技能。"}):(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:r.map(e=>(0,eb.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"mt-0.5 line-clamp-2 text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 flex-col items-end gap-1",children:[(0,eb.jsx)(Bu,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bu,{variant:"outline",children:e.source}):null]})]}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-wrap gap-1.5",children:[(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void k(e),disabled:p,children:[(0,eb.jsx)(uC,{className:"size-3.5"}),"查看"]}),M&&"global"===e.scope?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void S(e),disabled:u===e.name,children:[(0,eb.jsx)(QE,{className:"size-3.5"}),"装入工作区"]}):null,"global"===e.scope?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs text-destructive hover:text-destructive",onClick:()=>void N(e),disabled:u===e.name,children:[(0,eb.jsx)(bo,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dC,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fv,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fb,{children:[(0,eb.jsx)(fw,{children:h?.name}),(0,eb.jsx)(fj,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(wT,{className:"max-h-[60vh] rounded-md border bg-muted/40",children:(0,eb.jsx)("pre",{className:"whitespace-pre-wrap break-words p-3 text-xs leading-relaxed",children:h?.body||"(无正文)"})})]})})]})}function QP({conversationId:e,skillPolicy:t,memoryPolicy:n,onSkillPolicyChange:r,onMemoryPolicyChange:a}){return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"本对话策略"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(vJ,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gR,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xv,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xv,{value:"off",children:"关闭(不注入、不提供工具)"})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本对话的记忆工具与 <memory> 自动注入。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"相关技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本对话工作区可见的技能(含全局库)。可查看正文,或把全局技能装入本对话的工作区。"}),(0,eb.jsx)(QO,{conversationId:e})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"记忆看板"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本对话可见的项目记忆与对话记忆,可查看、编辑、新增与删除。"}),(0,eb.jsx)(QC,{conversationId:e,scopes:["project","conversation"]})]})]})}let Qz=(0,l2.cva)("vtl-surface-card relative w-full rounded-[var(--surface-card-radius)] border px-4 py-3 text-sm [&>svg]:absolute [&>svg]:top-3.5 [&>svg]:left-4 [&>svg~*]:pl-7",{variants:{variant:{default:"border-border",muted:"border-border bg-muted/40",destructive:"border-destructive/35 bg-destructive/10 text-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}});function QI({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,eI.cn)(Qz({variant:t}),e),...n})}function QA({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,eI.cn)("mb-1 leading-none font-medium",e),...t})}function QT({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,eI.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function QR({conversationId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState({}),[i,o]=ew.useState(!0),[l,s]=ew.useState(null),[c,d]=ew.useState(""),u=ew.useCallback(async()=>{let t=(await jl(e)).folders??[];n(t),a(Object.fromEntries(t.map(e=>[e.path,e.vantaloom])))},[e]);async function f(t){if(!l){s(t),d("");try{await js(t,r[t]??"",e),await u()}catch(e){d(e instanceof Error?e.message:"保存失败")}finally{s(null)}}}return(ew.useEffect(()=>{(async()=>{o(!0);try{await u()}catch(e){d(e instanceof Error?e.message:"加载失败")}finally{o(!1)}})()},[u]),i)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取该对话的项目文档"}):(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"系统提示词"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"这里管理本对话工作区文件夹里的系统提示词。会自动读取各文件夹的 agent.md / claude.md 等文档;你可以选一份作为模板,或自行编写,保存后写入该文件夹的 vantaloom.md,并作为带标记的系统提示词长期注入本对话上下文。 若未设置且未检测到任何文档,则使用全局“兜底系统提示词”。"})]}),c?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:c})]}):null,0===t.length?(0,eb.jsx)("p",{className:"rounded-md border border-dashed px-3 py-4 text-xs text-muted-foreground",children:"本对话还没有工作区文件夹。先在“工作区文件夹”里添加一个本机文件夹,这里就会列出它的文档。"}):t.map(e=>{let t=e.docs??[];return(0,eb.jsxs)("div",{className:"grid gap-2 rounded-md border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium",title:e.path,children:e.path}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void f(e.path),disabled:l===e.path,children:[(0,eb.jsx)(Gr,{className:"size-4"}),l===e.path?"保存中":"保存到 vantaloom.md"]})]}),t.length>0?(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"用作模板:"}),t.map(t=>(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs",onClick:()=>a(n=>({...n,[e.path]:t.content})),children:t.name},t.name))]}):(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未检测到 agent.md / claude.md,可直接编写。"}),(0,eb.jsx)(y6,{value:r[e.path]??"",onChange:t=>a(n=>({...n,[e.path]:t.currentTarget.value})),placeholder:"该项目的系统提示词 / 规范,将写入 vantaloom.md",rows:8,className:"resize-y font-mono text-xs"})]},e.path)})]})}let QD=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function Q_({conversation:e,mainModels:t,ccModel:n="",sessionSettings:r,onMainModelsChange:a,onCcModelChange:i,onSessionSettingsChange:o,onSkillPolicyChange:l,onMemoryPolicyChange:s,onClose:c,onEnterConversation:d}){let[u,f]=ew.useState("models"),h=ji(e.settings.engine);return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"flex items-center gap-2 border-b px-3 py-2.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon","aria-label":"关闭设置",onClick:c,className:"shrink-0",children:(0,eb.jsx)(fg.XIcon,{className:"size-5"})}),(0,eb.jsxs)("button",{type:"button",className:"min-w-0 flex-1 rounded-lg px-2 py-1 text-left transition-colors hover:bg-muted/60",title:"返回该对话",onClick:()=>d?.(e),children:[(0,eb.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:[e.agent," · 会话设置"]}),(0,eb.jsx)("div",{className:"truncate text-sm font-semibold",children:e.title})]})]}),(0,eb.jsx)("nav",{className:"flex shrink-0 gap-1 overflow-x-auto border-b px-3 py-2 vtl-scrollbar-hidden",children:QD.filter(e=>"system-prompt"!==e.id&&"skill-memory"!==e.id||!h).map(e=>(0,eb.jsx)("button",{type:"button",onClick:()=>f(e.id),className:(0,eI.cn)("shrink-0 rounded-lg px-3 py-1.5 text-[13px] transition-colors",u===e.id?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60 hover:text-foreground"),children:e.label},e.id))}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto p-4 pb-[max(1.25rem,env(safe-area-inset-bottom))]",children:(0,eb.jsxs)("div",{className:"mx-auto w-full max-w-2xl",children:["models"===u?(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"grid grid-cols-[5rem_minmax(0,1fr)] items-center gap-3 rounded-lg border bg-card px-3 py-2.5",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"运行引擎"}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:function(e){switch(e){case"claude-code":return"Claude Code";case"reclaude":return"reclaude";default:return"Vantaloom"}}(e.settings.engine)})]}),h?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("label",{htmlFor:"conversation-cc-model",className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gR,{value:""===n?jr:n,onValueChange:e=>i?.(e===jr?"":e),children:[(0,eb.jsx)(xm,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):(0,eb.jsx)(xG,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(w4,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(w3,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(w6,{title:"可访问的工作区文件夹",value:r.folders,onValueChange:e=>o({...r,folders:h?e.slice(-1):e})}),h?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null]}):null,"system-prompt"!==u||h?null:(0,eb.jsx)(QR,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(QP,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(jn,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function QL({conversationId:e,ownerMachineId:t,open:n,onOpenChange:r,onEnterConversation:a}){let[i,o]=ew.useState(),[l,s]=ew.useState([]),[c,d]=ew.useState(""),[u,f]=ew.useState({folders:[],blockedCommands:[],allowedTools:[],deniedTools:[],plugins:[],hosts:[]});async function h(e){if(!i)return;let n=e.session??u,r=e.mainModels??l,a=e.ccModel??c,s={subagents:i.settings.subagents??[],mainModels:r,folders:n.folders,blockedCommands:n.blockedCommands,allowedTools:n.allowedTools,deniedTools:n.deniedTools,plugins:n.plugins,hosts:n.hosts,permissionMode:n.permissionMode??i.settings.permissionMode,engine:i.settings.engine,ccModel:i.settings.engine?a:void 0,skillPolicy:e.skillPolicy??i.settings.skillPolicy,memoryPolicy:e.memoryPolicy??i.settings.memoryPolicy};try{let e=await sq(i.id,{settings:s},t);o(e.conversation)}catch{}}function m(){o(void 0),r(!1)}return(ew.useEffect(()=>{if(!n||!e)return;let r=!0;return async function(){try{let n=await sz(e,t);if(!r)return;let a=n.conversation;o(a),s(a.settings.mainModels),d(a.settings.ccModel??""),f({folders:a.settings.folders,blockedCommands:a.settings.blockedCommands,allowedTools:a.settings.allowedTools,deniedTools:a.settings.deniedTools,plugins:a.settings.plugins,hosts:a.settings.hosts})}catch{}}(),()=>{r=!1}},[e,n,t]),n&&i)?(0,eb.jsx)(Q_,{conversation:i,mainModels:l,ccModel:c,sessionSettings:u,onMainModelsChange:e=>{s(e),h({mainModels:e})},onCcModelChange:e=>{d(e),h({ccModel:e})},onSessionSettingsChange:e=>{f(e),h({session:e})},onSkillPolicyChange:e=>{o(t=>t?{...t,settings:{...t.settings,skillPolicy:e}}:t),h({skillPolicy:e})},onMemoryPolicyChange:e=>{o(t=>t?{...t,settings:{...t.settings,memoryPolicy:e}}:t),h({memoryPolicy:e})},onClose:m,onEnterConversation:e=>{m(),a?.(e.id,t)}}):null}function Q$(e){return!e||"local"===e}async function QF(e,t){return QU(await Qq(t,`/${encodeURIComponent(e)}`),t)}async function QB(e,t){return QU(await Qq(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(uU),edges:e.edges.map(uq)})}),t)}async function QV(e,t,n){return QU(await Qq(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(uU),edges:t.edges.map(uq),nodeIds:t.nodeIds})}),n)}async function QH(e,t){return QU(await Qq(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function QU(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=Q$(r=t)?n.ownerMachineId??"local":r,{id:n.id,title:n.title||"新画布",ownerMachineId:a,nodeCount:n.nodeCount??0,running:n.running??!1,createdAt:n.createdAt,updatedAt:n.updatedAt,lastOpenedAt:n.lastOpenedAt}),nodes:e.nodes??[],edges:e.edges??[]}}async function Qq(e,t,n,r){let a=await fetch(eR(Q$(e)?`/api/local/canvas${t}`:`/v1/remote/${e}/canvas${t}`),{cache:"no-store",...n,headers:{...n?.body?{"Content-Type":"application/json"}:{},...n?.headers}});if(r?.allowNotFound&&404===a.status)return;let i=await a.json().catch(()=>({}));if(!a.ok)throw Error("string"==typeof i?.error?i.error:"canvas api failed");return i}let QW=(0,ek.default)("layout-template",[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]]),QK=(0,ek.default)("lock-keyhole",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]),QG=(0,ek.default)("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]),QX=(0,ek.default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]),QY=(0,ek.default)("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),QZ=(0,ek.default)("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]),QJ={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function QQ(e,t,n){return Math.min(Math.max(e,t),n)}function Q0({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...QJ,...n},d=ew.useRef(null),u=ew.useRef(null),f=ew.useRef(null),h=ew.useRef(0),m=ew.useRef(void 0),[p,g]=ew.useState(0),x=t??e.find(e=>"current"===e.status)?.id,v=ew.useCallback(()=>{void 0!==m.current&&(cancelAnimationFrame(m.current),m.current=void 0)},[]),b=ew.useCallback((e,t=340)=>{let n=d.current,r=u.current;if(!n||!r)return;v();let a=Math.max(0,n.scrollHeight-n.clientHeight),i=n.scrollTop,o=QQ(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=QQ((e-l)/t,0,1);if(n.scrollTop=i+(o-i)*(1-Math.pow(1-r,3)),r<1){m.current=requestAnimationFrame(s);return}n.scrollTop=o,m.current=void 0};m.current=requestAnimationFrame(s)},[v]),y=ew.useCallback(e=>{let t=d.current,n=u.current;if(!t||!n)return;let r=Math.max(0,t.scrollHeight-t.clientHeight);if(r<=0)return;e.preventDefault();let a=void 0===m.current?t.scrollTop:h.current,i=1===e.deltaMode?32*e.deltaY:2===e.deltaMode?e.deltaY*e.currentTarget.clientHeight:e.deltaY,o=Math.sign(i);if(0===o)return;let l=Array.from(n.querySelectorAll("[data-slot='roadmap-item']")).map(e=>e.offsetTop),s=QQ(Math.ceil(Math.abs(i)/160),1,3),c=a;for(let e=0;e<s;e+=1)c=function(e,t,n,r){if(0===e.length)return t;if(n>0)return e.find(e=>e>t+1)??r;for(let n=e.length-1;n>=0;n-=1){let r=e[n];if(void 0!==r&&r<t-1)return r}return 0}(l,c,o,r);b(c)},[b]);return ew.useLayoutEffect(()=>{if(!r)return;let e=d.current,t=u.current,n=f.current;if(!e||!t||!n)return void g(0);let a=n.offsetTop,i=t.scrollHeight-p,o=Math.max(0,e.clientHeight-(i-a));g(e=>Math.abs(e-o)>.5?o:e),requestAnimationFrame(()=>{e.scrollTop=a,h.current=a})},[p,e,x,r]),ew.useEffect(()=>v,[v]),(0,eb.jsx)("div",{"data-slot":"roadmap",className:(0,eI.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,eI.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,eI.cn)("relative",l&&"min-h-full"),children:[(0,eb.jsx)("span",{"aria-hidden":"true",className:"absolute top-0 bottom-0 left-[0.3125rem] w-px bg-border"}),e.map(e=>{let t=e.id===x?"current":e.status??"queued";return(0,eb.jsxs)("div",{ref:"current"===t?f:void 0,"data-slot":"roadmap-item","data-status":t,"aria-label":c[t],className:(0,eI.cn)("relative grid grid-cols-[1.5rem_minmax(0,1fr)_auto] items-start gap-2 py-2.5",o),children:[(0,eb.jsx)("span",{"aria-hidden":"true","data-slot":"roadmap-marker",className:(0,eI.cn)("relative z-10 mt-1 size-2.5 rounded-full border bg-background","done"===t&&"border-muted-foreground bg-muted-foreground","current"===t&&"border-primary bg-primary","queued"===t&&"border-border","blocked"===t&&"border-destructive bg-destructive")}),(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{"data-slot":"roadmap-title",className:(0,eI.cn)("text-sm leading-5","queued"===t&&"text-muted-foreground","blocked"===t&&"text-destructive"),children:e.title}),e.description?(0,eb.jsx)("div",{"data-slot":"roadmap-description",className:"mt-0.5 text-xs leading-5 text-muted-foreground",children:e.description}):null]}),e.meta?(0,eb.jsx)("div",{"data-slot":"roadmap-meta",className:"pt-0.5 text-right ui-text-kbd text-muted-foreground",children:e.meta}):null]},e.id)}),p>0?(0,eb.jsx)("div",{"aria-hidden":"true","data-slot":"roadmap-bottom-spacer",style:{height:p}}):null]})})})}let Q1="/themes/jelly/bg1.png",Q2="/themes/jelly/bg2.png",Q5="/themes/jelly/bg3.png",Q4="/themes/jelly/bg4.png";function Q3({image:e,position:t="center",opacity:n=.72,blur:r="10px"}){return{"--vtl-jelly-card-image":`url("${e}")`,"--vtl-jelly-card-position":t,"--vtl-jelly-card-opacity":String(n),"--vtl-jelly-card-blur":r}}function Q6({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let Q8={product:"Vantaloom",overview:"运维总览",subtitle:"本机服务、工作组机器和 Agent 运行状态。",workgroup:"工作组",health:"系统健康",cost:"今日消耗",activeRuns:"运行中",queue:"排队任务",machineStatus:"机器状态",resourceTrend:"资源趋势",runMix:"运行构成",schedule:"日程提醒",incidents:"关注事项",online:"在线",local:"本机",p2p:"P2P",direct:"直连",sleeping:"休眠",memory:"内存",cpu:"CPU",gpu:"GPU",disk:"磁盘",theme:"主题"},Q7={search:"搜索控制台...",dashboard:"仪表盘",canvas:"工程",machines:"机器",schedules:"日程",settings:"设置",overview:"总览",runs:"运行",telemetry:"遥测",canvasRecent:"打开最近工程",canvasNew:"新建工程",canvasAll:"浏览所有画布",projectCanvas:"画布",projectKanban:"看板",projectSettings:"工程设置",projectNewConversation:"新建对话",projectEmpty:"暂无工程",conversationRecent:"打开最近对话",conversationNew:"新建 Agent 对话",conversationAll:"浏览所有对话",fleet:"机器组",access:"访问控制",calendar:"计划任务",billing:"用量与账单"};Q8.local,Q8.direct,Q8.online,Q8.p2p,Q8.online,Q8.direct,Q8.sleeping,Q8.cpu,Q8.memory,Q8.activeRuns;function Q9(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function eee({children:e}){return(0,eb.jsx)("section",{className:"vtl-app-background flex h-full min-h-0 flex-col pb-14 md:pb-0 text-foreground",children:(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:e})})}function eet(e){return Math.max(0,...e.map(e=>e.y+e.h))}function een(e,t,n){return t.some(t=>t.id!==n&&e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y)}function eer(e){let t=Math.max(2,Math.min(12,e.w)),n=Math.max(1,e.h),r=Math.max(0,Math.min(12-t,e.x)),a=Math.max(0,e.y);return{...e,x:r,y:a,w:t,h:n}}function eea(e,t,n,r,a){for(let i=0;i<eet(e)+8;i+=1)for(let o=0;o<=12-r;o+=1){let l={id:t,kind:n,x:o,y:i,w:r,h:a};if(!een(l,e))return l}return{id:t,kind:n,x:0,y:eet(e)+2,w:r,h:a}}function eei(e){return{...e.defaultConfig}}function eeo(e){return e.payloads?.[G4]}function eel({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vx,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vb,{className:"max-h-[420px]",children:[(0,eb.jsx)(vy,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vw,{heading:a,children:t.map(e=>(0,eb.jsxs)(vj,{value:`${e.title} ${e.description}`,keywords:[e.id,e.defaultConfig.dataSource,e.defaultConfig.title],onSelect:()=>o(e.id),className:"min-h-14 items-start py-2",children:[(0,eb.jsx)("span",{className:"mt-0.5 grid size-8 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate font-medium",children:e.title}),(0,eb.jsx)("span",{className:"mt-0.5 block truncate ui-text-kbd text-muted-foreground",children:e.description})]}),(0,eb.jsxs)(vk,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function ees({open:e,dragMode:t,label:n="页面卡片操作",onOpenChange:r,onAdd:a,onDragModeChange:i}){let o=[{key:"add",label:"添加卡片",icon:(0,eb.jsx)(lJ,{className:"size-4"}),onClick:a,pressed:!1},{key:"drag",label:"拖拽排版",icon:(0,eb.jsx)(lW,{className:"size-4"}),onClick:()=>i(!t),pressed:t}];return(0,eb.jsx)("div",{className:"fixed right-5 bottom-5 z-30",children:(0,eb.jsxs)("div",{className:"relative size-8",children:[o.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,onClick:t.onClick,className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",t.pressed&&"border-foreground bg-foreground text-background shadow-lg ring-1 ring-background/50 hover:bg-foreground hover:text-background dark:bg-primary dark:text-primary-foreground dark:hover:bg-primary",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":n,"aria-expanded":e,onClick:()=>r(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eec=(0,ek.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function eed({layout:e,layouts:t,cellSize:n,cellHeight:r,dragMode:a,selected:i,resizing:o,onSelect:l,onMove:s,onCut:c,onCopy:d,onSettingsOpen:u,onResizeStart:f,onResizeEnd:h,children:m}){let[p,g]=ew.useState(!1),x=r??n,v=e.x*(n+12),b=e.y*(x+12),y=e.w*n+(e.w-1)*12,w=e.h*x+(e.h-1)*12;return(0,eb.jsxs)("div",{"data-editable-card":e.id,className:(0,eI.cn)("absolute rounded-lg p-1 transition-[left,top,width,height,box-shadow] duration-200 ease-out",a&&"cursor-grab active:cursor-grabbing",p&&"duration-150",i&&!o&&"z-20 shadow-sm",o&&"z-30 transition-none"),style:{left:v,top:b,width:y,height:w},onPointerDown:function(r){if(!a||o)return;let i=r.target;if(i instanceof HTMLElement&&i.closest("[data-editable-card-action]"))return;r.preventDefault(),r.currentTarget.setPointerCapture(r.pointerId),l();let c=r.clientX,d=r.clientY;function u(r){let a=eer({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});een(a,t,e.id)||s(a)}g(!0),window.addEventListener("pointermove",u),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",e),g(!1)})},onClick:()=>{a&&l()},children:[(0,eb.jsx)("div",{className:(0,eI.cn)("size-full",a&&"pointer-events-none"),children:m}),i&&a&&!o?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-1 rounded-lg border-2 border-foreground"}):null,i&&a&&!o?(0,eb.jsx)(eeu,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eef,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function eeu({onSettingsOpen:e,onCut:t,onCopy:n,onResizeStart:r}){return(0,eb.jsx)(l4,{"data-editable-card-action":!0,placement:"inline",size:"sm","aria-label":"卡片操作",className:"!absolute top-full left-1/2 z-40 mt-2 -translate-x-1/2 rounded-lg bg-popover/95 p-1 shadow-md",onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:(0,eb.jsxs)(l3,{children:[(0,eb.jsx)(l6,{type:"button","aria-label":"调整大小",onClick:r,children:(0,eb.jsx)(lX,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"卡片设置",onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),e()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(eec,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"复制",onClick:n,children:(0,eb.jsx)(lU,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"剪切",onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),t()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(l0,{className:"size-4"})})]})})}function eef({layout:e,layouts:t,cellSize:n,onResize:r,onResizeEnd:a}){return(0,eb.jsx)("div",{"data-editable-card-action":!0,className:"pointer-events-none absolute inset-1 z-40 border-2 border-foreground",children:[{id:"top-left",className:"top-0 left-0 -translate-x-1/2 -translate-y-1/2 cursor-nwse-resize"},{id:"top",className:"top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 cursor-ns-resize"},{id:"top-right",className:"top-0 right-0 translate-x-1/2 -translate-y-1/2 cursor-nesw-resize"},{id:"right",className:"top-1/2 right-0 translate-x-1/2 -translate-y-1/2 cursor-ew-resize"},{id:"bottom-right",className:"right-0 bottom-0 translate-x-1/2 translate-y-1/2 cursor-nwse-resize"},{id:"bottom",className:"bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 cursor-ns-resize"},{id:"bottom-left",className:"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 cursor-nesw-resize"},{id:"left",className:"top-1/2 left-0 -translate-x-1/2 -translate-y-1/2 cursor-ew-resize"}].map(i=>(0,eb.jsx)("button",{type:"button","aria-label":`调整 ${i.id}`,className:(0,eI.cn)("pointer-events-auto absolute size-2.5 border border-foreground bg-background shadow-sm",i.className),onPointerDown:o=>(function(i,o){i.preventDefault(),i.stopPropagation(),i.currentTarget.setPointerCapture(i.pointerId);let l=i.clientX,s=i.clientY;function c(a){let i=Math.round((a.clientX-l)/(n+12)),c=Math.round((a.clientY-s)/(n+12)),d={...e};o.includes("right")&&(d.w=e.w+i),o.includes("bottom")&&(d.h=e.h+c),o.includes("left")&&(d.x=e.x+i,d.w=e.w-i),o.includes("top")&&(d.y=e.y+c,d.h=e.h-c),een(d=eer(d),t,e.id)||r(d)}window.addEventListener("pointermove",c),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",e),a()})})(o,i.id)},i.id))})}function eeh({className:e,...t}){return(0,eb.jsx)(dT,{"data-slot":"sheet-overlay",className:(0,eI.cn)("vtl-overlay fixed inset-0 z-50 animate-in fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0",e),...t})}function eem({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dI,{children:[(0,eb.jsx)(eeh,{}),(0,eb.jsxs)(dL,{"data-slot":"sheet-content","data-side":n,className:(0,eI.cn)("vtl-surface-modal fixed z-50 flex flex-col gap-4 border transition ease-in-out outline-none data-[state=closed]:animate-out data-[state=closed]:duration-200 data-[state=open]:animate-in data-[state=open]:duration-300","right"===n&&"inset-y-0 right-0 h-full w-3/4 border-r-0 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm","left"===n&&"inset-y-0 left-0 h-full w-3/4 border-l-0 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm","top"===n&&"inset-x-0 top-0 h-auto border-t-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top","bottom"===n&&"inset-x-0 bottom-0 h-auto border-b-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",e),...a,children:[t,r&&(0,eb.jsxs)(dK,{className:"absolute top-3 right-3 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none",children:[(0,eb.jsx)(fg.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eep({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,eI.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeg({className:e,...t}){return(0,eb.jsx)(dH,{"data-slot":"sheet-title",className:(0,eI.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eex({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"sheet-description",className:(0,eI.cn)("text-sm text-muted-foreground",e),...t})}function eev({open:e,layout:t,definition:n,config:r,cellSize:a,onOpenChange:i,onConfigChange:o}){let l=t&&a>0?t.w*a+(t.w-1)*12:320,s=t&&a>0?t.h*a+(t.h-1)*12:180;return(0,eb.jsx)(dC,{open:e,onOpenChange:i,children:(0,eb.jsx)(eem,{side:"right",className:"w-screen gap-0 border-0 bg-transparent p-0 shadow-none sm:max-w-none",children:t&&n&&r?(0,eb.jsxs)("div",{className:"grid h-full min-w-0 grid-cols-1 lg:grid-cols-[minmax(0,1fr)_24rem]",children:[(0,eb.jsx)(eeb,{width:l,height:s,className:"hidden lg:grid",children:n.render(r)}),(0,eb.jsxs)("div",{className:"animate-in slide-in-from-right-4 flex h-full w-full flex-col border-y-0 border-r-0 bg-background text-foreground shadow-lg duration-300",children:[(0,eb.jsxs)(eep,{className:"border-b",children:[(0,eb.jsx)(eeg,{children:"卡片设置"}),(0,eb.jsxs)(eex,{children:[n.title," · ",t.w,"x",t.h]})]}),(0,eb.jsxs)("div",{className:"grid flex-1 content-start gap-4 overflow-y-auto p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"显示标题"}),(0,eb.jsx)(eA,{value:r.title,onChange:e=>o({title:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"数据来源"}),(0,eb.jsx)(eA,{value:r.dataSource,onChange:e=>o({dataSource:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"刷新间隔"}),(0,eb.jsx)(eA,{value:r.refreshRate,onChange:e=>o({refreshRate:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"备注"}),(0,eb.jsx)("textarea",{value:r.note,rows:4,className:"min-h-24 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 ui-text-control transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",onChange:e=>o({note:e.currentTarget.value})})]}),(0,eb.jsxs)("div",{className:"rounded-lg border bg-muted/20 p-3",children:[(0,eb.jsx)("div",{className:"ui-text-control font-medium",children:"当前绑定"}),(0,eb.jsxs)("div",{className:"mt-2 grid gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["类型:",n.id]}),(0,eb.jsxs)("span",{children:["来源:",r.dataSource]}),(0,eb.jsxs)("span",{children:["刷新:",r.refreshRate]})]})]})]})]})]}):null})})}function eeb({width:e,height:t,className:n,children:r}){let[a,i]=XH(),o=i.width>0&&i.height>0?Math.min(1,(i.width-32)/e,(i.height-32)/t):1;return(0,eb.jsx)("div",{ref:a,className:(0,eI.cn)("min-h-0 min-w-0 place-items-center overflow-hidden p-4",n),children:(0,eb.jsx)("div",{className:"animate-in fade-in-0 zoom-in-95 origin-center rounded-lg duration-300",style:{width:e,height:t,transform:`scale(${Math.max(.1,o)})`},children:r})})}function eey({boardId:e,definitions:t,initialLayouts:n,clipboardItems:r=[],minRows:a=9,className:i,actionLabel:o,paletteGroupTitle:l,onClipboardItemsChange:s,onOverlayOpenChange:c}){var d;let[u,f]=ew.useState(!1),[h,m]=ew.useState(!1),[p,g]=ew.useState(!1),[x,v]=ew.useState(()=>n),[b,y]=ew.useState({}),[w,j]=ew.useState(),[k,N]=ew.useState(),[S,C]=ew.useState(),M=ew.useRef(0),E=ew.useRef(0),[O,P]=XH(),z=P.width>0?(d=P.width)<480?2:d<768?4:12:12,I=function(e,t){if(t>=12)return e;let n=[...e].sort((e,t)=>e.y!==t.y?e.y-t.y:e.x-t.x),r=[];for(let e of n){let n=Math.max(2,Math.min(t,Math.round(e.w*t/12))),a=e.h,i=!1;for(let o=0;o<Q9(r)+8&&!i;o+=1)for(let l=0;l<=t-n&&!i;l+=1){let t={...e,x:l,y:o,w:n,h:a};!function(e,t){return t.some(t=>e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y)}(t,r)&&(r.push(t),i=!0)}i||r.push({...e,x:0,y:Q9(r),w:n,h:a})}return r}(x,z),A=P.width>0?(P.width-12*(z-1))/z:96,T=z<12?72:A,R=Math.max(a,eet(I)+2),D=R*T+(R-1)*12,_=ew.useMemo(()=>new Map(t.map(e=>[e.id,e])),[t]);function L(e){let t=_.get(e.kind);return b[e.id]??(t?eei(t):void 0)}function $(e){v(t=>{let n=eer(e);return een(n,t,n.id)?t:t.map(e=>e.id===n.id?n:e)})}function F(e){let t=_.get(e);if(!t)return;E.current+=1;let n=`${e}-added-${E.current}`,r=eea(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eei(t)})),j(n),N(void 0),m(!1)}function B(e,t){let n=x.find(t=>t.id===e),r=n?_.get(n.kind):void 0;n&&r&&y(n=>({...n,[e]:{...n[e]??eei(r),...t}}))}ew.useEffect(()=>{c?.(h||!!S)},[h,c,S]),ew.useEffect(()=>()=>c?.(!1),[c]),ew.useEffect(()=>{p||(j(void 0),N(void 0))},[p]),ew.useEffect(()=>{if(k)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof HTMLElement&&t.closest("[data-editable-card-action]")||(j(k),N(void 0))}},[k]);let V=z<12,H=S?x.find(e=>e.id===S):void 0,U=H?_.get(H.kind):void 0,q=H?L(H):void 0;if(V){let n=[...I].sort((e,t)=>e.y-t.y||e.x-t.x),r=Object.fromEntries(x.map(e=>[e.id,e.w]));return(0,eb.jsxs)(eee,{children:[(0,eb.jsx)("div",{ref:O,"data-editable-card-board":e,className:(0,eI.cn)("mx-auto max-w-7xl p-3",i),children:(0,eb.jsx)("div",{className:"grid grid-cols-2 gap-3",children:n.map(e=>{let t=_.get(e.kind);if(!t)return null;let n=L(e);if(!n)return null;let a=(r[e.id]??e.w)>6;return(0,eb.jsx)("div",{className:(0,eI.cn)("min-w-0 overflow-hidden rounded-lg",a&&"col-span-2"),style:{minHeight:a?200:120},children:t.render(n)},e.id)})})}),(0,eb.jsx)(ees,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eel,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eev,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(eee,{children:[(0,eb.jsx)("div",{ref:O,"data-editable-card-board":e,className:(0,eI.cn)("relative mx-auto max-w-7xl p-4 lg:p-6",p&&"select-none",i),style:{minHeight:D+48},onDragOver:e=>{Array.from(e.dataTransfer.types).includes(G4)&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},onDrop:function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id");if(!t)return;let n=r.find(e=>e.id===t),a=n&&eeo(n);if(!n||!a||!_.has(a.kind))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let i=O.current,o=i?.getBoundingClientRect();!function(e,t){let n=eeo(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eer({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eet(x),w:n.w,h:n.h}),i=t&&!een(a,x)?a:eea(x,r,n.kind,n.w,n.h);v(e=>[...e,i]),y(e=>({...e,[r]:{...n.config}})),j(r),N(void 0)}(n,{x:o&&A>0?Math.round((e.clientX-o.left-24)/(A+12)):0,y:o&&A>0?Math.round((e.clientY-o.top-24)/(A+12)):eet(x)})},onPointerDown:e=>{e.target===e.currentTarget&&(j(void 0),p||N(void 0))},children:(0,eb.jsx)("div",{className:"relative",style:{height:D},children:I.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eed,{layout:t,layouts:I,cellSize:A,cellHeight:T,dragMode:p,selected:w===t.id,resizing:k===t.id,onSelect:()=>{p&&j(t.id)},onMove:$,onCut:()=>(function(t){let n=x.find(e=>e.id===t),r=n?_.get(n.kind):void 0,a=n?L(n):void 0;if(!n||!r||!a)return;let i=function({boardId:e,layout:t,definition:n,config:r}){let a={boardId:e,kind:t.kind,w:t.w,h:t.h,config:{...r}};return{id:`clip-${e}-${t.id}`,title:r.title||n.title,description:n.description,meta:`${t.w}x${t.h}`,icon:n.icon,dragData:{"application/vnd.vantaloom.clip-kind":"workspace-card","application/vnd.vantaloom.workspace-card-board":e,"application/vnd.vantaloom.workspace-card-kind":t.kind,"application/vnd.vantaloom.workspace-card-width":String(t.w),"application/vnd.vantaloom.workspace-card-height":String(t.h),"application/vnd.vantaloom.workspace-card-config":JSON.stringify(r),[G4]:JSON.stringify(a)},payloads:{[G4]:a}}}({boardId:e,layout:n,definition:r,config:a});s?.(e=>[i,...e.filter(e=>e.id!==i.id)]),v(e=>e.filter(e=>e.id!==t)),y(e=>{let n={...e};return delete n[t],n}),j(void 0),N(void 0),C(e=>e===t?void 0:e)})(t.id),onCopy:()=>(function(e){let t=x.find(t=>t.id===e),n=t?_.get(t.kind):void 0;if(!t||!n)return;M.current+=1;let r=`${e}-copy-${M.current}`,a=eea(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eei(n)})),j(r)})(t.id),onSettingsOpen:()=>C(t.id),onResizeStart:()=>{j(void 0),N(t.id)},onResizeEnd:()=>{j(t.id),N(void 0)},children:n.render(r)},t.id):null})})}),(0,eb.jsx)(ees,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eel,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eev,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eew({parts:e}){return(0,eb.jsx)(eb.Fragment,{children:e.map((e,t)=>(0,eb.jsx)("span",{className:e.small?"text-[0.55em]":void 0,children:e.text},`${e.text}-${t}`))})}function eej({value:e,minSize:t=24,maxSize:n=180,className:r,...a}){let i=ew.useRef(null),o=ew.useRef(null),[l,s]=ew.useState(t),c=function(e){let t=e.trim();if(/^[$¥€]\s*\d/.test(t))return[{text:t.replace(/^[$¥€]\s*/,""),small:!1},{text:t[0]??"",small:!0}];let n=t.match(/^(.+?)\s*\/\s*(.+)$/);if(n)return[{text:n[1]??"",small:!1},{text:"/",small:!0},{text:n[2]??"",small:!1}];let r=t.match(/^(.+?)([%a-zA-Z$¥€]+)$/);return r?[{text:r[1]??t,small:!1},{text:r[2]??"",small:!0}]:[{text:t,small:!1}]}(e);return ew.useLayoutEffect(()=>{let e=i.current,r=o.current;if(!e||!r)return;function a(e,r){let a=e.clientWidth,i=e.clientHeight;if(a<=0||i<=0)return;let o=t,l=n,c=t;for(;o<=l;){let e=Math.floor((o+l)/2);r.style.fontSize=`${e}px`,r.getBoundingClientRect().width<=a&&r.getBoundingClientRect().height<=i?(c=e,o=e+1):l=e-1}s(c)}a(e,r);let l=new ResizeObserver(()=>a(e,r));return l.observe(e),()=>l.disconnect()},[n,t,e]),(0,eb.jsxs)("div",{ref:i,className:(0,eI.cn)("relative min-h-0 min-w-0 overflow-hidden",r),...a,children:[(0,eb.jsx)("span",{ref:o,"aria-hidden":"true",className:"pointer-events-none invisible absolute right-0 bottom-0 flex items-baseline whitespace-nowrap font-semibold leading-none tracking-normal",children:(0,eb.jsx)(eew,{parts:c})}),(0,eb.jsx)("span",{className:"absolute right-0 bottom-0 flex max-w-full items-baseline whitespace-nowrap font-semibold leading-none tracking-normal text-foreground",style:{fontSize:l},children:(0,eb.jsx)(eew,{parts:c})})]})}function eek(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeN({label:e,value:t,minSize:n=42,maxSize:r=180,valueClassName:a="absolute right-0 bottom-0 h-2/3 w-full"}){return(0,eb.jsxs)("div",{className:"relative h-full min-h-0",children:[(0,eb.jsx)("div",{className:"text-xl font-semibold tracking-normal",children:e}),(0,eb.jsx)(eej,{value:eek(t),minSize:n,maxSize:r,className:a})]})}function eeS(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeC({className:e,value:t=0,...n}){let r=eeS(t);return(0,eb.jsx)("div",{"data-slot":"progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,className:(0,eI.cn)("relative h-1.5 w-full overflow-hidden rounded-full bg-muted",e),...n,children:(0,eb.jsx)("div",{"data-slot":"progress-indicator",className:"h-full rounded-full bg-primary transition-all",style:{width:`${r}%`}})})}function eeM({className:e,value:t=0,label:n,showValue:r=!0,...a}){let i=eeS(t),o=2*Math.PI*39;return(0,eb.jsxs)("div",{"data-slot":"progress-ring","aria-label":n?`${n} ${i}%`:`${i}%`,role:"img",className:(0,eI.cn)("relative grid size-24 place-items-center",e),...a,children:[(0,eb.jsxs)("svg",{"aria-hidden":"true","data-slot":"progress-ring-svg",viewBox:"0 0 100 100",className:"absolute inset-0 size-full overflow-visible",children:[(0,eb.jsx)("circle",{cx:"50",cy:"50",r:39,fill:"none",stroke:"var(--muted)",strokeWidth:12}),i>0&&(0,eb.jsx)("circle",{cx:"50",cy:"50",r:39,fill:"none",stroke:"var(--primary)",strokeDasharray:o,strokeDashoffset:o-i/100*o,strokeLinecap:"round",strokeWidth:12,className:"origin-center -rotate-90 transition-all"})]}),(0,eb.jsx)("div",{"data-slot":"progress-ring-center",className:"relative z-10 grid size-16 place-items-center rounded-full bg-card",children:r&&(0,eb.jsxs)("span",{className:"ui-text-control font-medium tabular-nums",children:[i,"%"]})})]})}(0,ek.default)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);let eeE=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function eeO({canvases:e,mode:t="active",scrollable:n=!1,onSelect:r}){let a=ew.useMemo(()=>e.map(e=>{var n;return{id:e.id,status:"live"===(n=e).status?"current":"review"===n.status?"blocked":"done",title:(0,eb.jsx)(eeP,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(Q0,{items:a,scrollCurrentIntoView:!1,className:(0,eI.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,eI.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function eeP({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("grid w-full items-center gap-4 rounded-lg px-2 py-0 text-left transition-colors hover:bg-muted/50","active"===n?"grid-cols-[minmax(0,1fr)_8rem_1.75rem]":"grid-cols-[minmax(0,1fr)_7rem_7rem_8rem]"),onClick:t,children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("div",{className:"truncate text-xs text-muted-foreground",children:"active"===n?e.purpose:`${e.nodes} nodes`})]}),"active"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeC,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,eI.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eez,{icon:(0,eb.jsx)(Vk,{}),value:`${e.snapshots}`}),(0,eb.jsx)(eez,{icon:(0,eb.jsx)(eeE,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function eez({icon:e,value:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e}),(0,eb.jsx)("span",{className:"tabular-nums",children:t})]})}let eeI=(0,ek.default)("memory-stick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]),eeA=(0,ek.default)("radio-tower",[["path",{d:"M4.9 16.1C1 12.2 1 5.8 4.9 1.9",key:"s0qx1y"}],["path",{d:"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5",key:"1idnkw"}],["circle",{cx:"12",cy:"9",r:"2",key:"1092wv"}],["path",{d:"M16.2 4.8c2 2 2.26 5.11.8 7.47",key:"ojru2q"}],["path",{d:"M19.1 1.9a9.96 9.96 0 0 1 0 14.1",key:"rhi7fg"}],["path",{d:"M9.5 18h5",key:"mfy3pd"}],["path",{d:"m8 22 4-11 4 11",key:"25yftu"}]]),eeT=(0,ek.default)("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);var eeR=ew;function eeD(){return(eeD=Object.assign.bind()).apply(null,arguments)}function ee_(e){return ew.createElement(Rf,eeD({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var eeL=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kv(e))return e;var a=kv(n)||null==n;return a?e(n,r):(a||function(e,t){if(!e)throw Error("Invariant failed")}(!1,"minPointSize callback function received a value with type of ".concat(typeof n,". Currently only numbers or null/undefined are supported.")),t)}},ee$=["children"],eeF=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function eeB(e){var{children:t}=e,n=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,ee$);return ew.createElement(eeF.Provider,{value:n},t)}var eeV=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kj(r,t,0)};function eeH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eeU(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eeH(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eeH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var eeq=j3([PY,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),eeW=j3([eeq],e=>null==e?void 0:e.maxBarSize),eeK=j3([Ck,PY,Yw,Yj,(e,t,n)=>n],(e,t,n,r,a)=>t.filter(t=>"horizontal"===e?t.xAxisId===n:t.yAxisId===r).filter(e=>e.isPanorama===a).filter(e=>!1===e.hide).filter(e=>"bar"===e.type)),eeG=j3([eeK,e=>e.rootProps.barSize,(e,t)=>{var n=Ck(e),r=Yw(e,t),a=Yj(e,t);if(null!=r&&null!=a)return"horizontal"===n?Is(e,"xAxis",r):Is(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Md),a=e.filter(e=>null==e.stackId);return[...Object.entries(r.reduce((e,t)=>{var n=e[t.stackId];return null==n&&(n=[]),n.push(t),e[t.stackId]=n,e},{})).map(e=>{var r,[a,i]=e;return{stackId:a,dataKeys:i.map(e=>e.dataKey),barSize:eeV(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eeV(t,n,e.barSize)}))]}),eeX=(e,t,n)=>{var r,a,i=Ck(e),o=Yw(e,t),l=Yj(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=Im(e,"xAxis",o,n),a=Ih(e,"xAxis",o,n)):(r=Im(e,"yAxis",l,n),a=Ih(e,"yAxis",l,n)),kU(r,a)},eeY=j3([eeG,C$,e=>e.rootProps.barGap,CF,(e,t,n)=>{var r,a,i,o,l=eeq(e,t);if(null==l)return 0;var s=Yw(e,t),c=Yj(e,t);if(null==s||null==c)return 0;var d=Ck(e),u=C$(e),{maxBarSize:f}=l;return"horizontal"===d?(i=Im(e,"xAxis",s,n),o=Ih(e,"xAxis",s,n)):(i=Im(e,"yAxis",c,n),o=Ih(e,"yAxis",c,n)),null!=(r=null!=(a=kU(i,o,!0))?a:null==f?u:f)?r:0},eeX,eeW],(e,t,n,r,a,i,o)=>{var l=function(e,t,n,r,a){var i,o,l=r.length;if(!(l<1)){var s=kj(e,n,0,!0),c=[];if(kP(null==(i=r[0])?void 0:i.barSize)){var d=!1,u=n/l,f=r.reduce((e,t)=>e+(t.barSize||0),0);(f+=(l-1)*s)>=n&&(f-=(l-1)*s,s=0),f>=n&&u>0&&(d=!0,u*=.9,f=l*u);var h={offset:((n-f)/2|0)-s,size:0};o=r.reduce((e,t)=>{var n,r={stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:h.offset+h.size+s,size:d?u:null!=(n=t.barSize)?n:0}},a=[...e,r];return h=r.position,a},c)}else{var m=kj(t,n,0,!0);n-2*m-(l-1)*s<=0&&(s=0);var p=(n-2*m-(l-1)*s)/l;p>1&&(p>>=0);var g=kP(a)?Math.min(p,a):p;o=r.reduce((e,t,n)=>[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:m+(p+s)*n+(p-g)/2,size:g}}],c)}return o}}(n,r,a!==i?a:i,e,null==o?t:o);return a!==i&&null!=l&&(l=l.map(e=>eeU(eeU({},e),{},{position:eeU(eeU({},e.position),{},{offset:e.position.offset-a/2})}))),l}),eeZ=j3([eeY,eeq],(e,t)=>{if(null!=e&&null!=t){var n=e.find(e=>e.stackId===t.stackId&&null!=t.dataKey&&e.dataKeys.includes(t.dataKey));if(null!=n)return n.position}}),eeJ=j3([(e,t,n)=>{var r=Ck(e),a=Yw(e,t),i=Yj(e,t);if(null!=a&&null!=i)return"horizontal"===r?zu(e,"yAxis",i,n):zu(e,"xAxis",a,n)},eeq],(e,t)=>{var n=Ms(t);if(!e||null==n||null==t)return;var{stackId:r}=t;if(null!=r){var a=e[r];if(a){var{stackedData:i}=a;if(i)return i.find(e=>e.key===n)}}}),eeQ=j3([k5,k3,(e,t,n)=>{var r=Yw(e,t);if(null!=r)return Im(e,"xAxis",r,n)},(e,t,n)=>{var r=Yj(e,t);if(null!=r)return Im(e,"yAxis",r,n)},(e,t,n)=>{var r=Yw(e,t);if(null!=r)return Ih(e,"xAxis",r,n)},(e,t,n)=>{var r=Yj(e,t);if(null!=r)return Ih(e,"yAxis",r,n)},eeZ,Ck,ke,eeX,eeJ,eeq,(e,t,n,r)=>r],(e,t,n,r,a,i,o,l,s,c,d,u,f)=>{var h,{chartData:m,dataStartIndex:p,dataEndIndex:g}=s;if(null!=u&&null!=o&&null!=t&&("horizontal"===l||"vertical"===l)&&null!=n&&null!=r&&null!=a&&null!=i&&null!=c){var{data:x}=u;if(null!=(h=null!=x&&x.length>0?x:null==m?void 0:m.slice(p,g+1)))return function(e){var{layout:t,barSettings:{dataKey:n,minPointSize:r,hasCustomShape:a},pos:i,bandSize:o,xAxis:l,yAxis:s,xAxisTicks:c,yAxisTicks:d,stackedData:u,displayedData:f,offset:h,cells:m,parentViewBox:p,dataStartIndex:g}=e,x="horizontal"===t?s:l,v=u?x.scale.domain():null,b=(e=>{var{numericAxis:t}=e,n=t.scale.domain();if("number"===t.type){var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]);return r<=0&&a>=0?0:a<0?a:r}return n[0]})({numericAxis:x}),y=x.scale.map(b);return f.map((e,f)=>{if(u){var x=u[f+g];if(null==x)return null;j=((e,t)=>{if(!t||2!==t.length||!kv(t[0])||!kv(t[1]))return e;var n=Math.min(t[0],t[1]),r=Math.max(t[0],t[1]),a=[e[0],e[1]];return(!kv(e[0])||e[0]<n)&&(a[0]=n),(!kv(e[1])||e[1]>r)&&(a[1]=r),a[0]>r&&(a[0]=r),a[1]<n&&(a[1]=n),a})(x,v)}else Array.isArray(j=kT(e,n))||(j=[b,j]);var w=eeL(r,0)(j[1],f);if("horizontal"===t){var j,k,N,S,C,M,E,O=s.scale.map(j[0]),P=s.scale.map(j[1]);if(null==O||null==P)return null;k=kB({axis:l,ticks:c,bandSize:o,offset:i.offset,entry:e,index:f}),N=null!=(E=null!=P?P:O)?E:void 0,S=i.size;var z=O-P;if(C=kg(z)?0:z,M={x:k,y:h.top,width:S,height:h.height},Math.abs(w)>0&&Math.abs(C)<Math.abs(w)){var I=kp(C||w)*(Math.abs(w)-Math.abs(C));N-=I,C+=I}}else{var A=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==A||null==T)return null;if(k=A,N=kB({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-A,C=i.size,M={x:h.left,y:N,width:h.width,height:C},Math.abs(w)>0&&Math.abs(S)<Math.abs(w)){var R=kp(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?eto(eto({},e),{},{stackedBarStart:y,x:k,y:N,width:S,height:C,value:u?j:j[1],payload:e,background:M,tooltipPosition:{x:k+S/2,y:N+C/2},parentViewBox:p,originalDataIndex:f},m&&m[f]&&m[f].props):null}).filter(Boolean)}({layout:l,barSettings:u,pos:o,parentViewBox:t,bandSize:c,xAxis:n,yAxis:r,xAxisTicks:a,yAxisTicks:i,stackedData:d,displayedData:h,offset:e,cells:f,dataStartIndex:p})}}),ee0=(e,t)=>t,ee1=(e,t,n)=>n,ee2=j3([ee0,PY,ee1],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),ee5=j3([ee2],e=>e.map(e=>e.id)),ee4=j3([e=>e,ee0,ee1],(e,t,n)=>{var r=ee5(e,t,n),a=[];return r.forEach(t=>{var r=eeQ(e,t,n,void 0);null==r||r.forEach(e=>{var t=e.originalDataIndex;a[t]=((e,t)=>{if(!e)return t;if(!t)return e;var n=Math.min(e.x,e.x+e.width,t.x,t.x+t.width),r=Math.min(e.y,e.y+e.height,t.y,t.y+t.height);return{x:n,y:r,width:Math.max(e.x,e.x+e.width,t.x,t.x+t.width)-n,height:Math.max(e.y,e.y+e.height,t.y,t.y+t.height)-r}})(a[t],e)})}),a}),ee3=["index"];function ee6(){return(ee6=Object.assign.bind()).apply(null,arguments)}var ee8=(0,ew.createContext)(void 0),ee7=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),ee9=e=>{var{index:t}=e,n=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,ee3),r=(e=>{var t=(0,ew.useContext)(ee8);if(null!=t){var{stackId:n}=t;return"url(#".concat(ee7(n,e),")")}})(t);return ew.createElement(IG,ee6({className:"recharts-bar-stack-layer",clipPath:r},n))},ete=["onMouseEnter","onMouseLeave","onClick"],ett=["value","background","tooltipPosition"],etn=["id"],etr=["onMouseEnter","onClick","onMouseLeave"];function eta(){return(eta=Object.assign.bind()).apply(null,arguments)}function eti(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eto(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eti(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eti(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etl(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ets=eeR.memo(e=>{var{dataKey:t,stroke:n,strokeWidth:r,fill:a,name:i,hide:o,unit:l,tooltipType:s,id:c}=e,d={dataDefinedOnItem:void 0,getPosition:kE,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:kW(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return eeR.createElement(Dl,{tooltipEntrySettings:d})});function etc(e){var t,n=Nr(_t),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etl(o,ete),u=Da(l,a,o.id),f=Di(s),h=Do(c,a,o.id);if(!i||null==r)return null;var m=IU(i);return eeR.createElement(_q,{zIndex:(t=CJ.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kP(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etl(e,ett);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=eto(eto(eto(eto(eto({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),Ap(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return eeR.createElement(ee_,eta({key:"background-bar-".concat(t)},x))}))}function etd(e){var{showLabels:t,children:n,rects:r}=e,a=null==r?void 0:r.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return eto(eto({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return eeR.createElement(Li,{value:t?a:void 0},n)}function etu(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=Nr(_t),c=Nr(_r),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,eeR.useState)(!1),[h,m]=(0,eeR.useState)(!1);(0,eeR.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,eeR.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=eeR.createElement(ee_,eta({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?eeR.createElement(_q,{zIndex:CJ.activeBar},eeR.createElement(ee9,{index:i.originalDataIndex},v)):v}function etf(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return eeR.createElement(ee_,eta({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function eth(e){var t,{data:n,props:r}=e,a=null!=(t=IH(r))?t:{},{id:i}=a,o=etl(a,etn),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etl(r,etr),m=Da(d,s,i),p=Di(f),g=Do(u,s,i);return n?eeR.createElement(eeR.Fragment,null,n.map((e,t)=>eeR.createElement(ee9,eta({index:e.originalDataIndex,key:"rectangle-".concat(null==e?void 0:e.x,"-").concat(null==e?void 0:e.y,"-").concat(null==e?void 0:e.value,"-").concat(t),className:"recharts-bar-rectangle"},Ap(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?eeR.createElement(etu,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):eeR.createElement(etf,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etm(e){var{props:t,previousRectanglesRef:n}=e,{data:r,layout:a,isAnimationActive:i,animationBegin:o,animationDuration:l,animationEasing:s,onAnimationEnd:c,onAnimationStart:d}=t,u=n.current,f=TC(t,"recharts-bar-"),[h,m]=(0,eeR.useState)(!1),p=(0,eeR.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,eeR.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return eeR.createElement(etd,{showLabels:!h,rects:r},eeR.createElement(TS,{animationId:f,begin:o,duration:l,isActive:i,easing:s,onAnimationEnd:p,onAnimationStart:g,key:f},e=>{var i=1===e?r:null==r?void 0:r.map((t,n)=>{var r=u&&u[n];if(r)return eto(eto({},t),{},{x:kN(r.x,t.x,e),y:kN(r.y,t.y,e),width:kN(r.width,t.width,e),height:kN(r.height,t.height,e)});if("horizontal"===a){var i=kN(0,t.height,e),o=kN(t.stackedBarStart,t.y,e);return eto(eto({},t),{},{y:o,height:i})}var l=kN(0,t.width,e),s=kN(t.stackedBarStart,t.x,e);return eto(eto({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:eeR.createElement(IG,null,eeR.createElement(eth,{props:t,data:i}))}),eeR.createElement(Lc,{label:t.label}),t.children)}function etp(e){var t=(0,eeR.useRef)(null);return eeR.createElement(etm,{previousRectanglesRef:t,props:e})}var etg=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:kT(e,t)}};class etx extends eeR.PureComponent{render(){var{hide:e,data:t,dataKey:n,className:r,xAxisId:a,yAxisId:i,needClip:o,background:l,id:s}=this.props;if(e||null==t)return null;var c=(0,jB.clsx)("recharts-bar",r);return eeR.createElement(IG,{className:c,id:s},o&&eeR.createElement("defs",null,eeR.createElement(Yy,{clipPathId:s,xAxisId:a,yAxisId:i})),eeR.createElement(IG,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},eeR.createElement(etc,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),eeR.createElement(etp,this.props)))}}var etv={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",background:!1,hide:!1,isAnimationActive:"auto",label:!1,legendType:"rect",minPointSize:0,xAxisId:0,yAxisId:0,zIndex:CJ.bar};function etb(e){var t,{xAxisId:n,yAxisId:r,hide:a,legendType:i,minPointSize:o,activeBar:l,animationBegin:s,animationDuration:c,animationEasing:d,isAnimationActive:u}=e,{needClip:f}=Yb(n,r),h=Nr(Ck),m=S7(),p=Tt(e.children,A3),g=Nr(t=>eeQ(t,e.id,m,p));if("vertical"!==h&&"horizontal"!==h)return null;var x=null==g?void 0:g[0];return t=null==x||null==x.height||null==x.width?0:"vertical"===h?x.height/2:x.width/2,eeR.createElement(eeB,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etg,errorBarOffset:t},eeR.createElement(etx,eta({},e,{layout:h,needClip:f,data:g,xAxisId:n,yAxisId:r,hide:a,legendType:i,minPointSize:o,activeBar:l,animationBegin:s,animationDuration:c,animationEasing:d,isAnimationActive:u})))}eeR.memo(function(e){var t,n,r=AU(e,etv),a=(t=r.stackId,null!=(n=(0,ew.useContext)(ee8))?n.stackId:null!=t?k$(t):void 0),i=S7();return eeR.createElement(_j,{id:r.id,type:"bar"},e=>eeR.createElement(eeR.Fragment,null,eeR.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kW(n,t),payload:e}]})(r)}),eeR.createElement(ets,{dataKey:r.dataKey,stroke:r.stroke,strokeWidth:r.strokeWidth,fill:r.fill,name:r.name,hide:r.hide,unit:r.unit,tooltipType:r.tooltipType,id:e}),eeR.createElement(_z,{type:"bar",id:e,data:void 0,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:0,dataKey:r.dataKey,stackId:a,hide:r.hide,barSize:r.barSize,minPointSize:r.minPointSize,maxBarSize:r.maxBarSize,isPanorama:i,hasCustomShape:null!=r.shape}),eeR.createElement(_q,{zIndex:r.zIndex},eeR.createElement(etb,eta({},r,{id:e})))))},Fk).displayName="Bar";let ety=(0,ek.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);function etw({label:e,description:t,value:n}){return(0,eb.jsxs)("div",{className:"relative h-full min-h-0",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("div",{className:"text-xl font-semibold tracking-normal",children:e}),(0,eb.jsx)("div",{className:"mt-1 text-sm leading-5 text-muted-foreground",children:t})]}),(0,eb.jsx)(eej,{value:eek(n),minSize:48,maxSize:220,className:"absolute right-0 bottom-0 h-2/3 w-full"})]})}(0,ek.default)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);var etj=ew,etk=(e,t,n,r)=>Im(e,"xAxis",t,r),etN=(e,t,n,r)=>Ih(e,"xAxis",t,r),etS=(e,t,n,r)=>Im(e,"yAxis",n,r),etC=(e,t,n,r)=>Ih(e,"yAxis",n,r),etM=j3([Ck,etk,etS,etN,etC],(e,t,n,r,a)=>kR(e,"xAxis")?kU(t,r,!1):kU(n,a,!1));function etE(e){return"line"===e.type}var etO=j3([PY,(e,t,n,r,a)=>a],(e,t)=>e.filter(etE).find(e=>e.id===t)),etP=j3([Ck,etk,etS,etN,etC,etO,etM,j9],(e,t,n,r,a,i,o,l)=>{var s,{chartData:c,dataStartIndex:d,dataEndIndex:u}=l;if(null!=i&&null!=t&&null!=n&&null!=r&&null!=a&&0!==r.length&&0!==a.length&&null!=o&&("horizontal"===e||"vertical"===e)){var{dataKey:f,data:h}=i;if(null!=(s=null!=h&&h.length>0?h:null==c?void 0:c.slice(d,u+1)))return function(e){var{layout:t,xAxis:n,yAxis:r,xAxisTicks:a,yAxisTicks:i,dataKey:o,bandSize:l,displayedData:s}=e;return s.map((e,s)=>{var c=kT(e,o);if("horizontal"===t){var d=kF({axis:n,ticks:a,bandSize:l,entry:e,index:s}),u=null==c?null:r.scale.map(c);return{x:d,y:null!=u?u:null,value:c,payload:e}}var f=null==c?null:n.scale.map(c),h=kF({axis:r,ticks:i,bandSize:l,entry:e,index:s});return null==f||null==h?null:{x:f,y:h,value:c,payload:e}}).filter(Boolean)}({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:a,dataKey:f,bandSize:o,displayedData:s})}}),etz=["id"],etI=["type","layout","connectNulls","needClip","shape"],etA=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function etT(){return(etT=Object.assign.bind()).apply(null,arguments)}function etR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function etD(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etR(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):etR(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function et_(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var etL=etj.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:a,fill:i,name:o,hide:l,unit:s,tooltipType:c,id:d}=e,u={dataDefinedOnItem:n,getPosition:kE,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kW(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etj.createElement(Dl,{tooltipEntrySettings:u})}),et$=(e,t)=>"".concat(t,"px ").concat(e,"px");function etF(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=IH(et_(r,etz));return etj.createElement(Ym,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function etB(e){var{showLabels:t,children:n,points:r}=e,a=(0,etj.useMemo)(()=>null==r?void 0:r.map(e=>{var t,n,r={x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,width:0,lowerWidth:0,upperWidth:0,height:0};return etD(etD({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etj.createElement(Li,{value:t?a:void 0},n)}function etV(e){var{clipPathId:t,pathRef:n,points:r,strokeDasharray:a,props:i}=e,{type:o,layout:l,connectNulls:s,needClip:c,shape:d}=i,u=etD(etD({},Iq(et_(i,etI))),{},{fill:"none",className:"recharts-line-curve",clipPath:c?"url(#clipPath-".concat(t,")"):void 0,points:r,type:o,layout:l,connectNulls:s,strokeDasharray:null!=a?a:i.strokeDasharray});return etj.createElement(etj.Fragment,null,(null==r?void 0:r.length)>1&&etj.createElement(Rf,etT({shapeType:"curve",option:d},u,{pathRef:n})),etj.createElement(etF,{points:r,clipPathId:t,props:i}))}function etH(e){var{clipPathId:t,props:n,pathRef:r,previousPointsRef:a,longestAnimatedLengthRef:i}=e,{points:o,strokeDasharray:l,isAnimationActive:s,animationBegin:c,animationDuration:d,animationEasing:u,animateNewValues:f,width:h,height:m,onAnimationEnd:p,onAnimationStart:g}=n,x=a.current,v=TC(o,"recharts-line-"),b=(0,etj.useRef)(v),[y,w]=(0,etj.useState)(!1),j=(0,etj.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etj.useCallback)(()=>{"function"==typeof g&&g(),w(!0)},[g]),N=function(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}(r.current),S=(0,etj.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etj.createElement(etB,{points:o,showLabels:!y},n.children,etj.createElement(TS,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kN(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return et$(t,e);for(var a=Math.floor(e/r),i=e%r,o=[],l=0,s=0;l<n.length;s+=null!=(c=n[l])?c:0,++l){var c,d=n[l];if(null!=d&&s+d>i){o=[...n.slice(0,l),i-s];break}}var u=o.length%2==0?[0,t]:[t];return[...function(e,t){for(var n=e.length%2!=0?[...e,0]:e,r=[],a=0;a<t;++a)r.push(...n);return r}(n,a),...o,...u].map(e=>"".concat(e,"px")).join(", ")})(d,N,"".concat(l).split(/[,\s]+/gim).map(e=>parseFloat(e))):et$(N,d):null==l?void 0:String(l),e>0&&N>0&&(a.current=o,i.current=Math.max(i.current,d)),x){var u=x.length/o.length,p=1===e?o:o.map((t,n)=>{var r=Math.floor(n*u);if(x[r]){var a=x[r];return etD(etD({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return f?etD(etD({},t),{},{x:kN(2*h,t.x,e),y:kN(m/2,t.y,e)}):etD(etD({},t),{},{x:t.x,y:t.y})});return a.current=p,etj.createElement(etV,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etj.createElement(etV,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etj.createElement(Lc,{label:n.label}))}function etU(e){var{clipPathId:t,props:n}=e,r=(0,etj.useRef)(null),a=(0,etj.useRef)(0),i=(0,etj.useRef)(null);return etj.createElement(etH,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:a,pathRef:i})}var etq=(e,t)=>{var n,r;return{x:null!=(n=e.x)?n:void 0,y:null!=(r=e.y)?r:void 0,value:e.value,errorVal:kT(e.payload,t)}};class etW extends etj.Component{render(){var{hide:e,dot:t,points:n,className:r,xAxisId:a,yAxisId:i,top:o,left:l,width:s,height:c,id:d,needClip:u,zIndex:f}=this.props;if(e)return null;var h=(0,jB.clsx)("recharts-line",r),{r:m,strokeWidth:p}=YI(t),g=Tn(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etj.createElement(_q,{zIndex:f},etj.createElement(IG,{className:h},u&&etj.createElement("defs",null,etj.createElement(Yy,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etj.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etj.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etj.createElement(eeB,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:etq,errorBarOffset:0},etj.createElement(etU,{props:this.props,clipPathId:d}))),etj.createElement(Yv,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var etK={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:"auto",label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:CJ.line,type:"linear"};function etG(e){var t=AU(e,etK),{activeDot:n,animateNewValues:r,animationBegin:a,animationDuration:i,animationEasing:o,connectNulls:l,dot:s,hide:c,isAnimationActive:d,label:u,legendType:f,xAxisId:h,yAxisId:m,id:p}=t,g=et_(t,etA),{needClip:x}=Yb(h,m),v=Nr(F3),b=Nr(Ck),y=S7(),w=Nr(e=>etP(e,h,m,y,p));if("horizontal"!==b&&"vertical"!==b||null==w||null==v)return null;var{height:j,width:k,x:N,y:S}=v;return etj.createElement(etW,etT({},g,{id:p,connectNulls:l,dot:s,activeDot:n,animateNewValues:r,animationBegin:a,animationDuration:i,animationEasing:o,isAnimationActive:d,hide:c,label:u,legendType:f,xAxisId:h,yAxisId:m,points:w,layout:b,height:j,width:k,left:N,top:S,needClip:x}))}var etX=etj.memo(function(e){var t=AU(e,etK),n=S7();return etj.createElement(_j,{id:t.id,type:"line"},e=>etj.createElement(etj.Fragment,null,etj.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kW(n,t),payload:e}]})(t)}),etj.createElement(etL,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),etj.createElement(_z,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etj.createElement(etG,etT({},t,{id:e}))))},Fk);etX.displayName="Line";var etY=["axis"],etZ=(0,ew.forwardRef)((e,t)=>ew.createElement(Y2,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:etY,tooltipPayloadSearcher:LO,categoricalChartProps:e,ref:t}));let etJ={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},etQ={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},et0={topologyNode:function({data:e}){return(0,eb.jsxs)("div",{className:"vtl-surface-card min-w-36 rounded-[var(--surface-card-radius)] border px-3 py-2",children:[(0,eb.jsx)(ov,{type:"target",position:D.Top,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"source",position:D.Bottom,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"target",position:D.Left,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"source",position:D.Right,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2.5 shrink-0 rounded-full",etJ[e.state])}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-medium",children:e.label})]}),e.meta?(0,eb.jsx)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:e.meta}):null]})}},et1={topologyEdge:function({id:e,sourceX:t,sourceY:n,targetX:r,targetY:a,sourcePosition:i,targetPosition:o,data:l}){let[s]=aE({sourcePosition:i,sourceX:t,sourceY:n,targetPosition:o,targetX:r,targetY:a}),{x:c,y:d}=function(e){if("u"<typeof document)return{x:0,y:0};let t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("d",e);let n=t.getTotalLength(),r=t.getPointAtLength(n/2);return{x:r.x,y:r.y}}(s),u=l?.kind??"direct";return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(oL,{id:e,path:s,className:(0,eI.cn)("fill-none",etQ[u],"p2p"===u&&"stroke-dasharray-[8_6]","relay"===u&&"stroke-dasharray-[12_8]"),style:{strokeWidth:"down"===u?3:2.4,strokeLinecap:"round",strokeLinejoin:"round"}}),(l?.label||l?.meta)&&(0,eb.jsx)("foreignObject",{x:c-48,y:d-20,width:96,height:40,className:"overflow-visible",requiredExtensions:"http://www.w3.org/1999/xhtml",children:(0,eb.jsxs)("div",{className:"pointer-events-none grid h-10 w-24 content-center rounded-md border bg-background/95 px-2 py-1 text-center shadow-sm",children:[l.label?(0,eb.jsx)("div",{className:"truncate text-xs font-medium leading-4",children:l.label}):null,l.meta?(0,eb.jsx)("div",{className:"truncate ui-text-kbd text-muted-foreground",children:l.meta}):null]})})]})}};function et2({nodes:e,links:t,className:n,...r}){let a=ew.useMemo(()=>e.map(e=>({id:e.id,data:{label:e.label,meta:e.meta,state:e.state??"online"},position:{x:e.x/100*1e3,y:e.y/100*560},type:"topologyNode"})),[e]),i=ew.useMemo(()=>t.map(e=>({id:e.id,data:{kind:e.kind??"direct",label:e.label,meta:e.meta},source:e.from,target:e.to,type:"topologyEdge"})),[t]);return(0,eb.jsx)("div",{"data-slot":"topology-map",className:(0,eI.cn)("h-full min-h-0 overflow-hidden rounded-xl bg-muted/25",n),...r,children:(0,eb.jsx)(lh,{children:(0,eb.jsx)(lg,{nodes:a,edges:i,nodeTypes:et0,edgeTypes:et1,fitView:!0,fitViewOptions:{maxZoom:1.15,minZoom:.45,padding:.22},minZoom:.35,maxZoom:1.5,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,panOnDrag:!1,zoomOnScroll:!1,zoomOnDoubleClick:!1,preventScrolling:!1,proOptions:{hideAttribution:!0},className:"topology-flow text-foreground",children:(0,eb.jsx)(lN,{gap:28,size:1,color:"var(--border)",className:"opacity-80"})})})})}function et5({nodes:e,links:t}){return(0,eb.jsx)(et2,{nodes:e,links:t})}function et4({title:e,count:t}){return(0,eb.jsxs)("div",{className:"flex h-7 shrink-0 items-center justify-between",children:[(0,eb.jsx)("h2",{className:"text-sm font-semibold tracking-normal",children:e}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:t})]})}function et3({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eI.cn)("px-2 py-2",t>0&&"border-t"),children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("div",{className:(0,eI.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function et6({items:e}){let t=ew.useMemo(()=>e.map(([e,t,n,r])=>({id:`${e}-${n}`,status:"完成"===r?"done":"运行中"===r?"current":"失败"===r?"blocked":"queued",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[3.25rem_8rem_minmax(0,1fr)_4rem] items-center gap-3",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"truncate ui-text-kbd text-muted-foreground",children:t}),(0,eb.jsx)("span",{className:"truncate",children:n}),(0,eb.jsx)("span",{className:"text-right ui-text-kbd text-muted-foreground",children:r})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-1.5"})}function et8({items:e}){let t=ew.useMemo(()=>e.map(e=>{var t;return{id:e.id,status:"running"===(t=e.state)?"current":"blocked"===t||"failed"===t?"blocked":"queued",title:(0,eb.jsx)(et7,{item:e})}}),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-2"})}function et7({item:e}){return(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_7.5rem_5rem] items-center gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.machine," · ",e.agent," · ",e.started]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)(eeC,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("div",{className:"ui-text-kbd text-muted-foreground",children:e.runtime})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)(eeC,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function et9({workers:e}){return(0,eb.jsx)("div",{className:"mt-2 grid min-h-0 flex-1 content-start overflow-hidden",children:e.map((e,t)=>(0,eb.jsx)(ene,{worker:e,divided:t>0},e.id))})}function ene({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-24 grid-cols-[minmax(0,1fr)_2.5rem_auto] items-center gap-4 px-2 py-2",t&&"border-t"),children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-lg font-semibold tracking-normal",children:e.machine}),(0,eb.jsx)("div",{className:"mt-0.5 truncate ui-text-kbd text-muted-foreground",children:e.role})]}),(0,eb.jsxs)("div",{className:"text-right text-sm font-medium tabular-nums",children:[e.active,"/",e.capacity]}),(0,eb.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,eb.jsx)(ent,{label:"CPU",value:e.cpu}),(0,eb.jsx)(ent,{label:"MEM",value:e.memory})]})]})}function ent({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeM,{value:t,label:e,className:"size-16 [&_[data-slot=progress-ring-center]]:size-10 [&_[data-slot=progress-ring-center]]:bg-background [&_[data-slot=progress-ring-center]_span]:text-xs"}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e})]})}function enn({events:e}){let t=ew.useMemo(()=>e.map(([e,t],n)=>({id:`${e}-${t}`,status:0===n?"current":"done",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[3.25rem_minmax(0,1fr)] items-center gap-2",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"truncate",children:t})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-1.5"})}function enr({machines:e}){return(0,eb.jsx)("div",{className:"mt-2 grid min-h-0 flex-1 content-start overflow-hidden",children:e.map((e,t)=>(0,eb.jsx)(ena,{machine:e,divided:t>0},e.id))})}function ena({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-20 grid-cols-[minmax(0,1fr)_minmax(0,1.45fr)] items-center gap-4 px-2 py-2",t&&"border-t"),children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eno,{status:e.status}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.name})]}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.os," · ",e.link," · heartbeat ",e.heartbeat]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 sm:grid-cols-4",children:[(0,eb.jsx)(eni,{icon:(0,eb.jsx)(uN,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(eeI,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(uS,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(eeA,{}),label:"NET",value:e.network})]})]})}function eni({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsxs)("div",{className:"flex justify-between gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1 [&_svg]:size-3",children:[e,t]}),(0,eb.jsxs)("span",{children:[n,"%"]})]}),(0,eb.jsx)(eeC,{value:n,className:"h-1.5"})]})}function eno({status:e}){return(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enl({links:e}){let t=ew.useMemo(()=>e.map(([e,t,n,r,a])=>({id:`${e}-${t}`,status:"Relay fallback"===n?"blocked":"current",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_5rem_4rem_3.5rem] items-center gap-3",children:[(0,eb.jsxs)("span",{className:"truncate",children:[e," / ",t]}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:n}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:r}),(0,eb.jsx)("span",{className:"text-right ui-text-kbd text-muted-foreground",children:a})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-2"})}function ens({config:e,data:t}){return(0,eb.jsx)(Vr,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Y4,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZO,{vertical:!1}),(0,eb.jsx)(Zq,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(BK,{content:(0,eb.jsx)(Vi,{indicator:"line"})}),(0,eb.jsx)(YJ,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(YJ,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(YJ,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enc({services:e}){let[t,n]=XH(),r=Math.max(1,Math.floor((Math.max(0,n.width-192-64-32)+5)/12)),a=Math.max(48,n.height>0?Math.floor((n.height-0*Math.max(0,e.length-1))/e.length):48),i=Math.max(28,a-22);return(0,eb.jsx)("div",{ref:t,className:"mt-2 min-h-0 flex-1",children:e.map((e,t)=>(0,eb.jsx)(end,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function end({service:e,divided:t,rowHeight:n,sampleCount:r,sampleHeight:a}){let i=ew.useMemo(()=>{var t,n;return t=e.samples,n=r,t.length>=n?t.slice(t.length-n):Array.from({length:n},(e,n)=>{let r=n%t.length;return t[r]??0})},[r,e.samples]);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid grid-cols-[12rem_minmax(0,1fr)_4rem] items-center gap-4 px-2",t&&"border-t"),style:{height:n},children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("div",{className:(0,eI.cn)("mt-0.5 truncate ui-text-kbd text-muted-foreground","告警"===e.state&&"text-destructive"),children:e.state})]}),(0,eb.jsx)("div",{"aria-label":`${e.name} 30 minute stability samples`,className:"flex min-w-0 items-center overflow-hidden",style:{gap:5},children:i.map((t,n)=>{var r;return(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded-[2px]",(r=t)<60?"bg-destructive":r<72?"bg-destructive/55":r<84?"bg-primary/35":r<92?"bg-primary/60":"bg-primary"),style:{width:7,height:a},title:`${t}%`},`${e.id}-${n}`)})}),(0,eb.jsxs)("div",{className:"text-right text-sm font-medium tabular-nums",children:[e.samples.at(-1),"%"]})]})}let enu=[{id:"canvas-vantaloom-base",title:"Vantaloom 基座设计",status:"live",purpose:"承载多标签系统、文件树、终端和 Agent 会话节点。",nodes:18,agents:3,progress:64,health:91,runtime:"3h 12m",tokenUsage:62e4,lastOpened:"刚刚",snapshots:14,unsavedChanges:3,roadmap:[{title:"接入节点模板选择",state:"done"},{title:"处理节点吸附与连线遮挡",state:"done"},{title:"合并多标签页拖拽",state:"running"},{title:"沉淀真实项目模板",state:"queued"}],settings:{nodeTemplates:["多标签页系统","文件管理树","终端标签组","Agent 对话"],defaultLayout:["默认缩放 0.72","节点内容 2x","定位点 24px"],folders:["D:/Projects/Vantaloom-ui","D:/Projects/Vantaloom-ui/apps"],sharing:["工作组管理员可编辑","成员可审阅","访客不可访问"],autosave:["每 45 秒保存","节点拖拽结束保存","切换工作区保存"],snapshots:["保留最近 30 个","发布前创建检查点"],hosts:["Studio-PC","Linux-runner-02"],plugins:["Browser","Git checkpoint"]}},{id:"canvas-agent-lab",title:"Agent 编排实验",status:"live",purpose:"验证多 Agent 对话、工具窗口和剪切板在画布中的协同。",nodes:11,agents:4,progress:41,health:78,runtime:"1h 36m",tokenUsage:308e3,lastOpened:"8 分钟前",snapshots:9,unsavedChanges:1,roadmap:[{title:"四分工作区布局",state:"done"},{title:"面板替换进剪切板",state:"done"},{title:"会话浏览页",state:"running"},{title:"会话节点化",state:"queued"}],settings:{nodeTemplates:["Agent 对话","数据表标签","浏览器标签"],defaultLayout:["默认双栏","右侧可调整","剪切板常驻"],folders:["D:/Projects/Vantaloom-ui/apps/vantaloom"],sharing:["仅本机管理员可编辑"],autosave:["每 60 秒保存"],snapshots:["保留最近 12 个"],hosts:["Studio-PC"],plugins:["Browser"]}},{id:"canvas-release-map",title:"发布路线图",status:"review",purpose:"梳理组件库、主应用和文档的发布前检查。",nodes:9,agents:1,progress:83,health:86,runtime:"42m",tokenUsage:144e3,lastOpened:"今天 15:02",snapshots:7,unsavedChanges:0,roadmap:[{title:"组件清单",state:"done"},{title:"风险列表",state:"done"},{title:"最终检查",state:"running"}],settings:{nodeTemplates:["Diff 标签","数据表标签","文件预览标签"],defaultLayout:["审阅模式默认开启"],folders:["D:/Projects/Vantaloom-ui/docs"],sharing:["工作组可审阅"],autosave:["手动保存"],snapshots:["里程碑保留"],hosts:["Studio-PC"],plugins:[]}},{id:"canvas-browser-matrix",title:"浏览器预览矩阵",status:"idle",purpose:"检查不同 UA、比例和内嵌预览模式的表现。",nodes:6,agents:0,progress:100,health:94,runtime:"28m",tokenUsage:78e3,lastOpened:"昨天 18:44",snapshots:5,unsavedChanges:0,roadmap:[{title:"自适应模式",state:"done"},{title:"长宽比菜单",state:"done"},{title:"导航按钮",state:"done"}],settings:{nodeTemplates:["浏览器标签","多标签页系统"],defaultLayout:["自适应预览"],folders:["D:/Projects/Vantaloom-ui/packages/ui"],sharing:["仅自己"],autosave:["关闭"],snapshots:["保留最近 5 个"],hosts:["Studio-PC"],plugins:["Browser"]}},{id:"canvas-ops-topology",title:"工作组拓扑",status:"idle",purpose:"记录机器、服务和工作组连接关系。",nodes:15,agents:0,progress:100,health:89,runtime:"1h 04m",tokenUsage:92e3,lastOpened:"周四 11:30",snapshots:11,unsavedChanges:0,roadmap:[{title:"机器节点整理",state:"done"},{title:"连接策略标注",state:"done"},{title:"访问权限检查",state:"done"}],settings:{nodeTemplates:["数据表标签","浏览器标签","终端标签组"],defaultLayout:["视口吸附开启","节点吸附开启"],folders:["D:/Projects/Vantaloom-ui/ops"],sharing:["管理员可编辑","成员可查看"],autosave:["每 2 分钟保存"],snapshots:["每日保留"],hosts:["Studio-PC","Linux-runner-02","MacBook-build"],plugins:[]}}];function enf(e,t,n,r,a,i,o){return{id:e,title:t,status:"idle",purpose:n,nodes:r,agents:0,progress:100,health:90,runtime:a,tokenUsage:i,lastOpened:o,snapshots:Math.max(3,Math.round(r/2)),unsavedChanges:0,roadmap:[{title:"整理节点结构",state:"done"},{title:"检查连接关系",state:"done"},{title:"保存最终快照",state:"done"}],settings:{nodeTemplates:["多标签页系统","文件预览标签"],defaultLayout:["默认缩放 0.72","节点吸附开启"],folders:["D:/Projects/Vantaloom-ui"],sharing:["仅自己"],autosave:["关闭"],snapshots:["保留最近 5 个"],hosts:["Studio-PC"],plugins:[]}}}enu.push(enf("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),enf("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),enf("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),enf("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),enf("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let enh=enu.filter(e=>"idle"!==e.status),enm=enu.filter(e=>"idle"===e.status);function enp(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function eng(e,t){return(0,eb.jsx)("section",{className:(0,eI.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:Q3({image:t,opacity:.88,blur:"0px"}),children:e})}let enx=[{id:"metric-active",kind:"metric-active",x:0,y:0,w:3,h:3},{id:"metric-nodes",kind:"metric-nodes",x:3,y:0,w:3,h:3},{id:"metric-unsaved",kind:"metric-unsaved",x:6,y:0,w:3,h:3},{id:"metric-snapshots",kind:"metric-snapshots",x:9,y:0,w:3,h:3},{id:"active",kind:"active",x:0,y:3,w:12,h:3},{id:"recent",kind:"recent",x:0,y:6,w:12,h:Math.max(3,Math.ceil(.75*enm.length)+1)}];function env({open:e,title:t,description:n,eyebrow:r,panels:a,defaultPanelId:i="overview",onOpenChange:o}){let l=sy(),[s,c]=ew.useState(i),d=a.find(e=>e.id===s)??a[0];return ew.useEffect(()=>{e&&c(i)},[i,e]),(0,eb.jsx)(dC,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fv,{hideClose:!0,className:(0,eI.cn)("gap-0 overflow-hidden p-0",l?"inset-0 h-svh w-full max-w-none translate-x-0 translate-y-0 rounded-none border-0":"h-[min(44rem,calc(100svh-2rem))] max-w-5xl"),children:[(0,eb.jsx)(fw,{className:"sr-only",children:t}),(0,eb.jsxs)(fj,{className:"sr-only",children:[r?(0,eb.jsxs)(eb.Fragment,{children:[r,". "]}):null,n??t]}),l?(0,eb.jsxs)("div",{className:"flex h-full flex-col",children:[(0,eb.jsxs)("header",{className:"flex shrink-0 items-center gap-3 border-b px-4 py-3",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"关闭",onClick:()=>o(!1),children:(0,eb.jsx)(fg.XIcon,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[r?(0,eb.jsx)("div",{className:"truncate text-xs text-muted-foreground",children:r}):null,(0,eb.jsx)("div",{className:"truncate text-sm font-semibold",children:t})]})]}),(0,eb.jsx)("nav",{className:"shrink-0 overflow-x-auto border-b [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsx)("div",{className:"flex gap-1.5 px-4 py-2",children:a.map(e=>(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("inline-flex shrink-0 items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors",d?.id===e.id?"bg-foreground text-background":"bg-muted text-muted-foreground"),onClick:()=>c(e.id),children:[e.icon?(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e.icon}):null,(0,eb.jsx)("span",{children:e.label}),e.badge?(0,eb.jsx)(Bu,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"p-4",children:d?.content})})]}):(0,eb.jsxs)("div",{className:"grid size-full min-h-0 grid-cols-[15rem_minmax(0,1fr)]",children:[(0,eb.jsx)("aside",{"data-slot":"resource-management-dialog-sidebar",className:"min-h-0 border-r bg-muted/20",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"space-y-1 p-2",children:a.map(e=>(0,eb.jsxs)(ez.Button,{"data-slot":"resource-management-dialog-nav-item",type:"button",variant:"ghost",className:(0,eI.cn)("h-9 w-full justify-start px-2.5 text-left font-medium",d?.id===e.id?"bg-muted text-foreground":"text-muted-foreground hover:bg-muted/70 hover:text-foreground"),onClick:()=>c(e.id),children:[e.icon?(0,eb.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center [&_svg]:size-4",children:e.icon}):null,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label}),e.badge?(0,eb.jsx)(Bu,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(wT,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enb({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let[r,a]=ew.useState(),i=ew.useMemo(()=>(function({onSelect:e}){return[{id:"metric-active",title:"活跃画布",description:"当前正在编辑的画布数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("活跃画布","画布列表"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"当前正在编辑的画布数量",value:String(enh.length)}),Q1)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(Vk,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("运行节点","画布节点"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),Q2)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(j_,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("未保存","画布保存状态"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"等待写入的画布变更",value:"4"}),Q5)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Ge,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("快照","画布快照"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"可回退的历史存档",value:"46"}),Q4)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enp("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(et4,{title:t.title,count:enh.length}),(0,eb.jsx)(eeO,{canvases:enh,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(m1,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enm.length)+1)},defaultConfig:enp("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(et4,{title:t.title,count:enm.length}),(0,eb.jsx)(eeO,{canvases:enm,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eey,{boardId:"canvas-library",definitions:i,initialLayouts:enx,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enw,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function eny({icon:e,value:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e}),(0,eb.jsx)("span",{className:"tabular-nums",children:t})]})}function enw({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(env,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VN,{}),content:(0,eb.jsx)(enj,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(QW,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enN,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(QZ,{}),content:(0,eb.jsx)(enN,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(m1,{}),content:(0,eb.jsx)(enN,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(QY,{}),content:(0,eb.jsx)(enN,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gr,{}),content:(0,eb.jsx)(enN,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Ge,{}),content:(0,eb.jsx)(enN,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(QG,{}),content:(0,eb.jsx)(enN,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(QX,{}),content:(0,eb.jsx)(enN,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enj({canvas:e}){return(0,eb.jsxs)("div",{className:"grid gap-5",children:[(0,eb.jsxs)("button",{type:"button",className:"group relative grid min-h-72 rounded-[2rem] border bg-card p-7 text-left transition-colors hover:bg-muted/35",children:[(0,eb.jsxs)("div",{className:"grid gap-5",children:[(0,eb.jsxs)("div",{className:"max-w-2xl",children:[(0,eb.jsx)("h3",{className:"text-3xl font-semibold tracking-normal",children:e.title}),(0,eb.jsx)("p",{className:"mt-4 text-sm leading-6 text-muted-foreground",children:e.purpose})]}),(0,eb.jsxs)("div",{className:"grid max-w-56 gap-2",children:[(0,eb.jsx)(enk,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enk,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enk,{label:"Snapshots",value:`${e.snapshots}`})]})]}),(0,eb.jsx)("span",{className:"absolute right-7 bottom-7 text-sm font-medium text-foreground transition-opacity group-hover:opacity-70",children:"进入"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm font-medium",children:"Roadmap"}),(0,eb.jsx)(eny,{icon:(0,eb.jsx)(Vk,{}),value:e.runtime})]}),(0,eb.jsx)(Q0,{items:e.roadmap.map(e=>({id:e.title,title:e.title,status:"running"===e.state?"current":"done"===e.state?"done":"queued"})),viewportClassName:"max-h-64"})]})]})}function enk({label:e,value:t}){return(0,eb.jsxs)("span",{className:"grid min-w-0 gap-0.5 py-0.5",children:[(0,eb.jsx)("span",{className:"truncate ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-semibold tracking-normal",children:t})]})}function enN({title:e,items:t,empty:n="暂无内容"}){return(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:e}),(0,eb.jsx)("div",{className:"overflow-hidden rounded-xl border bg-card",children:t.length>0?t.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eI.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(QK,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 truncate",children:e})]},e)):(0,eb.jsx)("div",{className:"px-3 py-6 text-sm text-muted-foreground",children:n})})]})}function enS({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vx,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vb,{children:[(0,eb.jsx)(vy,{children:"没有匹配节点。"}),(0,eb.jsx)(vw,{heading:"可用节点",children:uL.map(e=>(0,eb.jsxs)(vj,{value:`${e.title} ${e.description} ${e.keywords}`,onSelect:()=>n(e),children:[(0,eb.jsx)("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsxs)(vk,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enC({nodes:e,edges:t,selectedNodeId:n,clipboardItems:r,onNodesChange:a,onEdgesChange:i,onNodesSet:o,onEdgesSet:l,onSelectedNodeChange:s,onClipboardItemsChange:c}){let d=ew.useRef(null),{addPaletteOpen:u,addTemplateNode:f,handleAddPaletteOpenChange:h,handleCanvasAction:m,handleCanvasDragOver:p,handleCanvasDrop:g,handleNodeCanvasConnect:x,handleNodeCanvasEdgeAction:v,handleNodeCanvasNodeAction:b,filePickerDialog:y,renderedCanvasNodes:w}=function({workspaceRef:e,nodes:t,clipboardItems:n,onNodesSet:r,onEdgesSet:a,onSelectedNodeChange:i,onClipboardItemsChange:o}){let l=ew.useRef(0),s=ew.useRef(0),[c,d]=ew.useState(!1),[u,f]=ew.useState(),[h,m]=ew.useState(),p=ew.useCallback((t,n)=>{let r,a,i,o,l,s,c,d;return r=e.current,a=r?.querySelector(".react-flow__viewport"),i=r?.getBoundingClientRect(),l="none"!==(o=a?getComputedStyle(a).transform:"none")?new DOMMatrixReadOnly(o):void 0,s=l?.a&&Number.isFinite(l.a)?l.a:1,c=l?.e??0,d=l?.f??0,{x:(t-(i?.left??0)-c)/s,y:(n-(i?.top??0)-d)/s}},[e]),g=ew.useCallback((e,t)=>{r(n=>n.map(n=>{let r,a;return n.id===e?(a="string"==typeof(r=n.data??{}).activeTabId&&t.some(e=>e.id===r.activeTabId)?r.activeTabId:t[0]?.id,{...n,data:{...r,tabs:t,activeTabId:a}}):n}))},[r]),x=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?{...n,data:{...n.data??{},activeTabId:t}}:n))},[r]),v=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?function(e,t){let n=e.data??{};if("multi-tab-system"===n.kind){let r=Array.isArray(n.tabs)?n.tabs:[];return{...e,data:{...n,tabs:r.map(e=>e.id===t.id?t:e),activeTabId:t.id}}}return uB(n.kind)?{...e,data:{...n,tab:t}}:e}(n,t):n))},[r]),b=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?{...n,data:{...n.data??{},terminal:t}}:n))},[r]),y=ew.useCallback((e,t)=>{var n;let a=(n=e.kind,uL.find(e=>e.id===n)?.size??uA({width:480,height:320}));s.current+=1;let o=`${e.kind}-detached-${s.current}`;r(n=>[...n,function({tab:e,nodeId:t,center:n,size:r}){return{id:t,type:"blank",position:uD(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:uT(r)}}({tab:e,nodeId:o,center:t,size:a})]),i(o)},[r,i]),w=ew.useCallback(async(e,n)=>{try{let a,i=n?.nodeId?t.find(e=>e.id===n.nodeId):void 0,o=i?(i.data??{}).kind:void 0,l="data-table-tab-viewer"===o?await fe(e):await u8(e),s=void 0!==i&&(a=i.data??{},"multi-tab-system"===a.kind||"file-tab-viewer"===a.kind||"data-table-tab-viewer"===a.kind);n?.nodeId&&s&&r(e=>e.map(e=>e.id===n.nodeId?function(e,t,n){let r=e.data??{};if("multi-tab-system"===r.kind){let a,i,o=Array.isArray(r.tabs)?r.tabs:[];return{...e,data:{...r,tabs:(a=o.filter(e=>e.id!==t.id),i=void 0===n?a.length:Math.min(Math.max(n,0),a.length),a.splice(i,0,t),a),activeTabId:t.id}}}return"file-tab-viewer"===r.kind||"data-table-tab-viewer"===r.kind&&"data-table-tab-viewer"===t.kind?{...e,data:{...r,tab:t}}:e}(e,l,n.insertIndex):e)),n?.nodeId&&s||y(l,u??{x:496,y:336})}catch{hF.error("文件预览打开失败")}},[y,t,r,u]),j=ew.useCallback(e=>{let n=t.find(e=>"multi-tab-system"===(e.data??{}).kind);w(e,n?{nodeId:n.id}:void 0)},[t,w]),k=ew.useCallback(async(e,t,n)=>{let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hF.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uX({machineId:a,path:r,content:n}),o={...t,title:i.name,modified:!1,defaultValue:"utf-8"===i.encoding?i.content:n,file:{...t.file,name:i.name,path:i.path,machineId:i.machine.id,mimeType:i.mimeType,kind:t.file?.kind,size:i.size,truncated:i.truncated}};v(e,o),hF.success("文件已保存")}catch(e){throw hF.error("文件保存失败"),e}},[v]),N=ew.useCallback((e,t,n)=>{y(t,p(n.clientX,n.clientY))},[y,p]),S=ew.useCallback(e=>{let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id"),r=n.find(e=>e.id===t),a=r?r.payloads?.[G2]:void 0;if(a)return a;let i=e.dataTransfer.getData(G2);if(i)try{return JSON.parse(i)}catch{return}},[n]),C=ew.useCallback((e,t,n)=>{r(r=>r.map(r=>r.id!==e?r:function(e,t,n){let r=e.data??{},a=Array.isArray(r.tabs)?r.tabs:[],i=new Set(a.map(e=>e.id)),o=n.tab.id,l=2;for(;i.has(o);)o=`${n.tab.id}-${l}`,l+=1;let s=[...a];return s.splice(Math.max(0,Math.min(t,s.length)),0,{...n.tab,id:o}),{...e,data:{...r,tabs:s,activeTabId:o}}}(r,t,n)))},[r]),M=ew.useCallback((e,t,n)=>{let r=S(n);r&&C(e,t,r)},[S,C]),E=ew.useCallback(e=>(function(e,t){for(let n of[...e].reverse()){if("multi-tab-system"!==(n.data??{}).kind)continue;let e=function(e){let t="number"==typeof e.width?e.width:"number"==typeof e.style?.width?e.style.width:"string"==typeof e.style?.width?Number.parseFloat(e.style.width):192,n="number"==typeof e.height?e.height:"number"==typeof e.style?.height?e.style.height:"string"==typeof e.style?.height?Number.parseFloat(e.style.height):112;return{width:Number.isFinite(t)?t:192,height:Number.isFinite(n)?n:112}}(n),r=t.x>=n.position.x&&t.x<=n.position.x+e.width,a=t.y>=n.position.y&&t.y<=n.position.y+e.height;if(r&&a)return n}})(t,e),[t]),O=ew.useCallback((t,n,r)=>(function(e,t,n,r){let a=Array.from(e.current?.querySelectorAll(".react-flow__node")??[]).find(e=>e.getAttribute("data-id")===t),i=a?.querySelector('[data-slot="multi-tab-list"]');if(!i)return r;let o=Array.from(i.querySelectorAll("[data-tab-id]"));for(let[e,t]of o.entries()){let r=t.getBoundingClientRect();if(n<r.left+r.width/2)return e}return o.length})(e,t,n,r),[e]),P=function({nodes:e,onTabsChange:t,onActiveTabChange:n,onRequestFileTab:r,onOpenWorkspaceFile:a,onTabChange:i,onSaveFileTab:o,onTerminalStateChange:l,onTabDetach:s,onExternalTabDrop:c}){return ew.useMemo(()=>e.map(e=>{let d=e.data??{},u=(e.data??{}).kind;return u?{...e,data:{...d,content:(0,eb.jsx)(JD,{kind:u,nodeId:e.id,tab:d.tab,tabs:d.tabs,activeTabId:d.activeTabId,terminalScopeId:`canvas:node:${e.id}`,terminalState:d.terminal,onTerminalStateChange:t=>l(e.id,t),onRequestFileTab:r,onOpenWorkspaceFile:a,onTabsChange:t,onTabChange:i,onSaveFileTab:o,onActiveTabChange:n,onTabDetach:s,onExternalTabDrop:c})}}:e}),[e,n,c,a,r,o,i,s,l,t])}({nodes:t,onTabsChange:g,onActiveTabChange:x,onRequestFileTab:m,onOpenWorkspaceFile:j,onTabChange:v,onSaveFileTab:k,onTerminalStateChange:b,onTabDetach:N,onExternalTabDrop:M}),z=ew.useCallback(e=>{s.current+=1;let n=`${e.id}-${t.length+s.current}`;r(t=>[...t,function({template:e,nodeId:t,center:n}){let r={contentScale:2,kind:e.id};return"multi-tab-system"===e.id?r.tabs=[]:uB(e.id)&&(r.tab=uH(e.id,`${t}-tab`)),{id:t,type:"blank",position:uD(n,e.size),data:r,width:e.size.width,height:e.size.height,style:uT(e.size)}}({template:e,nodeId:n,center:u??{x:496,y:336}})]),i(void 0),d(!1),f(void 0)},[t.length,r,i,u]),I=ew.useCallback(e=>{let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id");if(!t)return;let a=n.find(e=>e.id===t),o=p(e.clientX,e.clientY),s=S(e),c=s?E(o):void 0;if(s&&c){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let t=c.data??{},n=Array.isArray(t.tabs)?t.tabs:[],r=O(c.id,e.clientX,n.length);C(c.id,r,s),i(void 0);return}let d=a?a.payloads?.[G1]:void 0;if(!a||!d)return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",l.current+=1;let u=`${d.node.id}-drop-${l.current}`;r(e=>[...e,function({source:e,nodeId:t,center:n}){let r={width:e.width??192,height:e.height??112};return{...e,id:t,position:uD(n,r),style:e.style??uT(r),selected:!1,data:{...e.data??{},resizing:!1}}}({source:d.node,nodeId:u,center:o})]),i(u)},[n,E,S,p,O,C,r,i]),A=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[G1,G2].includes(e))&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},[]),T=ew.useCallback((e,{flowPosition:t})=>{"add"===e&&(f(t),d(!0))},[]),R=ew.useCallback(e=>{a(t=>{if(t.find(t=>t.source===e.source&&t.target===e.target))return t;let n=t.find(t=>t.source===e.target&&t.target===e.source);return n?t.map(e=>e.id===n.id?{...e,data:{...e.data??{},bidirectional:!0}}:e):[...t,{id:`edge-${e.source}-${e.target}-${t.length+1}`,type:"connection",source:e.source,target:e.target,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle,data:{anchors:[]}}]})},[a]),D=ew.useCallback((e,t,n)=>{"cut-edge"===e?a(e=>e.filter(e=>e.id!==t)):a(r=>r.map(r=>{if(r.id!==t)return r;let a=[...r.data?.anchors??[]];return"add-anchor"===e&&n.anchor&&a.splice(n.anchorIndex??a.length,0,n.anchor),"move-anchor"===e&&n.anchor&&void 0!==n.anchorIndex&&(a[n.anchorIndex]=n.anchor),"delete-anchor"===e&&void 0!==n.anchorIndex&&a.splice(n.anchorIndex,1),{...r,data:{...r.data??{},anchors:a}}}))},[a]),_=ew.useCallback((e,n,{snappedPosition:l})=>{if("copy"===e)return void r(e=>{let t=e.find(e=>e.id===n);if(!t)return e;let r=`${t.id}-copy-${e.length+1}`;return i(r),[...e,{...t,id:r,position:l,selected:!1,data:{...t.data??{},resizing:!1}}]});if("cut"===e){let e,l,s,c,d,u=t.find(e=>e.id===n);if(!u)return;let f=(s=(l=function(e){let t=e.data??{},n=t.tab;if(n?.id&&uB(n.kind))return n;let r=t.kind;if(uB(r))return uH(r,e.id)}(e=uU(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[G1]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[G1]:u.id},s&&(c[G2]=s,d[G2]=JSON.stringify(s)),{id:`clip-${u.id}`,title:l?.title??"画布节点",description:l?"来自画布的独立标签页。":"来自节点画布的空白节点。",meta:`${Math.round(u.width??192)}x${Math.round(u.height??112)}`,icon:l?uV(l.kind):(0,eb.jsx)(uw,{className:"size-4"}),dragData:d,payloads:c});o(e=>[f,...e.filter(e=>e.id!==f.id)]),r(e=>e.filter(e=>e.id!==n)),a(e=>e.filter(e=>e.source!==n&&e.target!==n)),i(void 0)}},[t,o,a,r,i]);return{addPaletteOpen:c,addTemplateNode:z,filePickerDialog:(0,eb.jsx)(XV,{open:void 0!==h,onOpenChange:e=>{e||m(void 0)},onSelectFile:e=>{m(void 0),w(e,h)}}),handleAddPaletteOpenChange:function(e){d(e),e||f(void 0)},handleCanvasAction:T,handleCanvasDragOver:A,handleCanvasDrop:I,handleNodeCanvasConnect:R,handleNodeCanvasEdgeAction:D,handleNodeCanvasNodeAction:_,renderedCanvasNodes:P}}({workspaceRef:d,nodes:e,clipboardItems:r,onNodesChange:a,onEdgesChange:i,onNodesSet:o,onEdgesSet:l,onSelectedNodeChange:s,onClipboardItemsChange:c});return(0,eb.jsxs)("div",{ref:d,className:"vtl-app-background vtl-canvas-workspace relative h-full w-full overflow-hidden",onDragOver:p,onDrop:g,children:[(0,eb.jsx)(sb,{"aria-label":"新建画布",className:"h-full min-h-0 rounded-none border-0",viewportClassName:"h-full",nodes:w,edges:t,nodeTypes:uz,edgeTypes:uI,onNodesChange:a,onEdgesChange:i,selectedNodeId:n,onSelectedNodeChange:s,defaultViewport:{x:0,y:0,zoom:.5},labels:{actions:"画布操作",add:"添加节点",select:"普通鼠标",connect:"连接工具",cut:"剪刀工具",drag:"拖拽工具",modeTools:"模式工具",resetZoom:"重置缩放",viewportTools:"视口工具",lockViewport:"锁定视口",visualSnap:"视觉吸附",nodeSnap:"节点吸附",snapTools:"吸附工具",nodeActions:"节点操作",resizeNode:"调整大小",copyNode:"复制节点",cutNode:"剪切节点"},onCanvasAction:m,onNodeCanvasConnect:x,onNodeCanvasEdgeAction:v,onNodeCanvasNodeAction:b}),(0,eb.jsx)(enS,{open:u,onOpenChange:h,onAdd:f}),y,(0,eb.jsx)(hW,{position:"top-right"})]})}async function enM(){return(await enD("/api/local/projects")).projects??[]}async function enE(e){return enD(`/api/local/projects/${encodeURIComponent(e)}`)}async function enO(e){return enD("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function enP(e,t){return enD(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function enz(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function enI(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function enA(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function enT(e){return((await enD(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>s3(e,void 0))}async function enR(e,t){return s3((await enD("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function enD(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"project api failed");return r}xj.length;let en_=(0,ek.default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),enL=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],en$=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],enF=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],enB=[{value:"off",label:"关闭(off)",desc:"auto 模式,不门控任何工具调用(仅硬危险命令仍被直接拒绝)。"},{value:"loose",label:"宽松(loose)",desc:"auto 模式 + 危险反思仅对高危调用介入。"},{value:"standard",label:"标准(standard)",desc:"acceptEdits 模式 + 危险反思对「风险及以上」介入。默认。"},{value:"strict",label:"严格(strict)",desc:"ask 模式 + 危险反思对全部工具调用介入。"},{value:"paranoid",label:"偏执(paranoid)",desc:"ask 模式 + 危险反思全覆盖,且发布类命令(publish/deploy/update)强制上卡。"}],enV=[{value:"queue-park",label:"排队驻留(queue-park)",desc:"门触发时入卡并驻留,agent 继续做别的事,等你回来处理。默认。"},{value:"auto-reject-5m",label:"5 分钟自动拒(auto-reject-5m)",desc:"旧行为:无人处理时 5 分钟后自动拒绝该调用。"},{value:"auto-approve",label:"自动通过(auto-approve)",desc:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enH=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enU=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function enq({onCreated:e,onCancel:t}){let{machines:n}=xk(),{models:r}=xK(),[a,i]=ew.useState("local"),{engines:o}=jp(a),l=ew.useCallback(e=>"vantaloom"===e||(o.find(t=>t.engine===e)?.available??!1),[o]),s=ew.useCallback(e=>o.find(t=>t.engine===e)?.reason,[o]),[c,d]=ew.useState(0),[u,f]=ew.useState("vantaloom"),[h,m]=ew.useState(""),[p,g]=ew.useState("acceptEdits"),[x,v]=ew.useState(["local"]),[b,y]=ew.useState(""),[w,j]=ew.useState(""),[k,N]=ew.useState([]),[S,C]=ew.useState(""),[M,E]=ew.useState([]),[O,P]=ew.useState(""),[z,I]=ew.useState(""),[A,T]=ew.useState("standard"),[R,D]=ew.useState("queue-park"),[_,L]=ew.useState(!1),[$,F]=ew.useState("risky+"),[B,V]=ew.useState(!1),[H,U]=ew.useState("wake-singleton"),[q,W]=ew.useState(!1),[K,G]=ew.useState(""),X=ji(u);ew.useEffect(()=>{"vantaloom"===u||l(u)||f("vantaloom")},[u,l]),ew.useEffect(()=>{X&&(v(e=>1===e.length&&"local"===e[0]?e:["local"]),N(e=>e.length<=1?e:e.slice(-1)))},[X]);let Y="local"===a?"本机":n.find(e=>e.id===a)?.name??a,Z=b.trim().length>0,J=ew.useCallback(async()=>{if(!q){if(!b.trim()){d(1),G("工程名称不能为空");return}W(!0),G("");try{let t={maxPeers:enW(O,1,16),maxSpawnDepth:enW(z,1,5),hitlStrictness:A,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await enO({title:b.trim(),summary:w.trim()||void 0,ownerMachineId:a,settingsTemplate:{subagents:[],mainModels:X?[]:M,folders:k,blockedCommands:[],allowedTools:[],deniedTools:[],plugins:[],hosts:X?["local"]:x,permissionMode:p,engine:u,ccModel:X?h:void 0},policy:t,budgetTokens:enW(S,0,Number.MAX_SAFE_INTEGER)});e(n.id)}catch(e){G(e instanceof Error?e.message:"工程创建失败")}finally{W(!1)}}},[R,S,h,q,_,$,u,k,A,x,X,M,O,z,e,a,p,B,H,w,b]),Q=c===enL.length-1;return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col",children:[(0,eb.jsx)("header",{className:"shrink-0 px-6 pt-8 pb-6",children:(0,eb.jsx)("ol",{className:"mx-auto flex max-w-2xl items-center",children:enL.map((e,t)=>{let n=t<c,r=t===c;return(0,eb.jsxs)("li",{className:"flex min-w-0 flex-1 items-center last:flex-none",children:[(0,eb.jsxs)("button",{type:"button","aria-current":r?"step":void 0,"aria-label":`第 ${t+1} 步:${e}`,onClick:()=>{t<=c&&d(t)},className:"group flex shrink-0 items-center gap-2 outline-none",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("inline-flex size-8 shrink-0 items-center justify-center rounded-full border text-sm font-medium transition-colors",n?"border-primary bg-primary text-primary-foreground":r?"border-primary text-primary ring-2 ring-primary/30":"border-border bg-background text-muted-foreground"),children:n?(0,eb.jsx)(mJ,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,eI.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<enL.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,eI.cn)("mx-3 h-px min-w-6 flex-1 transition-colors",t<c?"bg-primary":"bg-border")}):null]},e)})})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 pb-6",children:(0,eb.jsxs)("div",{className:"mx-auto w-full max-w-2xl",children:[0===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(enX,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(enG,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gR,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xx,{children:en$.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xv,{value:e.value,disabled:!t,children:[e.label,t?"":"(不可用)"]},e.value)})})]}),s(u)?(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:s(u)}):null,X?(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:"Claude Code(含 reclaude)运行在所选 owner 机器上;其工具锁定在该机本地。"}):null]}),X?(0,eb.jsxs)(enG,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gR,{value:""===h?jr:h,onValueChange:e=>m(e===jr?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):null,(0,eb.jsxs)(enG,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gR,{value:p,onValueChange:g,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enF.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enF.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(jn,{value:x,onValueChange:v,disabled:X,hint:X?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,1===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)(enG,{label:"工程名称(必填)",children:[(0,eb.jsx)(eA,{value:b,placeholder:"新工程",onChange:e=>{y(e.currentTarget.value),K&&G("")}}),Z?null:(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-amber-500",children:"工程名称不能为空。"})]}),(0,eb.jsx)(enG,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(y6,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(w6,{title:"可访问的工作目录",value:k,onValueChange:e=>N(X?e.slice(-1):e)}),X?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null,(0,eb.jsx)(enG,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:S,onChange:e=>C(e.currentTarget.value),placeholder:"0 = 全局默认",className:"w-52"})})]}):null,2===c?X?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gR,{value:""===h?jr:h,onValueChange:e=>m(e===jr?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"可用模型"}),(0,eb.jsxs)("p",{className:"text-xs leading-relaxed text-muted-foreground",children:["选择本工程新建对话默认可用的模型(mainModels)。第一个为主模型。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","未选择任何模型时,工程内新建的对话将无模型可用、无法运行。"]})]})]}),(0,eb.jsx)(xG,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(enG,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:O,onChange:e=>P(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(enG,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:z,onChange:e=>I(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(enG,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gR,{value:A,onValueChange:e=>T(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enB.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enB.find(e=>e.value===A)?.desc})]}),(0,eb.jsxs)(enG,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gR,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enV.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enV.find(e=>e.value===R)?.desc})]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hE,{}),"危险反思智能体"]}),(0,eb.jsx)(vJ,{checked:_,onCheckedChange:L})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,风险调用会先经一个模型「反思」判定(通过 / 拒绝 / 升级人工),再到人工审批门。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),_?(0,eb.jsx)("div",{className:"mt-3",children:(0,eb.jsx)(enG,{label:"触发档位(severity)",children:(0,eb.jsxs)(gR,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enH.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})})}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uy,{}),"评审智能体"]}),(0,eb.jsx)(vJ,{checked:B,onCheckedChange:V})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,卡片进入「评审」状态会唤醒 / 派生一个评审智能体复核。",(0,eb.jsxs)("span",{className:"text-sky-700 dark:text-sky-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),B?(0,eb.jsx)("div",{className:"mt-3",children:(0,eb.jsx)(enG,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gR,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enU.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})})}):null]})]}):null,4===c?(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"grid gap-3 rounded-xl border bg-card p-5",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"配置摘要"}),(0,eb.jsxs)("div",{className:"grid gap-2.5",children:[(0,eb.jsx)(enK,{icon:(0,eb.jsx)(m1,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(eP,{}),label:"运行环境",value:Y}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(uN,{}),label:"运行引擎",value:en$.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(mZ,{}),label:"模型",value:X?jo(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(en_,{}),label:"权限 / HITL",value:`${enF.find(e=>e.value===p)?.label??p} \xb7 ${enB.find(e=>e.value===A)?.label??A}`}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(QG,{}),label:"编排上限",value:`同伴 ${O.trim()||`默认8`} \xb7 深度 ${z.trim()||`默认3`}`}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(GI,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(m1,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(uy,{}),label:"监督智能体",value:[_?"危险反思":null,B?"评审":null].filter(Boolean).join(" · ")||"未启用"})]})]}),K?(0,eb.jsx)("div",{className:"text-sm text-destructive",children:K}):null]}):null]})}),(0,eb.jsx)("footer",{className:"flex shrink-0 items-center justify-between px-6 pb-8",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-2xl items-center justify-between",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"ghost",disabled:q,onClick:()=>{0===c?t?.():d(e=>Math.max(0,e-1))},children:[(0,eb.jsx)(mQ,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(ez.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(m2,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(ez.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(enL.length-1,e+1)),children:["下一步",(0,eb.jsx)(m0,{className:"size-4"})]})]})})]})}function enW(e,t,n){let r=e.trim();if(""===r)return 0;let a=Math.floor(Number(r));return!Number.isFinite(a)||a<=0?0:Math.min(n,Math.max(t,a))}function enK({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid grid-cols-[auto_5rem_minmax(0,1fr)] items-center gap-3",children:[(0,eb.jsx)("span",{className:"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground [&_svg]:size-4",children:e}),(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:t}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-medium text-foreground",children:n})]})}function enG({label:e,hint:t,children:n}){return(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:e}),n,t?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:t}):null]})}function enX({value:e,onChange:t,machines:n}){let r=ew.useMemo(()=>{let e=[],t=!1;for(let r of n)if(r.isLocal)t=!0,e.unshift({id:"local",name:"本机",online:!0,reachable:!0});else{let t="online"===r.status;e.push({id:r.id,name:r.name,online:t,reachable:r.reachable??t})}return t||e.unshift({id:"local",name:"本机",online:!0,reachable:!0}),e},[n]);return(0,eb.jsx)(enG,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gR,{value:e,onValueChange:t,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xx,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xv,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let enY=[{value:"off",label:"关闭(off)",desc:"auto 模式,不门控任何工具调用(仅硬危险命令仍被直接拒绝)。"},{value:"loose",label:"宽松(loose)",desc:"auto 模式 + 危险反思仅对高危调用介入。"},{value:"standard",label:"标准(standard)",desc:"acceptEdits 模式 + 危险反思对「风险及以上」介入。默认。"},{value:"strict",label:"严格(strict)",desc:"ask 模式 + 危险反思对全部工具调用介入。"},{value:"paranoid",label:"偏执(paranoid)",desc:"ask 模式 + 危险反思全覆盖,且发布类命令(publish/deploy/update)强制上卡。"}],enZ=[{value:"queue-park",label:"排队驻留(queue-park)",desc:"门触发时入卡并驻留,agent 继续做别的事,等你回来处理。默认。"},{value:"auto-reject-5m",label:"5 分钟自动拒(auto-reject-5m)",desc:"旧行为:无人处理时 5 分钟后自动拒绝该调用。"},{value:"auto-approve",label:"自动通过(auto-approve)",desc:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enJ=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enQ=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],en0=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],en1=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],en2=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eec,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(mZ,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(QZ,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uO,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(v9,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(GD,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(QZ,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(QG,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(en_,{})}];function en5({projectId:e}){let[t,n]=ew.useState(),[r,a]=ew.useState(!0),[i,o]=ew.useState(),[l,s]=ew.useState(null),[c,d]=ew.useState(!1),[u,f]=ew.useState(),[h,m]=ew.useState(),[p,g]=ew.useState("basic"),x=ew.useCallback(async()=>{a(!0),o(void 0);try{let t=await enE(e);n(t),s(en6(t))}catch(e){o(e instanceof Error?e.message:"工程加载失败")}finally{a(!1)}},[e]);ew.useEffect(()=>{x()},[x]);let v=ew.useMemo(()=>{var e,n;let r;return!!t&&!!l&&(e=l,n=en6(t),r=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),!(e.title===n.title&&e.summary===n.summary&&e.maxPeers===n.maxPeers&&e.maxSpawnDepth===n.maxSpawnDepth&&e.budgetTokens===n.budgetTokens&&e.budgetSoftPct===n.budgetSoftPct&&e.budgetHardPct===n.budgetHardPct&&e.approvalParkTtlSeconds===n.approvalParkTtlSeconds&&e.hitlStrictness===n.hitlStrictness&&e.awayMode===n.awayMode&&e.dangerEnabled===n.dangerEnabled&&e.dangerSeverity===n.dangerSeverity&&e.dangerModelRef===n.dangerModelRef&&e.reviewerEnabled===n.reviewerEnabled&&e.reviewerMode===n.reviewerMode&&e.reviewerModelRef===n.reviewerModelRef&&e.engine===n.engine&&e.permissionMode===n.permissionMode&&e.ccModel===n.ccModel&&r(e.allowedTools,n.allowedTools)&&r(e.blockedCommands,n.blockedCommands)&&r(e.mainModels,n.mainModels)&&r(e.folders,n.folders)&&r(e.hosts,n.hosts)))},[t,l]),b=l?en7(l):void 0;async function y(){if(!l||!t)return;let r=en7(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await enP(e,(a=l,t={maxPeers:en8(a.maxPeers,1,16),maxSpawnDepth:en8(a.maxSpawnDepth,1,5),budgetSoftPct:en8(a.budgetSoftPct,1,100),budgetHardPct:en8(a.budgetHardPct,1,200),approvalParkTtlSeconds:Math.max(0,Math.floor(Number(a.approvalParkTtlSeconds.trim()||"0"))||0),hitlStrictness:a.hitlStrictness||"",awayMode:a.awayMode||"",dangerAgent:{enabled:a.dangerEnabled,severity:a.dangerSeverity||"",modelRef:a.dangerModelRef.trim()},reviewerAgent:{enabled:a.reviewerEnabled,mode:a.reviewerMode||"",modelRef:a.reviewerModelRef.trim()}},r=ji(a.engine),i={...a.baseSettings,blockedCommands:a.blockedCommands,allowedTools:a.allowedTools,permissionMode:a.permissionMode,engine:a.engine,mainModels:r?[]:a.mainModels,ccModel:r?a.ccModel:void 0,folders:r?a.folders.slice(-1):a.folders,hosts:a.hosts},{title:a.title.trim(),summary:a.summary.trim(),budgetTokens:en8(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(en6(o)),m(Date.now())}catch(e){f(e instanceof Error?e.message:"保存失败")}finally{d(!1)}}function w(e){s(t=>t?{...t,...e}:t),m(void 0)}return r&&!l?(0,eb.jsx)("div",{className:"vtl-app-background flex h-full w-full items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin"})}):i&&!l?(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full w-full flex-col items-center justify-center gap-3 px-6 py-16 text-center",children:[(0,eb.jsx)(hE,{className:"size-8 text-hot-pink"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:i}),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",onClick:()=>void x(),children:"重试"})]}):l?(0,eb.jsxs)("div",{className:"vtl-app-background relative flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"flex flex-col gap-0.5 border-b px-4 py-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground [&_svg]:size-3.5",children:[(0,eb.jsx)(eec,{}),"工程设置"]}),(0,eb.jsx)("h1",{className:"truncate text-sm font-semibold text-foreground",children:t?.title??"工程"})]}),(0,eb.jsx)("nav",{className:"flex shrink-0 gap-1 overflow-x-auto border-b px-3 py-2 vtl-scrollbar-hidden",children:en2.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,eI.cn)("flex shrink-0 items-center gap-1.5 rounded-lg px-3 py-1.5 text-[13px] transition-colors [&_svg]:size-3.5",p===e.value?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60 hover:text-foreground"),children:[e.icon,e.label]},e.value))}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto p-4 pb-28",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-2xl flex-col gap-6",children:["basic"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(eec,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(ere,{label:"名称",children:(0,eb.jsx)(eA,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(ere,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(y6,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(mZ,{className:"size-4"}),title:"模型",desc:"本工程新建对话默认可用的模型(mainModels)。与对话设置使用同一选择器。",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),ji(l.engine)?(0,eb.jsx)(ere,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(mZ,{className:"size-4"}),children:(0,eb.jsxs)(gR,{value:""===l.ccModel?jr:l.ccModel,onValueChange:e=>w({ccModel:e===jr?"":e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(xG,{mainModels:l.mainModels,onMainModelsChange:e=>w({mainModels:e})})]}):null,"tools"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(w4,{value:l.allowedTools,onChange:e=>w({allowedTools:e})})]}):null,"commands"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(w3,{value:l.blockedCommands,onChange:e=>w({blockedCommands:e})})]}):null,"folders"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,eb.jsx)(en4,{}),(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(w6,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:ji(l.engine)?e.slice(-1):e})}),ji(l.engine)?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null]}):null,"hosts"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(jn,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:ji(l.engine),hint:ji(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(QG,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(ere,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(ere,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(GI,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(ere,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:l.budgetTokens,onChange:e=>w({budgetTokens:e.target.value}),placeholder:"0 = 全局默认",className:"w-52"})}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(ere,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(ere,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:200,value:l.budgetHardPct,onChange:e=>w({budgetHardPct:e.target.value}),placeholder:`默认 100`,className:"w-32"})})]})]})]}):null,"hitl"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(en_,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(ere,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gR,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enY.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enY.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(ere,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gR,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enZ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enZ.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(ere,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(eA,{type:"number",min:0,value:l.approvalParkTtlSeconds,onChange:e=>w({approvalParkTtlSeconds:e.target.value}),placeholder:"0 = 无限驻留",className:"w-40"})}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hE,{}),"危险反思智能体"]}),(0,eb.jsx)(vJ,{checked:l.dangerEnabled,onCheckedChange:e=>w({dangerEnabled:e})})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,风险调用会先经一个模型「反思」判定(通过 / 拒绝 / 升级人工),再到人工审批门。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),l.dangerEnabled?(0,eb.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,eb.jsx)(ere,{label:"触发档位(severity)",children:(0,eb.jsxs)(gR,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enJ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ere,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.dangerModelRef,onChange:e=>w({dangerModelRef:e.target.value}),placeholder:"例如 gpt-5-mini(留空 = 默认)"})})]}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uy,{}),"评审智能体"]}),(0,eb.jsx)(vJ,{checked:l.reviewerEnabled,onCheckedChange:e=>w({reviewerEnabled:e})})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,卡片进入「评审」状态会唤醒 / 派生一个评审智能体复核。",(0,eb.jsxs)("span",{className:"text-sky-700 dark:text-sky-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),l.reviewerEnabled?(0,eb.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,eb.jsx)(ere,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gR,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enQ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ere,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(QZ,{className:"size-4"}),title:"引擎",desc:"新对话的默认引擎与权限模式。",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(ere,{label:"引擎(engine)",children:(0,eb.jsxs)(gR,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:en0.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(ere,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gR,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:en1.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en1.find(e=>e.value===l.permissionMode)?.desc})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"工具开关与禁止命令已移至「工具权限」「禁止命令」标签页,与对话设置保持一致。"})]}):null]})}),(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-10 flex justify-center px-6 pb-4",children:(0,eb.jsxs)("div",{className:(0,eI.cn)("pointer-events-auto flex items-center gap-3 rounded-full border border-border bg-card/95 px-4 py-2 shadow-lg backdrop-blur transition-opacity",v||u||h?"opacity-100":"pointer-events-none opacity-0"),children:[u?(0,eb.jsx)("span",{className:"text-xs text-hot-pink",children:u}):b?(0,eb.jsx)("span",{className:"text-xs text-amber-500",children:b}):v?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"有未保存的更改"}):h?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-emerald-600 dark:text-emerald-400 [&_svg]:size-3.5",children:[(0,eb.jsx)(mJ,{}),"已保存"]}):null,v?(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(en6(t)),children:"撤销"}):null,(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",disabled:!v||c||!!b,onClick:()=>void y(),children:[c?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(mJ,{className:"size-4"}),"保存"]})]})})]}):null}function en4(){return(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function en3(e){return e&&e>0?String(e):""}function en6(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:en3(t.maxPeers),maxSpawnDepth:en3(t.maxSpawnDepth),budgetTokens:en3(e.budgetTokens),budgetSoftPct:en3(t.budgetSoftPct),budgetHardPct:en3(t.budgetHardPct),approvalParkTtlSeconds:en3(t.approvalParkTtlSeconds),hitlStrictness:t.hitlStrictness??"",awayMode:t.awayMode??"",dangerEnabled:n.enabled??!1,dangerSeverity:n.severity??"",dangerModelRef:n.modelRef??"",reviewerEnabled:r.enabled??!1,reviewerMode:r.mode??"",reviewerModelRef:r.modelRef??"",engine:a.engine??"vantaloom",permissionMode:a.permissionMode??"acceptEdits",allowedTools:a.allowedTools??[],blockedCommands:a.blockedCommands??[],mainModels:a.mainModels??[],ccModel:a.ccModel??"",folders:a.folders??[],hosts:a.hosts??[],baseSettings:a}}function en8(e,t,n){let r=e.trim();if(""===r)return 0;let a=Math.floor(Number(r));return!Number.isFinite(a)||a<=0?0:Math.min(n,Math.max(t,a))}function en7(e){if(!e.title.trim())return"工程名称不能为空";for(let[t,n]of[[e.maxPeers,"同伴并发上限"],[e.maxSpawnDepth,"派生深度上限"],[e.budgetTokens,"预算上限"],[e.budgetSoftPct,"软阈值"],[e.budgetHardPct,"硬阈值"],[e.approvalParkTtlSeconds,"驻留 TTL"]]){let e=t.trim();if(""===e)continue;let r=Number(e);if(!Number.isFinite(r)||r<0)return`${n}需为 ≥ 0 的整数`}}function en9({icon:e,title:t,desc:n,children:r}){return(0,eb.jsxs)("section",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-foreground [&_svg]:text-muted-foreground",children:[e,(0,eb.jsx)("h2",{className:"text-base font-semibold",children:t})]}),n?(0,eb.jsx)("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n}):null]}),(0,eb.jsx)("div",{className:"flex flex-col gap-4",children:r})]})}function ere({label:e,hint:t,icon:n,children:r}){return(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-sm font-medium text-foreground [&_svg]:text-muted-foreground",children:[n,e]}),r,t?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:t}):null]})}let ert=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function ern({className:e,size:t="default",...n}){return(0,eb.jsxs)("div",{className:"group/native-select relative w-fit has-[select:disabled]:opacity-50","data-slot":"native-select-wrapper",children:[(0,eb.jsx)("select",{"data-slot":"native-select","data-size":t,className:(0,eI.cn)("h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-background px-2.5 py-1.5 pr-8 ui-text-control shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:py-1 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40",e),...n}),(0,eb.jsx)(xf,{className:"pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground opacity-60","aria-hidden":"true","data-slot":"native-select-icon"})]})}function err({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,eI.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function era(){return{kind:"human",id:"local",displayName:"我"}}async function eri(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erb(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function ero(e){return erb(`/api/local/issues/${encodeURIComponent(e)}`)}async function erl(e,t){return erb(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function ers(e,t){return erb(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erc(e){await erb(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erd(e,t){return erb(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function eru(e,t,n=era()){return erb(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function erf(e){return(await erb(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function erh(e){return(await erb(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erm(e,t,n,r){return erb(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erp(e){await erb(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erg(e){return(await erb(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erx(e,t,n,r){await erb(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erv extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erb(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw new erv("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let ery=[{status:"backlog",label:"待办池",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},{status:"todo",label:"待领取",dot:"bg-sky-teal",chip:"bg-sky-teal/15 text-sky-teal"},{status:"in_progress",label:"进行中",dot:"bg-vivid-violet",chip:"bg-vivid-violet/15 text-vivid-violet"},{status:"blocked",label:"受阻",dot:"bg-hot-pink",chip:"bg-hot-pink/15 text-hot-pink"},{status:"review",label:"待审核",dot:"bg-amber-500",chip:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},{status:"done",label:"已完成",dot:"bg-emerald-500",chip:"bg-emerald-500/15 text-emerald-600 dark:text-emerald-400"}],erw={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erj=[...ery,erw],erk={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erN=["task","feature","bug","chore","question"],erS={bug:"bg-hot-pink/15 text-hot-pink",feature:"bg-sky-teal/15 text-sky-teal",task:"bg-vivid-violet/15 text-vivid-violet",chore:"bg-muted text-muted-foreground",question:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},erC={low:"低",normal:"普通",high:"高",urgent:"紧急"},erM=["low","normal","high","urgent"],erE={low:"bg-muted text-muted-foreground",normal:"bg-muted text-muted-foreground",high:"bg-amber-500/15 text-amber-600 dark:text-amber-400",urgent:"bg-hot-pink/15 text-hot-pink"},erO={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},erP=["depends_on","blocks","parent","relates_to"],erz={depends_on:{stroke:"#f59e0b",chip:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},blocks:{stroke:"#ec4899",chip:"bg-hot-pink/15 text-hot-pink"},parent:{stroke:"#8b5cf6",chip:"bg-vivid-violet/15 text-vivid-violet"},relates_to:{stroke:"#14b8a6",chip:"bg-sky-teal/15 text-sky-teal"}},erI={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function erA(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})}let erT={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},erR={safe:"bg-sky-teal/15 text-sky-teal",normal:"bg-muted text-muted-foreground",risky:"bg-amber-500/15 text-amber-600 dark:text-amber-400",dangerous:"bg-hot-pink/15 text-hot-pink"},erD=(0,ek.default)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]),er_=(0,ek.default)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);function erL({issueId:e,projectId:t,open:n,onClose:r,onChange:a,onDeleted:i}){let[o,l]=ew.useState(null),[s,c]=ew.useState([]),[d,u]=ew.useState([]),[f,h]=ew.useState([]),[m,p]=ew.useState(!1),[g,x]=ew.useState(!1),[v,b]=ew.useState(""),[y,w]=ew.useState(""),j=ew.useCallback(async()=>{if(e){p(!0);try{let[n,r,a,i]=await Promise.all([ero(e),erf(e).catch(()=>[]),erh(t).catch(()=>[]),eri(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hF.error(e instanceof Error?e.message:"加载 issue 失败")}finally{p(!1)}}},[e,t]);ew.useEffect(()=>{n&&e&&j(),n||(l(null),c([]),u([]),h([]),b(""),w(""))},[n,e,j]);let k=ew.useCallback(async()=>{u(await erh(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erm(t,o.id,e,n),await k()}catch(e){hF.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erp(e),await k()}catch(e){hF.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await ers(o.id,e);l(t),a?.(t);let n=await erf(o.id).catch(()=>s);c(n)}catch(e){hF.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erd(o.id,era());l(e),a?.(e);let t=await erf(o.id).catch(()=>s);c(t),hF.success("认领成功")}catch(e){e instanceof erv&&409===e.status?(hF.error("认领失败:该 issue 已被他人认领"),j()):hF.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await eru(o.id,v.trim()),b("");let e=await erf(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hF.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function O(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erc(o.id),i?.(o.id),r()}catch(e){hF.error(e instanceof Error?e.message:"删除失败")}finally{x(!1)}}}let P=o?.progress??{percent:0,checklist:[]};function z(e){return 0===e.length?P.percent:Math.round(e.filter(e=>e.done).length/e.length*100)}async function I(e){let t=P.checklist.map((t,n)=>n===e?{...t,done:!t.done}:t);await C({progress:{percent:z(t),checklist:t}})}async function A(e){let t=e.trim();if(!t)return;let n=[...P.checklist,{text:t,done:!1}];await C({progress:{percent:z(n),checklist:n}})}async function T(e){let t=P.checklist.filter((t,n)=>n!==e);await C({progress:{percent:z(t),checklist:t}})}let R=ew.useMemo(()=>{if(!o)return[];let e=new Map(f.map(e=>[e.id,e]));return d.filter(e=>e.fromIssueId===o.id||e.toIssueId===o.id).map(t=>{let n=t.fromIssueId===o.id,r=n?t.toIssueId:t.fromIssueId;return{link:t,outgoing:n,other:e.get(r)??null,otherId:r}})},[d,o,f]);return(0,eb.jsx)(dC,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsx)(fv,{className:"max-h-[88vh] w-[calc(100%-2rem)] max-w-3xl gap-0 overflow-hidden p-0 sm:max-w-3xl",children:!o||m?(0,eb.jsx)("div",{className:"flex h-64 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})}):(0,eb.jsxs)("div",{className:"flex max-h-[88vh] flex-col",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-3 border-b border-border px-5 py-4 pr-12",children:[(0,eb.jsxs)("span",{className:"mt-0.5 shrink-0 rounded-md bg-muted px-2 py-0.5 font-mono text-xs text-muted-foreground",children:["#",o.number]}),(0,eb.jsx)(fw,{className:"min-w-0 flex-1 break-words text-base font-semibold",children:o.title})]}),(0,eb.jsxs)("div",{className:"grid flex-1 grid-cols-1 gap-0 overflow-y-auto md:grid-cols-[1fr_300px]",children:[(0,eb.jsxs)("div",{className:"flex flex-col gap-5 px-5 py-4",children:[(0,eb.jsx)(er$,{label:"标题",children:(0,eb.jsx)(eA,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(er$,{label:"描述",children:(0,eb.jsx)(y6,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(er$,{label:`进度 \xb7 ${P.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeC,{value:P.percent,className:"h-2"}),(0,eb.jsx)("div",{className:"flex flex-col gap-1.5",children:P.checklist.map((e,t)=>(0,eb.jsxs)("div",{className:"group flex items-center gap-2 text-sm",children:[(0,eb.jsx)(xF,{checked:e.done,onCheckedChange:()=>void I(t)}),(0,eb.jsx)("span",{className:(0,eI.cn)("min-w-0 flex-1 break-words",e.done&&"text-muted-foreground line-through"),children:e.text}),(0,eb.jsx)("button",{type:"button",onClick:()=>void T(t),className:"shrink-0 text-muted-foreground opacity-0 transition hover:text-hot-pink group-hover:opacity-100",children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(erF,{onAdd:e=>void A(e)})]})}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"活动"}),(0,eb.jsx)("div",{className:"flex flex-col gap-3",children:0===s.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/60",children:"暂无活动"}):s.map(e=>(0,eb.jsxs)("div",{className:"flex gap-2.5",children:[(0,eb.jsx)(erV,{kind:e.actor.kind,small:!0}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-xs",children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:e.actor.displayName}),(0,eb.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:erI[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:erA(e.createdAt)})]}),e.body?(0,eb.jsx)("p",{className:"mt-0.5 whitespace-pre-wrap break-words text-sm text-secondary-foreground",children:e.body}):null]})]},e.id))}),(0,eb.jsxs)("div",{className:"mt-1 flex items-end gap-2",children:[(0,eb.jsx)(y6,{value:v,onChange:e=>b(e.target.value),rows:2,placeholder:"写评论…",className:"min-h-9"}),(0,eb.jsx)(ez.Button,{size:"sm",disabled:!v.trim()||g,onClick:()=>void E(),children:(0,eb.jsx)(er_,{className:"size-4"})})]})]})]}),(0,eb.jsxs)("div",{className:"flex flex-col gap-4 border-t border-border px-5 py-4 md:border-l md:border-t-0",children:[(0,eb.jsx)(er$,{label:"状态",children:(0,eb.jsx)(ern,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erj.map(e=>(0,eb.jsx)(err,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(er$,{label:"优先级",children:(0,eb.jsx)(ern,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erM.map(e=>(0,eb.jsx)(err,{value:e,children:erC[e]},e))})}),(0,eb.jsx)(er$,{label:"类型",children:(0,eb.jsx)(ern,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erN.map(e=>(0,eb.jsx)(err,{value:e,children:erk[e]},e))})}),(0,eb.jsx)(er$,{label:"负责人",children:o.assignee?(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-lg border border-border px-2.5 py-1.5",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-sm",children:[(0,eb.jsx)(erV,{kind:o.assignee.kind,small:!0}),(0,eb.jsx)("span",{className:"truncate",children:o.assignee.displayName})]}),(0,eb.jsx)("button",{type:"button",className:"shrink-0 text-xs text-muted-foreground hover:text-hot-pink",onClick:()=>void C({assignee:null}),children:"取消"})]}):(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"w-full",disabled:g,onClick:()=>void M(),children:[(0,eb.jsx)(lW,{className:"size-4"})," 认领"]})}),(0,eb.jsx)(er$,{label:"标签",children:(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:0===o.labels.length?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:"暂无标签"}):o.labels.map(e=>(0,eb.jsxs)("span",{className:"group inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground",children:[e,(0,eb.jsx)("button",{type:"button",onClick:()=>void C({labels:o.labels.filter(t=>t!==e)}),className:"text-muted-foreground/60 hover:text-hot-pink",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e))}),(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:e=>{e.preventDefault();let t=y.trim();t&&!o.labels.includes(t)&&C({labels:[...o.labels,t]}),w("")},children:[(0,eb.jsx)(eA,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lJ,{className:"size-4"})})]})]})}),(0,eb.jsx)(er$,{label:"关联 issue",children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[0===R.length?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:"暂无关联"}):(0,eb.jsx)("div",{className:"flex flex-col gap-1",children:R.map(({link:e,outgoing:t,other:n,otherId:r})=>{let a=erz[e.kind];return(0,eb.jsxs)("div",{className:"group flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs",children:[(0,eb.jsx)(erD,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",erO[e.kind]]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("span",{className:"font-mono text-muted-foreground",children:["#",n.number]})," ",n.title]}):(0,eb.jsx)("span",{className:"font-mono text-muted-foreground/60",children:r.slice(0,8)})}),(0,eb.jsx)("button",{type:"button",disabled:g,onClick:()=>void S(e.id),title:"删除关联",className:"shrink-0 text-muted-foreground opacity-0 transition hover:text-hot-pink group-hover:opacity-100 disabled:opacity-30",children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(erB,{currentIssueId:o.id,candidates:f,existingLinks:d,disabled:g,onAdd:N})]})}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-col gap-1 pt-2 text-xs text-muted-foreground/70",children:[(0,eb.jsxs)("span",{children:["创建于 ",erA(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",erA(o.updatedAt)]})]}),(0,eb.jsxs)(ez.Button,{variant:"ghost",size:"sm",className:"text-hot-pink hover:bg-hot-pink/10 hover:text-hot-pink",disabled:g,onClick:()=>void O(),children:[(0,eb.jsx)(bo,{className:"size-4"})," 删除 issue"]})]})]})]})})})}function er$({label:e,children:t}){return(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:e}),t]})}function erF({onAdd:e}){let[t,n]=ew.useState("");return(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:r=>{r.preventDefault(),e(t),n("")},children:[(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lJ,{className:"size-4"})})]})}function erB({currentIssueId:e,candidates:t,existingLinks:n,disabled:r,onAdd:a}){let[i,o]=ew.useState(!1),[l,s]=ew.useState(""),[c,d]=ew.useState("depends_on"),u=ew.useMemo(()=>{let t=new Set;for(let r of n)r.fromIssueId===e&&t.add(r.toIssueId),r.toIssueId===e&&t.add(r.fromIssueId);return t},[n,e]),f=ew.useMemo(()=>{let n=l.trim().toLowerCase();return t.filter(t=>t.id!==e&&!u.has(t.id)).filter(e=>!n||e.title.toLowerCase().includes(n)||`#${e.number}`.includes(n)||String(e.number).includes(n)).slice(0,8)},[t,e,u,l]);return i?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5 rounded-lg border border-vivid-violet/40 bg-card p-2",children:[(0,eb.jsx)(ern,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:erP.map(e=>(0,eb.jsx)(err,{value:e,children:erO[e]},e))}),(0,eb.jsx)(eA,{autoFocus:!0,value:l,onChange:e=>s(e.target.value),placeholder:"搜索 issue(编号 / 标题)",className:"h-8"}),(0,eb.jsx)("div",{className:"flex max-h-40 flex-col gap-0.5 overflow-y-auto",children:0===f.length?(0,eb.jsx)("span",{className:"px-1 py-1.5 text-xs text-muted-foreground/60",children:"无可关联的 issue"}):f.map(e=>(0,eb.jsxs)("button",{type:"button",disabled:r,onClick:async()=>{await a(e.id,c),o(!1),s("")},className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-left text-xs transition hover:bg-muted disabled:opacity-50",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:e.title})]},e.id))}),(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",onClick:()=>{o(!1),s("")},children:"取消"})})]}):(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"w-full",disabled:r,onClick:()=>o(!0),children:[(0,eb.jsx)(lJ,{className:"size-4"})," 添加关联"]})}function erV({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,eI.cn)("inline-flex shrink-0 items-center justify-center rounded-full",t?"size-5":"size-6","agent"===e?"bg-vivid-violet/15 text-vivid-violet":"bg-sky-teal/15 text-sky-teal"),title:"agent"===e?"Agent":"人类",children:"agent"===e?(0,eb.jsx)(uy,{className:n}):(0,eb.jsx)(VC,{className:n})})}let erH=["backlog","todo","in_progress","blocked","review","done","cancelled"],erU={backlog:{border:"border-ash-gray/50",dot:"bg-ash-gray"},todo:{border:"border-sky-teal/50",dot:"bg-sky-teal"},in_progress:{border:"border-vivid-violet/50",dot:"bg-vivid-violet"},blocked:{border:"border-hot-pink/50",dot:"bg-hot-pink"},review:{border:"border-amber-500/50",dot:"bg-amber-500"},done:{border:"border-emerald-500/50",dot:"bg-emerald-500"},cancelled:{border:"border-ash-gray/40",dot:"bg-ash-gray"}};function erq({issues:e,links:t,loading:n,onOpenIssue:r}){let{placed:a,byId:i,width:o,height:l}=ew.useMemo(()=>{let t=new Map;for(let n of e){let e=t.get(n.status)??[];e.push(n),t.set(n.status,e)}for(let e of t.values())e.sort((e,t)=>e.sortOrder!==t.sortOrder?e.sortOrder-t.sortOrder:e.createdAt.localeCompare(t.createdAt));let n=erH.filter(e=>(t.get(e)?.length??0)>0),r=[],a=0;n.forEach((e,n)=>{let i=t.get(e)??[];a=Math.max(a,i.length),i.forEach((e,t)=>{r.push({issue:e,x:32+280*n,y:32+84*t})})});let i=new Map(r.map(e=>[e.issue.id,e]));return{placed:r,byId:i,width:n.length>0?64+184*n.length+(n.length-1)*96:64,height:Math.max(64+56*a+28*Math.max(0,a-1),120)}},[e]),s=ew.useMemo(()=>t.map(e=>{let t=i.get(e.fromIssueId),n=i.get(e.toIssueId);return t&&n?{link:e,from:t,to:n}:null}).filter(e=>!!e),[t,i]);if(n)return(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})});if(0===e.length)return(0,eb.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-sm text-muted-foreground/70",children:[(0,eb.jsx)(QG,{className:"size-6"}),"暂无 issue,先在看板中创建"]});let c=s.length>0;return(0,eb.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[c?(0,eb.jsx)("div",{className:"mx-5 mb-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground",children:["depends_on","blocks","parent","relates_to"].map(e=>(0,eb.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"inline-block h-0.5 w-4 rounded-full",style:{backgroundColor:erz[e].stroke}}),erO[e]]},e))}):(0,eb.jsxs)("div",{className:"mx-5 mb-2 flex items-center gap-2 rounded-lg border border-dashed border-border bg-muted/30 px-3 py-2 text-xs text-muted-foreground",children:[(0,eb.jsx)(QG,{className:"size-3.5 shrink-0"}),"还没有任何依赖关系。在某张卡片详情的「关联 issue」中添加依赖 / 阻塞 / 父级,即可在此看到请求图谱。"]}),(0,eb.jsx)("div",{className:"flex-1 overflow-auto px-5 pb-4",children:(0,eb.jsxs)("div",{className:"relative",style:{width:o,height:l},children:[(0,eb.jsxs)("svg",{className:"pointer-events-none absolute inset-0",width:o,height:l,children:[(0,eb.jsx)("defs",{children:["depends_on","blocks","parent","relates_to"].map(e=>(0,eb.jsx)("marker",{id:`arrow-${e}`,viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto-start-reverse",children:(0,eb.jsx)("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:erz[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=erW(t,n),a=erW(n,t),i=erz[e.kind].stroke,o=(r.x+a.x)/2,l=(r.y+a.y)/2;return(0,eb.jsxs)("g",{children:[(0,eb.jsx)("line",{x1:r.x,y1:r.y,x2:a.x,y2:a.y,stroke:i,strokeWidth:1.75,markerEnd:`url(#arrow-${e.kind})`}),(0,eb.jsx)("text",{x:o,y:l-4,textAnchor:"middle",className:"fill-muted-foreground",style:{fontSize:10},children:erO[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=erU[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,eI.cn)("absolute flex flex-col justify-center gap-0.5 rounded-lg border bg-card px-2.5 py-1.5 text-left shadow-sm transition hover:border-vivid-violet hover:shadow-md",i.border),title:`#${e.number} ${e.title}`,children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 shrink-0 rounded-full",i.dot)}),(0,eb.jsxs)("span",{className:"font-mono text-[11px] text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"ml-auto truncate text-[10px] text-muted-foreground/70",children:(a=e.status,erj.find(e=>e.status===a)??{status:a,label:a,dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"}).label})]}),(0,eb.jsx)("span",{className:"truncate text-xs font-medium text-foreground",children:e.title})]},e.id)})]})})]})}function erW(e,t){let n=e.x+92,r=e.y+28,a=t.x+92,i=t.y+28,o=a-n,l=i-r;if(0===o&&0===l)return{x:n,y:r};let s=Math.min(0!==o?92/Math.abs(o):1/0,0!==l?28/Math.abs(l):1/0);return{x:n+o*s,y:r+l*s}}let erK="application/x-vantaloom-issue";function erG({projectId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState("board"),[c,d]=ew.useState(!0),[u,f]=ew.useState(!1),[h,m]=ew.useState(null),[p,g]=ew.useState(null),[x,v]=ew.useState(null),[b,y]=ew.useState(null),[w,j]=ew.useState(!1),[k,N]=ew.useState(null),S=ew.useCallback(async t=>{t?.silent||f(!0);try{let[t,r,i]=await Promise.all([eri(e),erh(e).catch(()=>[]),erg(e).catch(()=>[])]);n(t),a(r),o(i),m(null)}catch(e){m(e instanceof Error?e.message:"加载看板失败")}finally{d(!1),f(!1)}},[e]);ew.useEffect(()=>{d(!0),S({silent:!0});let e=setInterval(()=>void S({silent:!0}),1e4),t=()=>void S({silent:!0});return window.addEventListener("focus",t),()=>{clearInterval(e),window.removeEventListener("focus",t)}},[S]);let C=ew.useMemo(()=>{let e={};for(let t of[...ery,erw])e[t.status]=[];for(let n of t)(e[n.status]??=[]).push(n);for(let t of Object.values(e))t.sort((e,t)=>e.sortOrder!==t.sortOrder?e.sortOrder-t.sortOrder:e.createdAt.localeCompare(t.createdAt));return e},[t]);async function M(e,r,a){let i,o,l=t.find(t=>t.id===e);if(!l)return;let s=(C[r]??[]).filter(t=>t.id!==e);if(a){let e=s.findIndex(e=>e.id===a);e>=0&&(o=s[e]?.sortOrder,i=e>0?s[e-1]?.sortOrder:void 0)}if(void 0===i&&void 0===o){let e=s[s.length-1];i=e?.sortOrder}let c=void 0!==i&&void 0!==o?(i+o)/2:void 0!==i?i+1e3:void 0!==o?o-1e3:1e3;if(l.status!==r||l.sortOrder!==c){g(null),n(t=>t.map(t=>t.id===e?{...t,status:r,sortOrder:c}:t));try{await ers(e,{status:r,sortOrder:c})}catch(e){n(t),g(e instanceof Error?`移动失败:${e.message}`:"移动失败,已撤销")}}}function E(e,t,n){e.preventDefault(),e.stopPropagation(),v(null);let r=e.dataTransfer.getData(erK)||e.dataTransfer.getData("text/plain");r&&M(r,t,n)}async function O(e,t,n){g(null);try{await erx(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erv&&404===e.status||g(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),S({silent:!0})}let P=w?[...ery,erw]:ery;return(0,eb.jsxs)(eee,{children:[(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 px-5 py-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:["board"===l?(0,eb.jsx)(ert,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(QG,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h1",{className:"text-sm font-semibold text-foreground",children:"board"===l?"看板":"图谱"}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground",children:[t.length," 个 issue"]})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[p?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-3.5"}),p]}):null,(0,eb.jsxs)("div",{className:"flex items-center rounded-lg border border-border p-0.5",children:[(0,eb.jsxs)("button",{type:"button",onClick:()=>s("board"),className:(0,eI.cn)("flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium transition","board"===l?"bg-vivid-violet/15 text-vivid-violet":"text-muted-foreground hover:text-foreground"),children:[(0,eb.jsx)(ert,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,eI.cn)("flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium transition","graph"===l?"bg-vivid-violet/15 text-vivid-violet":"text-muted-foreground hover:text-foreground"),children:[(0,eb.jsx)(QG,{className:"size-3.5"}),"图谱"]})]}),"board"===l?(0,eb.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("input",{type:"checkbox",checked:w,onChange:e=>j(e.target.checked),className:"size-3.5 accent-vivid-violet"}),"显示已取消"]}):null,(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void S(),disabled:u,children:[(0,eb.jsx)(bi,{className:(0,eI.cn)("size-4",u&&"animate-spin")}),"刷新"]})]})]}),i.length>0?(0,eb.jsx)(erX,{approvals:i,onResolve:O}):null,c?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})}):h?(0,eb.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-sm text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-5"}),h,(0,eb.jsx)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void S(),children:"重试"})]}):"graph"===l?(0,eb.jsx)(erq,{issues:t,links:r,onOpenIssue:e=>y(e)}):(0,eb.jsx)("div",{className:(0,eI.cn)("grid flex-1 content-start gap-x-3 gap-y-5 overflow-y-auto px-5 pb-4","grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-6"),children:P.map(t=>{let r=C[t.status]??[],a=x===t.status,i=k===t.status;return(0,eb.jsxs)("section",{onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",x!==t.status&&v(t.status)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||v(e=>e===t.status?null:e)},onDrop:e=>E(e,t.status),className:"flex min-w-0 flex-col gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 px-1",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 shrink-0 rounded-full",t.dot)}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:t.label}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded-full px-1.5 py-0.5 text-[11px] font-medium",t.chip),children:r.length})]}),(0,eb.jsx)("button",{type:"button",title:"新建 issue",onClick:()=>N(e=>e===t.status?null:t.status),className:"flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-muted hover:text-foreground",children:(0,eb.jsx)(lJ,{className:"size-4"})})]}),(0,eb.jsxs)("div",{className:(0,eI.cn)("flex min-h-[5rem] flex-col divide-y divide-border overflow-hidden rounded-lg border bg-card transition-colors",a?"border-vivid-violet ring-1 ring-vivid-violet/40":"border-border"),children:[i?(0,eb.jsx)(erJ,{onCancel:()=>N(null),onCreate:async r=>{try{let a=await erl(e,{...r}),i="backlog"===t.status?a:await ers(a.id,{status:t.status}).catch(()=>a);n(e=>[...e,i]),N(null)}catch(e){g(e instanceof Error?`新建失败:${e.message}`:"新建失败")}}}):null,0!==r.length||i?r.map(e=>(0,eb.jsx)(erZ,{issue:e,onOpen:()=>y(e.id),onDropBefore:n=>E(n,t.status,e.id)},e.id)):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center px-3 py-8 text-xs text-muted-foreground/60",children:a?"松开以移动到此状态":"暂无 issue"})]})]},t.status)})})]}),(0,eb.jsx)(erL,{issueId:b,projectId:e,open:null!==b,onClose:()=>y(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),erh(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))})]})}function erX({approvals:e,onResolve:t}){return(0,eb.jsxs)("section",{className:"mx-5 mb-3 flex flex-col gap-2 rounded-xl border border-amber-500/40 bg-amber-500/5 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(en_,{className:"size-4 text-amber-600 dark:text-amber-400"}),(0,eb.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"待审批"}),(0,eb.jsx)("span",{className:"rounded-full bg-amber-500/15 px-1.5 py-0.5 text-[11px] font-medium text-amber-600 dark:text-amber-400",children:e.length}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"同伴会话有待你确认的工具调用"})]}),(0,eb.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 xl:grid-cols-3",children:e.map(e=>(0,eb.jsx)(erY,{approval:e,onResolve:t},e.approvalId))})]})}function erY({approval:e,onResolve:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState(!1),[o,l]=ew.useState("");async function s(n,a){r(n);try{await t(e,n,a)}finally{r(null)}}let c=e.riskFactors??[];return(0,eb.jsxs)("article",{className:"flex flex-col gap-2 rounded-lg border border-border bg-card p-2.5 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsx)("span",{className:"break-words font-mono text-[13px] font-medium text-foreground",children:e.toolName}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erR[e.classification]),children:erT[e.classification]})]}),e.title?(0,eb.jsx)("p",{className:"break-words text-[13px] text-foreground",children:e.title}):null,e.reason?(0,eb.jsx)("p",{className:"break-words text-xs text-muted-foreground",children:e.reason}):null,c.length>0?(0,eb.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,eb.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground/70",children:"风险"}),(0,eb.jsx)("ul",{className:"flex flex-wrap gap-1",children:c.map((e,t)=>(0,eb.jsx)("li",{className:"rounded-full bg-hot-pink/10 px-1.5 py-0.5 text-[10px] text-hot-pink",children:e},`${e}-${t}`))})]}):null,(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/70",children:[(0,eb.jsx)(jk,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",title:e.conversationTitle,children:e.conversationTitle||"(未命名会话)"}),(0,eb.jsx)("span",{className:"shrink-0","aria-hidden":!0,children:"·"}),(0,eb.jsx)("span",{className:"shrink-0",children:erA(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(eA,{autoFocus:!0,value:o,onChange:e=>l(e.target.value),placeholder:"拒绝理由(可选)",className:"h-8",onKeyDown:e=>{"Enter"===e.key&&s("reject",o.trim()),"Escape"===e.key&&(i(!1),l(""))}}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",disabled:null!==n,onClick:()=>{i(!1),l("")},children:"取消"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"destructive",disabled:null!==n,onClick:()=>void s("reject",o.trim()),children:["reject"===n?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(fg.XIcon,{className:"size-4"}),"确认拒绝"]})]})]}):(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",disabled:null!==n,onClick:()=>i(!0),children:[(0,eb.jsx)(fg.XIcon,{className:"size-4"}),"拒绝"]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",disabled:null!==n,onClick:()=>void s("approve"),children:["approve"===n?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(mJ,{className:"size-4"}),"通过"]})]})]})}function erZ({issue:e,onOpen:t,onDropBefore:n}){let r=e.progress,a=r?.checklist.length??0,i=r?.checklist.filter(e=>e.done).length??0;return(0,eb.jsxs)("article",{draggable:!0,onDragStart:t=>{t.dataTransfer.effectAllowed="move",t.dataTransfer.setData(erK,e.id),t.dataTransfer.setData("text/plain",e.id)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move"},onDrop:n,onClick:t,className:"group cursor-pointer px-3 py-2.5 transition-colors hover:bg-muted/50 active:cursor-grabbing",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erS[e.type]),children:erk[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erE[e.priority]),children:erC[e.priority]}):null,(0,eb.jsx)("span",{className:"ml-auto flex min-w-0 shrink items-center justify-end gap-1 text-[11px] text-muted-foreground",children:e.assignee?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(erV,{kind:e.assignee.kind,small:!0}),(0,eb.jsx)("span",{className:"truncate",children:e.assignee.displayName})]}):(0,eb.jsx)("span",{className:"text-muted-foreground/50",children:"未认领"})})]}),(0,eb.jsx)("h3",{className:"mt-1 break-words text-sm font-medium leading-snug text-foreground",children:e.title}),e.labels.length>0?(0,eb.jsx)("div",{className:"mt-1.5 flex flex-wrap gap-1",children:e.labels.slice(0,4).map(e=>(0,eb.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:e},e))}):null,r&&(r.percent>0||a>0)?(0,eb.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 flex-1 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-vivid-violet transition-all",style:{width:`${Math.max(0,Math.min(100,r.percent))}%`}})}),(0,eb.jsx)("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:a>0?`${i}/${a}`:`${r.percent}%`})]}):null]})}function erJ({onCreate:e,onCancel:t}){let[n,r]=ew.useState(""),[a,i]=ew.useState("task"),[o,l]=ew.useState("normal"),[s,c]=ew.useState(!1);return(0,eb.jsxs)("form",{className:"flex flex-col gap-2 rounded-lg border border-vivid-violet/40 bg-card p-2.5",onSubmit:async t=>{t.preventDefault(),n.trim()&&(c(!0),await e({title:n.trim(),type:a,priority:o}),c(!1))},children:[(0,eb.jsx)(eA,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:"issue 标题",className:"h-8"}),(0,eb.jsxs)("div",{className:"flex gap-1.5",children:[(0,eb.jsx)(ern,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erN.map(e=>(0,eb.jsx)(err,{value:e,children:erk[e]},e))}),(0,eb.jsx)(ern,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erM.map(e=>(0,eb.jsx)(err,{value:e,children:erC[e]},e))})]}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",onClick:t,children:"取消"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",disabled:!n.trim()||s,children:s?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"新建"})]})]})}let erQ=(0,ek.default)("file-code-corner",[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]]),er0=(0,ek.default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);function er1({projectId:e,onOpenSettings:t}){let[n,r]=ew.useState(),[a,i]=ew.useState({sessionCount:0,runningCount:0,tokenTotal:0,issueCount:0,openIssueCount:0,pendingApprovalCount:0}),[o,l]=ew.useState(!0),[s,c]=ew.useState([]),[d,u]=ew.useState([]),[f,h]=ew.useState(),[m,p]=ew.useState(),[g,x]=ew.useState(),[v,b]=ew.useState(!0),y=ew.useCallback(async()=>{b(!0);let[t,n]=await Promise.all([enI(e).catch(()=>void 0),enA(e).catch(()=>void 0)]);t&&p(t),n&&x(n),b(!1)},[e]);return ew.useEffect(()=>{let e=!0;return p(void 0),x(void 0),y().finally(()=>{if(!e)return}),()=>{e=!1}},[y]),ew.useEffect(()=>{let t=!0;async function n(){try{let n,a=await enE(e);if(!t)return;r(a);let o=await enT(e).catch(()=>[]);if(!t)return;c(o);let l=await eri(e).catch(()=>[]);if(!t)return;u(l);let s=await erg(e).catch(()=>[]);if(!t)return;let d=await enz(e).catch(()=>void 0);if(!t)return;d&&h(d);let f=l.filter(e=>"done"!==e.status&&"cancelled"!==e.status).length;if(a.canvasId)try{n=(await QF(a.canvasId)).nodes.length}catch{n=void 0}if(!t)return;i({sessionCount:o.length,runningCount:o.filter(e=>!0===e.running).length,tokenTotal:o.reduce((e,t)=>e+(t.runUsage?.totalTokens??t.tokens??0),0),canvasNodeCount:n,issueCount:l.length,openIssueCount:f,pendingApprovalCount:s.length})}catch{}finally{t&&l(!1)}}l(!0),n();let a=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(a)}},[e]),(0,eb.jsx)(eee,{children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-6 py-8",children:[(0,eb.jsxs)("header",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,eb.jsx)(uw,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(er2,{count:a.pendingApprovalCount}),t?(0,eb.jsxs)("button",{type:"button",onClick:()=>t(e),title:"工程设置",className:"ml-auto flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-3.5",children:[(0,eb.jsx)(eec,{}),"设置"]}):null]}),(0,eb.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:n?.title??(o?"加载中…":"工程")}),n?.summary?(0,eb.jsx)("p",{className:"max-w-2xl text-sm text-muted-foreground",children:n.summary}):(0,eb.jsx)("p",{className:"text-sm text-muted-foreground/60",children:"暂无工程摘要"})]}),(0,eb.jsxs)("section",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4",children:[(0,eb.jsx)(er3,{icon:(0,eb.jsx)(uy,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(ert,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(GI,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(uw,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(er5,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(er4,{peers:s,issues:d,loading:o}),(0,eb.jsxs)("section",{className:"grid grid-cols-1 gap-3 lg:grid-cols-2",children:[(0,eb.jsx)(er9,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eae,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function er2({count:e}){return e<=0?(0,eb.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground/60",children:"无待审批"}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 rounded-full bg-amber-500/15 px-2 py-0.5 text-[11px] font-medium text-amber-600 dark:text-amber-400 [&_svg]:size-3",title:"同伴会话有待你确认的工具调用,可在看板顶部处理",children:[(0,eb.jsx)(en_,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function er5({projectId:e,budget:t,loading:n,onUpdated:r}){let[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1),[d,u]=ew.useState();if(n&&!t)return(0,eb.jsxs)("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(eeT,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})]});if(!t)return null;let f=Math.max(0,t.pct),h=Math.min(100,f),m=t.hard?"hard":t.soft?"soft":"normal";async function p(){let n=o.trim(),a=Number(n);if(""===n||!Number.isFinite(a)||a<0)return void u("请输入 ≥ 0 的整数(0 表示恢复全局默认)");c(!0),u(void 0);try{let n=Math.floor(a),o=await enP(e,{budgetTokens:n}),l=await enz(e).catch(()=>void 0);r(l??{...t,budget:n||t.budget},o),i(!1)}catch(e){u(e instanceof Error?e.message:"保存失败")}finally{c(!1)}}return(0,eb.jsxs)("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(eeT,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,eI.cn)("text-xs font-medium","hard"===m?"text-hot-pink":"soft"===m?"text-amber-500":"text-muted-foreground"),children:"hard"===m?"已用尽":"soft"===m?"接近上限":"正常"})]}),(0,eb.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,eb.jsxs)("span",{className:"text-2xl font-semibold text-foreground",children:[f,"%"]}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground/70",children:["已用 ",t.used.toLocaleString("zh-CN")," /"," ",t.budget.toLocaleString("zh-CN")," token"]})]}),(0,eb.jsx)("div",{className:"h-2 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("h-full rounded-full transition-all","hard"===m?"bg-hot-pink":"soft"===m?"bg-amber-500":"bg-sky-teal"),style:{width:`${h}%`}})}),(0,eb.jsx)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground/70",children:a?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("input",{type:"number",min:0,step:1e5,value:o,autoFocus:!0,disabled:s,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&p(),"Escape"===e.key&&(i(!1),u(void 0))},placeholder:"0 = 全局默认",className:"w-40 rounded-md border border-border bg-background px-2 py-1 text-foreground outline-none focus:border-sky-teal"}),(0,eb.jsxs)("button",{type:"button",disabled:s,onClick:()=>void p(),className:"flex items-center gap-1 rounded-md border border-border bg-background px-2 py-1 text-foreground hover:bg-muted [&_svg]:size-3 disabled:opacity-50",children:[s?(0,eb.jsx)(eM,{className:"size-3 animate-spin"}):(0,eb.jsx)(mJ,{}),"保存"]}),(0,eb.jsx)("button",{type:"button",disabled:s,onClick:()=>{i(!1),u(void 0)},className:"flex items-center gap-1 rounded-md px-1.5 py-1 hover:bg-muted [&_svg]:size-3 disabled:opacity-50",children:(0,eb.jsx)(fg.XIcon,{})}),d?(0,eb.jsx)("span",{className:"text-hot-pink",children:d}):null]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("span",{children:["预算上限 ",t.budget.toLocaleString("zh-CN")," token"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>{l(String(t.budget)),u(void 0),i(!0)},className:"flex items-center gap-1 rounded-md px-1.5 py-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-3",children:[(0,eb.jsx)(HA,{}),"调整"]})]})})]})}function er4({peers:e,issues:t,loading:n}){let r=ew.useMemo(()=>{let e=new Map,n=e=>"done"===e.status||"cancelled"===e.status;for(let r of t){if(r.assignee?.kind!=="agent")continue;let t=r.assignee.id,a=e.get(t);(!a||n(a)&&!n(r))&&e.set(t,r)}return e},[t]);return n&&0===e.length?null:(0,eb.jsxs)("section",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(uy,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"同伴会话"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:e.length})]}),0===e.length?(0,eb.jsx)("p",{className:"py-1 text-xs text-muted-foreground/60",children:"暂无同伴会话。在工程内的对话里用多代理工具拉起同伴即可在此显示。"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-1",children:e.map(e=>{let t=!0===e.running,n=r.get(e.id),a=function(e){let t=e.settings?.folders?.[0]?.trim();if(!t)return"";let n=t.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return n[n.length-1]??""}(e);return(0,eb.jsxs)("li",{className:"flex items-center gap-2 rounded-lg px-2 py-1.5 text-[13px] hover:bg-muted/50",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 shrink-0 rounded-full",t?"animate-pulse bg-green-500":"border border-muted-foreground/50 bg-transparent"),"aria-label":t?"运行中":"空闲"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:e.title||"(未命名)"}),n?(0,eb.jsxs)("span",{className:"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",title:n.title,children:["#",n.number]}):null,a?(0,eb.jsxs)("span",{className:"flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground/70 [&_svg]:size-3",children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"max-w-32 truncate",children:a})]}):null,(0,eb.jsx)("span",{className:"shrink-0 text-[11px] text-muted-foreground/60",children:t?"运行中":"空闲"})]},e.id)})})]})}function er3({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("flex flex-col gap-2 rounded-xl border border-border bg-card p-4 shadow-sm",i&&"opacity-70"),children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[e,(0,eb.jsx)("span",{className:"text-[13px]",children:t})]}),(0,eb.jsx)("div",{className:"text-2xl font-semibold text-foreground",children:a?(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"}):"number"==typeof n?n.toLocaleString("zh-CN"):n}),r?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/70",children:r}):null]})}function er6({loading:e,onRefresh:t}){return(0,eb.jsxs)("button",{type:"button",disabled:e,onClick:t,title:"刷新",className:"flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50 [&_svg]:size-3",children:[(0,eb.jsx)(bi,{className:(0,eI.cn)(e&&"animate-spin")}),"刷新"]})}let er8=["bg-sky-teal","bg-vivid-violet","bg-hot-pink","bg-amber-500","bg-emerald-500","bg-blue-500","bg-orange-500","bg-cyan-500"];function er7(e,t){return"其他"===t?"bg-ash-gray":er8[e%er8.length]??"bg-ash-gray"}function er9({stats:e,loading:t,onRefresh:n}){let r=!!e&&e.totalFiles>0,a=!!e&&!e.folder.trim();return(0,eb.jsxs)("div",{className:"flex min-h-32 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(erQ,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(er6,{loading:t,onRefresh:n})]}),t&&!e?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})}):r?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,eb.jsx)("span",{className:"text-2xl font-semibold text-foreground",children:e.totalLines.toLocaleString("zh-CN")}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground/70",children:["行 · ",e.totalFiles.toLocaleString("zh-CN")," 个文件"]}),e.truncated?(0,eb.jsx)("span",{className:"rounded-full bg-amber-500/10 px-2 py-0.5 text-[11px] text-amber-500",children:"部分统计(已截断)"}):null]}),(0,eb.jsx)("div",{className:"flex h-2 w-full overflow-hidden rounded-full bg-muted",children:e.languages.map((e,t)=>(0,eb.jsx)("div",{className:(0,eI.cn)("h-full",er7(t,e.language)),style:{width:`${Math.max(e.pct,1)}%`},title:`${e.language} \xb7 ${e.pct}%`},e.language))}),(0,eb.jsx)("ul",{className:"flex flex-col gap-1.5",children:e.languages.slice(0,8).map((e,t)=>(0,eb.jsxs)("li",{className:"flex items-center gap-2 text-[13px]",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2.5 shrink-0 rounded-sm",er7(t,e.language))}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:e.language}),(0,eb.jsxs)("span",{className:"shrink-0 text-xs text-muted-foreground/70",children:[e.lines.toLocaleString("zh-CN")," 行"]}),(0,eb.jsxs)("span",{className:"w-10 shrink-0 text-right text-xs font-medium text-muted-foreground",children:[e.pct,"%"]})]},e.language))})]}):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)("span",{className:"rounded-full border border-border/60 bg-background px-3 py-1 text-xs text-muted-foreground",children:a?"未配置工作目录":"暂无代码统计"})})]})}function eae({graph:e,loading:t,onRefresh:n}){let r=!!e&&e.commits.length>0,a=!!e&&!e.repoRoot.trim();return(0,eb.jsxs)("div",{className:"flex min-h-32 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(Vk,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"Git 提交图谱"}),e?.branch?(0,eb.jsx)("span",{className:"truncate rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",children:e.branch}):null]}),(0,eb.jsx)(er6,{loading:t,onRefresh:n})]}),t&&!e?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})}):r?(0,eb.jsx)("ul",{className:"flex flex-col",children:e.commits.map((t,n)=>{let r=n===e.commits.length-1,a=t.parents.length>1,i=t.refs.split(",").map(e=>e.trim().replace(/^HEAD ->\s*/,"").replace(/^tag:\s*/,"")).filter(Boolean);return(0,eb.jsxs)("li",{className:"flex gap-2.5",children:[(0,eb.jsxs)("div",{className:"flex w-3 shrink-0 flex-col items-center",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("mt-1.5 flex size-3 items-center justify-center rounded-full",a?"bg-vivid-violet text-white [&_svg]:size-2":"border-2 border-sky-teal bg-background"),children:a?(0,eb.jsx)(er0,{}):null}),r?null:(0,eb.jsx)("span",{className:"w-px flex-1 bg-border"})]}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1 pb-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"font-mono text-[11px] text-muted-foreground",children:t.shortSha}),i.map(e=>(0,eb.jsx)("span",{className:"shrink-0 rounded-full bg-sky-teal/10 px-1.5 py-0.5 text-[10px] font-medium text-sky-teal",children:e},e))]}),(0,eb.jsx)("p",{className:"truncate text-[13px] text-foreground",children:t.subject||"(无提交信息)"}),(0,eb.jsxs)("p",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/70",children:[a?(0,eb.jsx)("span",{className:"text-vivid-violet",children:"合并"}):null,(0,eb.jsx)("span",{className:"truncate",children:t.author}),(0,eb.jsx)("span",{"aria-hidden":!0,children:"·"}),(0,eb.jsx)("span",{className:"shrink-0",children:function(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Date.now()-t;if(n<6e4)return"刚刚";if(n<36e5)return`${Math.floor(n/6e4)} 分钟前`;if(n<864e5)return`${Math.floor(n/36e5)} 小时前`;if(n<6048e5)return`${Math.floor(n/864e5)} 天前`;let r=new Date(t),a=String(r.getMonth()+1).padStart(2,"0"),i=String(r.getDate()).padStart(2,"0");return`${r.getFullYear()}-${a}-${i}`}(t.date)})]})]})]},t.sha)})}):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)("span",{className:"rounded-full border border-border/60 bg-background px-3 py-1 text-xs text-muted-foreground",children:a?"非 Git 仓库":"暂无提交"})})]})}let eat={delete:"Delete",empty:"Drop here",title:"Trash"};function ean({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eat,...n},[c,d]=ew.useState(!1),u=ew.useRef(0),f=e||c||t.length>0;return ew.useEffect(()=>{e||(u.current=0,d(!1))},[e]),(0,eb.jsx)("div",{"data-slot":"trash-drop-zone","data-visible":f,"data-drag-inside":c,className:(0,eI.cn)("fixed top-4 left-1/2 z-50 -translate-x-1/2 transition-[opacity,transform] duration-300 ease-[cubic-bezier(.2,.8,.2,1)]",f?"pointer-events-auto translate-y-0 opacity-100":"pointer-events-none -translate-y-5 opacity-0",r),onDragEnter:function(e){e.preventDefault(),u.current+=1,d(!0)},onDragLeave:function(){u.current=Math.max(0,u.current-1),0===u.current&&d(!1)},onDragOver:function(e){e.preventDefault(),e.dataTransfer.dropEffect="move",d(!0)},onDrop:function(e){e.preventDefault(),e.stopPropagation(),u.current=0,d(!1);let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id")||e.dataTransfer.getData("text/plain"),n=e.dataTransfer.getData("text/plain")||t||"Dropped item",r=e.dataTransfer.getData("application/vnd.vantaloom.clip-kind");t&&a?.({id:t,title:n,meta:r,nativeEvent:e})},...l,children:(0,eb.jsx)("div",{className:(0,eI.cn)("min-w-12 overflow-hidden rounded-xl border-2 border-background bg-destructive text-destructive-foreground shadow-lg shadow-black/15 transition-[width,min-height,background-color,border-color,padding,box-shadow] duration-300","dark:border-destructive dark:bg-background dark:text-destructive",c||t.length>0?"w-64 border-dashed bg-destructive/12 p-2 text-destructive dark:bg-destructive/8":"flex size-12 items-center justify-center p-0"),children:c||t.length>0?(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-h-14 items-center justify-center gap-2 rounded-lg border border-dashed border-destructive/55 bg-destructive/8 px-3 text-sm font-medium text-destructive",children:[(0,eb.jsx)(bo,{className:"size-4"}),(0,eb.jsx)("span",{children:s.empty})]}),t.length>0?(0,eb.jsx)("div",{className:"grid max-h-36 gap-1 overflow-y-auto pr-1",children:t.map(e=>(0,eb.jsxs)("div",{className:"flex h-8 items-center gap-2 rounded-md border border-destructive/25 bg-background/80 px-2 text-foreground",children:[(0,eb.jsx)("button",{type:"button","aria-label":`Restore ${e.title}`,className:"flex size-5 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",onClick:()=>o?.(e),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:e.title}),e.meta?(0,eb.jsx)("span",{className:"shrink-0 text-xs text-muted-foreground",children:e.meta}):null]},e.id))}):null,t.length>0?(0,eb.jsx)("button",{type:"button",className:"h-8 rounded-md bg-destructive px-3 text-xs font-medium text-destructive-foreground transition-colors hover:bg-destructive/90 dark:border dark:border-destructive dark:bg-background dark:text-destructive dark:hover:bg-destructive/10",onClick:()=>i?.(t),children:s.delete}):null]}):(0,eb.jsx)(bo,{className:"size-5"})})})}function ear({hidden:e,items:t,trashItems:n,trashClipboardItems:r,draggingId:a,onDraggingChange:i,onItemsChange:o,onTrashItemsChange:l,onTrashClipboardItemsChange:s}){let c=ew.useRef(0),[d,u]=ew.useState(!1);return(ew.useEffect(()=>{u(!0)},[]),d)?(0,ib.createPortal)((0,eb.jsxs)("div",{className:(0,eI.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(ean,{active:!e&&void 0!==a,items:e?[]:n,className:(0,eI.cn)(e&&"pointer-events-none"),labels:{delete:"删除",empty:"拖入暂存"},onDrop:({id:e,title:n,meta:r})=>{let a=t.find(t=>t.id===e);a&&(s(t=>({...t,[e]:a})),l(t=>t.some(t=>t.id===e)?t:[...t,{id:e,title:n,meta:r,icon:a.icon}]))},onDelete:e=>{let t=new Set(e.map(e=>e.id));l(e=>e.filter(e=>!t.has(e.id))),s(e=>{let n={...e};for(let e of t)delete n[e];return n})},onItemRestore:e=>{let n=r[e.id];n&&o([n,...t.filter(e=>e.id!==n.id)]),l(t=>t.filter(t=>t.id!==e.id)),s(t=>{let n={...t};return delete n[e.id],n})}}),t.length>0?(0,eb.jsx)("div",{className:(0,eI.cn)("pointer-events-auto absolute top-4 right-4 w-80 max-w-[calc(100vw-2rem)] transition-[opacity,transform] duration-200",e&&"pointer-events-none -translate-y-2 opacity-0"),children:(0,eb.jsx)(X2,{items:t,title:"剪切板",labels:{empty:"剪切板为空",dragHandle:"拖拽卡片"},expansionDirection:"down-left",removeOnExternalDrop:!0,maxExpandedHeight:420,onItemDuplicate:(e,{item:n,index:r})=>{let a,i,l,s,d;return c.current+=1,a=n.payloads?.[G5],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[G4],a&&i&&(i[G5]={...a,config:{...a.config}}),l&&i&&(i[G4]={...l,config:l.config?{...l.config}:l.config}),s={...n,id:`${n.id}-copy-${c.current}`,title:`${n.title} copy`,payloads:i,dragData:{...n.dragData,...a?{"application/vnd.vantaloom.dashboard-widget-config":JSON.stringify(a.config)}:{}}},void((d=[...t]).splice(r+1,0,s),o(d))},onItemsRemove:e=>o(e),onItemsReorder:e=>o(e),onItemDragStart:({item:e})=>i(e.id),onItemDragEnd:()=>i(void 0)})}):null]}),document.body):null}let eaa=(0,ek.default)("languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]),eai=(0,ek.default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),eao=(0,ek.default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]),eal=(0,ek.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),eas=(0,ek.default)("notebook-pen",[["path",{d:"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4",key:"re6nr2"}],["path",{d:"M2 6h4",key:"aawbzj"}],["path",{d:"M2 10h4",key:"l0bgd4"}],["path",{d:"M2 14h4",key:"1gsvsf"}],["path",{d:"M2 18h4",key:"1bu2t1"}],["path",{d:"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"pqwjuv"}]]),eac=(0,ek.default)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),ead=(0,ek.default)("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]),eau=(0,ek.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),eaf=(0,ek.default)("users-round",[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]]),eah=(0,ek.default)("wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);var eam="Collapsible",[eap,eag]=cr(eam),[eax,eav]=eap(eam),eab=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=cu({prop:r,defaultProp:a??!1,onChange:o,caller:eam});return(0,eb.jsx)(eax,{scope:n,disabled:i,contentId:cc(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cp.div,{"data-state":eaS(s),"data-disabled":i?"":void 0,...l,ref:t})})});eab.displayName=eam;var eay="CollapsibleTrigger",eaw=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eav(eay,n);return(0,eb.jsx)(cp.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":eaS(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:ci(e.onClick,a.onOpenToggle)})});eaw.displayName=eay;var eaj="CollapsibleContent",eak=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eav(eaj,e.__scopeCollapsible);return(0,eb.jsx)(cA,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaN,{...r,ref:t,present:e})})});eak.displayName=eaj;var eaN=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eav(eaj,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,ca.useComposedRefs)(t,c),u=ew.useRef(0),f=u.current,h=ew.useRef(0),m=h.current,p=o.open||l,g=ew.useRef(p),x=ew.useRef(void 0);return ew.useEffect(()=>{let e=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(e)},[]),co(()=>{let e=c.current;if(e){x.current=x.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();u.current=t.height,h.current=t.width,g.current||(e.style.transitionDuration=x.current.transitionDuration,e.style.animationName=x.current.animationName),s(r)}},[o.open,r]),(0,eb.jsx)(cp.div,{"data-state":eaS(o.open),"data-disabled":o.disabled?"":void 0,id:o.contentId,hidden:!p,...i,ref:d,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:p&&a})});function eaS(e){return e?"open":"closed"}var eaC=e.i(91e3);let eaM={"new-canvas":"canvas","all-canvases":"canvas","open-recent-canvas":"canvas","new-project":"canvas","project-overview":"canvas","project-settings":"canvas","project-conversation":"canvas",kanban:"canvas","new-agent-conversation":"agent","open-recent-conversation":"agent",preferences:"settings","preferences-model-routes":"settings","preferences-agent-config":"settings","preferences-subagent-config":"settings","preferences-cc-engine-config":"settings","preferences-system-prompt":"settings","preferences-skills":"settings","preferences-memory":"settings","preferences-layout":"settings","network-topology":"settings","network-settings":"settings","check-update":"settings",account:"settings"};function eaE({navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:i,onOpenConversation:o,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversationSettings:m,onConversationDeleted:p,onAccountSettings:g,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b,hideCanvas:y,className:w}){let j=eaM[n]??(eaH.some(e=>e.items.some(e=>e.id===n))?"settings":y?"agent":"canvas"),[k,N]=ew.useState(j);ew.useEffect(()=>{N(j)},[j]);let S=t.find(e=>e.id===k);return(0,eb.jsxs)("aside",{"data-slot":"flat-sidebar",className:(0,eI.cn)("flex h-full w-72 flex-col rounded-xl border border-border bg-sidebar p-3 text-sidebar-foreground shadow-sm",w),children:[(0,eb.jsx)("nav",{className:"mb-5 flex gap-1 rounded-lg bg-muted/70 p-1",children:e.map(e=>{let t=e.id===k;return(0,eb.jsxs)("button",{type:"button",onClick:()=>N(e.id),className:(0,eI.cn)("flex flex-1 items-center justify-center gap-1.5 rounded-md py-1.5 text-[13px] font-medium transition-colors [&_svg]:size-4",t?"border border-border/50 bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/50 hover:text-foreground"),children:[e.icon,(0,eb.jsx)("span",{className:"truncate",children:e.label})]},e.id)})}),"canvas"===k?(0,eb.jsx)(eaO,{activeProjectId:a,activeConversationId:r,hideCanvas:y,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):"agent"===k?(0,eb.jsx)(eaT,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eaB,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(eaX,{onItemSelect:i,onAccountSettings:g})]})}function eaO({activeProjectId:e,activeConversationId:t,hideCanvas:n,onOpenProjectCanvas:r,onOpenProjectOverview:a,onOpenProjectKanban:i,onOpenProjectSettings:o,onNewProjectConversation:l,onOpenProjectConversation:s,onNewProject:c,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,subagentTree:h,activeSubagentPath:m,onOpenSubagent:p}){let{projects:g,loading:x,refresh:v}=function(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),a=ew.useRef(!0),i=ew.useCallback(async()=>{try{let e=await enM();if(!a.current)return;let n=[...e].sort((e,t)=>t.updatedAt>e.updatedAt?1:-1);t(n)}catch{}finally{a.current&&r(!1)}},[]);return ew.useEffect(()=>{a.current=!0,i();let e=setInterval(()=>void i(),1e4);return()=>{a.current=!1,clearInterval(e)}},[i]),{projects:e,loading:n,refresh:()=>void i()}}(),b=x&&0===g.length;return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mb-6 space-y-0.5",children:(0,eb.jsx)(eaW,{icon:ead,label:Q7.canvasNew,onClick:()=>c?.()})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden pr-1",children:(0,eb.jsx)("div",{className:"space-y-0.5",children:b?(0,eb.jsx)(eaK,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:Q7.projectEmpty}):g.map(c=>(0,eb.jsx)(eaP,{project:c,active:c.id===e,activeConversationId:t,hideCanvas:n,onOpenProjectCanvas:r,onOpenProjectOverview:a,onOpenProjectKanban:i,onOpenProjectSettings:o,onNewProjectConversation:l,onOpenProjectConversation:s,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,onConversationsChanged:v,subagentTree:h,activeSubagentPath:m,onOpenSubagent:p},c.id))})})]})}function eaP({project:e,active:t,activeConversationId:n,hideCanvas:r,onOpenProjectCanvas:a,onOpenProjectOverview:i,onOpenProjectKanban:o,onOpenProjectSettings:l,onNewProjectConversation:s,onOpenProjectConversation:c,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,onConversationsChanged:h,subagentTree:m,activeSubagentPath:p,onOpenSubagent:g}){let[x,v]=ew.useState(t),[b,y]=ew.useState([]),[w,j]=ew.useState(0);ew.useEffect(()=>{let t=!0,n=async()=>{try{let n=await erg(e.id);t&&j(n.length)}catch{}};n();let r=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(r)}},[e.id]),ew.useEffect(()=>{if(!x)return;let t=!0,n=async()=>{try{let n=await enT(e.id);t&&y(n)}catch{}};n();let r=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(r)}},[x,e.id]);let k=ew.useCallback(async e=>{try{await sW(e.id,e.ownerMachineId)}catch{}f?.(e.id),y(t=>t.filter(t=>t.id!==e.id)),h?.()},[f,h]),N=ew.useCallback(async t=>{try{let n=await sZ(t.id,void 0,t.ownerMachineId);c?c(e.id,n.conversation.id,n.conversation.ownerMachineId):d(n.conversation.id,n.conversation.ownerMachineId),h?.()}catch{}},[d,c,e.id,h]);return(0,eb.jsxs)(eab,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("group flex items-center rounded-lg text-[13px] transition-colors",t?"bg-muted text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground"),children:[(0,eb.jsx)(eaw,{asChild:!0,children:(0,eb.jsx)("button",{type:"button","aria-label":x?"收起工程":"展开工程",className:"shrink-0 rounded-md p-1.5 pl-2 text-muted-foreground hover:text-foreground",onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(xf,{className:(0,eI.cn)("size-4 transition-transform",x?"rotate-0":"-rotate-90")})})}),(0,eb.jsxs)("button",{type:"button",title:e.title,onClick:()=>{v(!0),i?.(e.id)},className:"flex min-w-0 flex-1 items-center gap-2 rounded-lg py-2 pr-3 text-left",children:[(0,eb.jsx)(uw,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.title}),w>0?(0,eb.jsx)("span",{title:`${w} 项待审批`,className:"shrink-0 rounded-full bg-amber-500/15 px-1.5 py-0.5 text-[10px] font-semibold leading-none text-amber-600 dark:bg-amber-400/20 dark:text-amber-300",children:w}):null,t&&(0,eb.jsx)(eaG,{active:!0})]})]}),(0,eb.jsx)(eak,{className:"mt-0.5",children:(0,eb.jsx)("div",{className:"ml-[1.125rem] border-l border-border/60 pl-1.5",children:(0,eb.jsxs)("div",{className:"space-y-0.5",children:[r?null:(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(uw,{className:"size-4"}),label:Q7.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(eai,{className:"size-4"}),label:Q7.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(eec,{className:"size-4"}),label:Q7.projectSettings,onClick:()=>l?.(e.id)}),function(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map,a=[];for(let t of e){let e=t.forkOriginId;if(e&&n.has(e)){let n=r.get(e)??[];n.push(t),r.set(e,n)}else a.push(t)}let i=new Set((t.activeSubagentPath??[]).map(e=>e.id)),o=t.activeSubagentPath?.[t.activeSubagentPath.length-1]?.id,l=(e,n)=>{let a=e.id!==t.activeConversationId||(t.subagentTree?.length??0)===0?null:(0,eb.jsx)(eaR,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(ea$,{conversation:e,depth:n,active:e.id===t.activeConversationId,onOpenConversation:t.onOpenConversation,onOpenConversationSettings:t.onOpenConversationSettings,onDelete:t.onDelete,onFork:t.onFork}),a?(0,eb.jsx)("div",{style:n>0?{marginLeft:14*n}:void 0,children:a}):null,(r.get(e.id)??[]).map(e=>l(e,n+1))]},e.id)};return a.map(e=>l(e,0))}(b,{activeConversationId:n,onOpenConversation:(t,n)=>{c?c(e.id,t,n):d(t,n)},onOpenConversationSettings:u,onDelete:k,onFork:N,subagentTree:m,activeSubagentPath:p,onOpenSubagent:g}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s?.(e.id),title:Q7.projectNewConversation,className:"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[13px] text-muted-foreground/80 transition-colors hover:bg-muted hover:text-foreground",children:[(0,eb.jsx)(lJ,{className:"size-4 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:Q7.projectNewConversation})]})]})})})]})}function eaz({icon:e,label:t,onClick:n}){return(0,eb.jsxs)("button",{type:"button",onClick:n,className:"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[13px] text-foreground/80 transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",children:[e,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]})}let eaI="__all__",eaA={status:"all",location:eaI,sort:"recent"};function eaT({activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a,subagentTree:i,activeSubagentPath:o,onOpenSubagent:l}){let{recents:s,refresh:c,loading:d,machineNames:u}=function(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState({}),o=ew.useRef(!0),l=ew.useCallback(async()=>{try{let{conversations:e,machineNames:n}=await sO();if(!o.current)return;let r=[...e].filter(e=>!e.projectId).sort((e,t)=>t.updatedAt>e.updatedAt?1:-1);t(r),i(n)}catch{}finally{o.current&&r(!1)}},[]);return ew.useEffect(()=>{o.current=!0,l();let e=setInterval(()=>void l(),1e4);return()=>{o.current=!1,clearInterval(e)}},[l]),{recents:e,refresh:()=>void l(),loading:n,machineNames:a}}(),[f,h]=ew.useState(eaA),m=ew.useMemo(()=>{let e=new Set;for(let t of s)e.add(t.ownerMachineId||sS);return Array.from(e)},[s]),p=ew.useCallback(e=>sC(e)?"本机":u[e]??e,[u]),g=ew.useMemo(()=>{let e=s.filter(e=>{let t=!0===e.running;return("running"!==f.status||!!t)&&("idle"!==f.status||!t)&&(f.location===eaI||(e.ownerMachineId||sS)===f.location)});return"name"===f.sort?e.sort((e,t)=>e.title.localeCompare(t.title,"zh-CN",{sensitivity:"base"})):e.sort((e,t)=>t.updatedAt>e.updatedAt?1:-1),e},[s,f]),x=g.filter(e=>!0===e.running),v=g.filter(e=>!0!==e.running),b=f.status!==eaA.status||f.location!==eaA.location||f.sort!==eaA.sort,y=d&&0===s.length,w=ew.useCallback(async e=>{try{await sW(e.id,e.ownerMachineId)}catch{}a?.(e.id),c()},[a,c]),j=ew.useCallback(async e=>{try{let t=await sZ(e.id,void 0,e.ownerMachineId);await c(),n(t.conversation.id,t.conversation.ownerMachineId)}catch{}},[c,n]),k=ew.useMemo(()=>new Set((o??[]).map(e=>e.id)),[o]),N=o?.[o.length-1]?.id,S=t=>{let a=new Map(t.map(e=>[e.id,e])),o=new Map,s=[];for(let e of t){let t=e.forkOriginId;if(t&&a.has(t)){let n=o.get(t)??[];n.push(e),o.set(t,n)}else s.push(e)}let c=(t,a)=>{let s=t.id!==e||(i?.length??0)===0?null:(0,eb.jsx)(eaR,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(ea$,{conversation:t,depth:a,active:t.id===e,onOpenConversation:n,onOpenConversationSettings:r,onDelete:w,onFork:j}),s?(0,eb.jsx)("div",{style:a>0?{marginLeft:14*a}:void 0,children:s}):null,(o.get(t.id)??[]).map(e=>c(e,a+1))]},t.id)};return s.map(e=>c(e,0))};return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mb-6 space-y-0.5","data-tour":"new-conversation",children:(0,eb.jsx)(eaW,{icon:tc,label:Q7.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden pr-1",children:[x.length>0?(0,eb.jsxs)("div",{className:"mb-4",children:[(0,eb.jsxs)("div",{className:"mb-2 flex items-center gap-2 px-3",children:[(0,eb.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-green-500"}),(0,eb.jsx)("span",{className:"text-[13px] text-muted-foreground",children:"正在运行"})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:S(x)})]}):null,(0,eb.jsxs)("div",{className:"mb-2 flex items-center justify-between px-3",children:[(0,eb.jsx)("span",{className:"text-[13px] text-muted-foreground",children:"最近"}),(0,eb.jsx)(ea_,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(eaK,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eaR({nodes:e,depth:t,ancestors:n,activeIds:r,activeLeafId:a,onOpen:i}){let o=e.filter(e=>(function e(t,n){return!!(t.running||n.has(t.id))||(t.children??[]).some(t=>e(t,n))})(e,r));return 0===o.length?null:(0,eb.jsx)("div",{className:"space-y-0.5",children:o.map(e=>{let o=Hl(e.subagentType),l=o.Icon,s=[...n,{id:e.id,ownerMachineId:e.ownerMachineId,name:e.subagentName,subagentType:e.subagentType}],c=e.id===a;return(0,eb.jsxs)("div",{children:[(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-xs transition-colors",c?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"),style:{paddingLeft:18+14*t},onClick:()=>i?.(s),title:e.subagentName||o.label,children:[(0,eb.jsx)("span",{className:"shrink-0 text-muted-foreground/40",children:"└"}),(0,eb.jsx)(l,{className:(0,eI.cn)("size-3.5 shrink-0",o.color)}),(0,eb.jsx)("span",{className:"truncate",children:e.subagentName||`${o.label}子代理`}),e.running?(0,eb.jsx)(eM,{className:"ml-auto size-3 shrink-0 animate-spin text-muted-foreground"}):null]}),(0,eb.jsx)(eaR,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eaD={all:"全部",running:"运行中",idle:"空闲"};function ea_({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===eaI?"全部":a(e.location);return(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,eI.cn)("relative rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",n&&"text-foreground"),children:[(0,eb.jsx)(QZ,{className:"size-4"}),n?(0,eb.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-2 rounded-full border border-sidebar bg-primary"}):null]})}),(0,eb.jsxs)(yJ,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(y1,{children:"筛选与排序"}),(0,eb.jsxs)(yZ,{children:[(0,eb.jsxs)(y4,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eaD[e.status]})]}),(0,eb.jsx)(y3,{children:(0,eb.jsxs)(yq,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(y0,{value:"all",children:"全部"}),(0,eb.jsx)(y0,{value:"running",children:"运行中"}),(0,eb.jsx)(y0,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(yZ,{children:[(0,eb.jsxs)(y4,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"运行位置"}),(0,eb.jsx)("span",{className:"max-w-24 truncate text-xs text-muted-foreground",children:i})]}),(0,eb.jsx)(y3,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(yq,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(y0,{value:eaI,children:"全部"}),r.map(e=>(0,eb.jsx)(y0,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(y2,{}),(0,eb.jsx)(y1,{children:"排序"}),(0,eb.jsxs)(yq,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(y0,{value:"recent",children:"最近活动"}),(0,eb.jsx)(y0,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y2,{}),(0,eb.jsx)(yQ,{onSelect:()=>t(eaA),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eaL({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,eI.cn)("relative inline-flex shrink-0 select-none items-center justify-center rounded px-1 py-px text-[9px] font-semibold leading-none tracking-wide",t?"bg-violet-500/15 text-violet-600 dark:bg-violet-400/20 dark:text-violet-300":"bg-sky-500/15 text-sky-600 dark:bg-sky-400/20 dark:text-sky-300"),children:[t?"CC":"RC",!t&&(0,eb.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-1.5 rounded-full bg-sky-400 dark:bg-sky-300"})]})}function ea$({conversation:e,active:t,depth:n=0,onOpenConversation:r,onOpenConversationSettings:a,onDelete:i,onFork:o}){let l=!0===e.running,s=e.settings?.engine??"vantaloom",c="vantaloom"!==s?(0,eb.jsxs)("span",{className:"flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden",children:[(0,eb.jsx)(eaL,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eaF,{title:l?`${e.title} \xb7 运行中`:e.title,label:e.title,labelNode:c,active:t,running:l,depth:n,onOpen:()=>r(e.id,e.ownerMachineId),onOpenSettings:a?()=>a(e.id,e.ownerMachineId):void 0,onDelete:i?()=>i(e):void 0,onFork:o?()=>o(e):void 0,deleteLabel:"删除会话"})}function eaF({title:e,label:t,labelNode:n,active:r,running:a,depth:i=0,onOpen:o,onOpenSettings:l,onDelete:s,onFork:c,deleteLabel:d="删除"}){let[u,f]=ew.useState(!1),h=!!(l||s||c),m=i>0,p=(0,eb.jsxs)(eb.Fragment,{children:[l?(0,eb.jsxs)(yO,{onSelect:()=>l(),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yO,{onSelect:()=>c(),children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yO,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bo,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,eI.cn)("group relative flex items-center rounded-lg text-[13px] transition-colors",r?"bg-muted text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground"),style:m?{marginLeft:14*i}:void 0,children:[(0,eb.jsxs)("button",{type:"button",title:e,onClick:o,className:"flex min-w-0 flex-1 items-center gap-3 rounded-lg px-3 py-2 text-left",children:[m?(0,eb.jsx)("span",{"aria-hidden":!0,className:"h-4 w-0.5 shrink-0 rounded-full bg-primary/40"}):null,a?(0,eb.jsx)("span",{className:"size-1.5 shrink-0 animate-pulse rounded-full bg-green-500","aria-label":"运行中"}):(0,eb.jsx)(eaG,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)("button",{type:"button","aria-label":"更多操作",className:"mr-1 shrink-0 rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-background/70 hover:text-foreground focus-visible:opacity-100 group-hover:opacity-100 aria-expanded:opacity-100",children:(0,eb.jsx)(lY,{className:"size-4"})})}),(0,eb.jsxs)(yJ,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(yQ,{onSelect:()=>l(),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yQ,{onSelect:()=>c(),children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yQ,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bo,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yv,{children:[(0,eb.jsx)(yy,{asChild:!0,children:g}),(0,eb.jsx)(yE,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(d4,{open:u,onOpenChange:f,children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:d}),(0,eb.jsxs)(ug,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eaB({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(wT,{className:"min-h-0 flex-1",viewportClassName:"pr-1",children:(0,eb.jsx)("div",{className:"space-y-0.5",children:r.map(e=>"preferences"===e.id?(0,eb.jsx)(eaU,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eaV,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eaV({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",r?"bg-muted text-foreground [&_svg]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&_svg]:text-muted-foreground"),children:[t,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:n}),r&&(0,eb.jsx)(eaG,{active:!0})]})}let eaH=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uN,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(mZ,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uy,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eaf,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uN,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eec,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eac,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(j_,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(eas,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eai,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(Uh,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(GD,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(QG,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(QG,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(v2,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bi,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eah,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jk,{})}]}];function eaU({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eaH.map(n=>(0,eb.jsx)(eaq,{title:n.title,icon:n.icon,items:n.items,activeWorkspace:e,onItemSelect:t},n.id))})}function eaq({title:e,icon:t,items:n,activeWorkspace:r,onItemSelect:a}){let i=n.some(e=>e.id===r),[o,l]=ew.useState(!0);return(0,eb.jsxs)(eab,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaw,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",i?"text-foreground [&>svg:first-child]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&>svg:first-child]:text-muted-foreground"),children:[t,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e}),(0,eb.jsx)(xf,{className:(0,eI.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eak,{className:"mt-0.5 space-y-0.5",children:n.map(e=>{let t=e.id===r;return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e.id}}),className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg py-2 pl-9 pr-3 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",t?"bg-muted text-foreground [&_svg]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&_svg]:text-muted-foreground"),children:[e.icon,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label}),t&&(0,eb.jsx)(eaG,{active:!0})]},e.id)})})]})}function eaW({icon:e,label:t,onClick:n}){return(0,eb.jsxs)("button",{type:"button",onClick:n,className:"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm text-foreground transition-colors hover:bg-muted",children:[(0,eb.jsx)(e,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]})}function eaK(){return(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 px-3 py-3 text-[13px] text-muted-foreground/70",role:"status","aria-live":"polite",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),(0,eb.jsx)("span",{children:"加载中…"})]})}function eaG({active:e}){return(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function eaX({onItemSelect:e,onAccountSettings:t}){let{user:n}=tl(),r=n?.name??Q8.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button","data-tour":"account-button",className:"flex w-full items-center justify-between rounded-xl p-2 transition-colors hover:bg-muted",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:"flex size-6 shrink-0 items-center justify-center rounded-full border border-border/60 bg-muted text-[10px] font-semibold text-foreground",children:a}),(0,eb.jsx)("span",{className:"truncate text-sm text-foreground",children:r})]}),(0,eb.jsx)(m0,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(yJ,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(y1,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(yQ,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(yQ,{disabled:!0,children:[(0,eb.jsx)(eaa,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(yQ,{disabled:!0,children:[(0,eb.jsx)(H7,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Ge,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(eaZ,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y2,{}),(0,eb.jsx)(eaJ,{})]})]})]})})}let eaY=["light","dark","jelly"];function eaZ(){let{resolvedTheme:e,setTheme:t}=(0,hO.useTheme)(),[n,r]=ew.useState(eaC.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaC.appearanceThemeStorageKey)??eaC.defaultAppearanceTheme;r(e),(0,eaC.applyAppearanceTheme)({theme:e})},[]);let a=n===eaC.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=eaY[(eaY.indexOf(a)+1)%eaY.length]??"light";function o(e){r(e),window.localStorage.setItem(eaC.appearanceThemeStorageKey,e),(0,eaC.applyAppearanceTheme)({theme:e})}let l="dark"===a?eal:eau;return(0,eb.jsxs)(yQ,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(eaC.jellyAppearanceTheme);return}o(eaC.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:Q8.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function eaJ(){let{logout:e}=tl();return(0,eb.jsxs)(yQ,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eao,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let eaQ=ew.default.createContext({drawerRef:{current:null},overlayRef:{current:null},onPress:()=>{},onRelease:()=>{},onDrag:()=>{},onNestedDrag:()=>{},onNestedOpenChange:()=>{},onNestedRelease:()=>{},openProp:void 0,dismissible:!1,isOpen:!1,isDragging:!1,keyboardIsOpen:{current:!1},snapPointsOffset:null,snapPoints:null,handleOnly:!1,modal:!1,shouldFade:!1,activeSnapPoint:null,onOpenChange:()=>{},setActiveSnapPoint:()=>{},closeDrawer:()=>{},direction:"bottom",shouldAnimate:{current:!0},shouldScaleBackground:!1,setBackgroundColorOnScale:!0,noBodyStyles:!1,container:null,autoFocus:!1}),ea0=()=>{let e=ew.default.useContext(eaQ);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function ea1(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ea2(){return ea5(/^iPhone/)||ea5(/^iPad/)||ea5(/^Mac/)&&navigator.maxTouchPoints>1}function ea5(e){return"u">typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}!function(e){if(!e||"u"<typeof document)return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}("[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\n[data-state=closed]\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}");let ea4="u">typeof window?ew.useLayoutEffect:ew.useEffect;function ea3(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let ea6="u">typeof document&&window.visualViewport;function ea8(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function ea7(e){for(ea8(e)&&(e=e.parentElement);e&&!ea8(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let ea9=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eie=0;function eit(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function ein(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=ea7(e);if(t!==document.documentElement&&t!==document.body&&t!==e){let n=t.getBoundingClientRect().top,r=e.getBoundingClientRect().top;e.getBoundingClientRect().bottom>t.getBoundingClientRect().bottom+24&&(t.scrollTop+=r-n)}e=t.parentElement}}function eir(e){return e instanceof HTMLInputElement&&!ea9.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eia(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eii=new WeakMap;function eio(e,t,n=!1){if(!e||!(e instanceof HTMLElement))return;let r={};Object.entries(t).forEach(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):(r[t]=e.style[t],e.style[t]=n)}),n||eii.set(e,r)}let eil=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function eis(e,t){if(!e)return null;let n=window.getComputedStyle(e),r=n.transform||n.webkitTransform||n.mozTransform,a=r.match(/^matrix3d\((.+)\)$/);return a?parseFloat(a[1].split(", ")[eil(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eil(t)?5:4]):null}function eic(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let eid=[.32,.72,0,1],eiu="vaul-dragging";function eif(e){let t=ew.default.useRef(e);return ew.default.useEffect(()=>{t.current=e}),ew.default.useMemo(()=>(...e)=>null==t.current?void 0:t.current.call(t,...e),[])}function eih({prop:e,defaultProp:t,onChange:n=()=>{}}){let[r,a]=function({defaultProp:e,onChange:t}){let n=ew.default.useState(e),[r]=n,a=ew.default.useRef(r),i=eif(t);return ew.default.useEffect(()=>{a.current!==r&&(i(r),a.current=r)},[r,a,i]),n}({defaultProp:t,onChange:n}),i=void 0!==e,o=i?e:r,l=eif(n);return[o,ew.default.useCallback(t=>{if(i){let n="function"==typeof t?t(e):t;n!==e&&l(n)}else a(t)},[i,e,a,l])]}let eim=()=>()=>{},eip=null,eig=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=ea0(),c=eia(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dT,{onMouseUp:u,ref:c,"data-vaul-overlay":"","data-vaul-snap-points":o&&d?"true":"false","data-vaul-snap-points-overlay":o&&i?"true":"false","data-vaul-animate":(null==s?void 0:s.current)?"true":"false",...e})});eig.displayName="Drawer.Overlay";let eix=ew.default.forwardRef(function({onPointerDownOutside:e,style:t,onOpenAutoFocus:n,...r},a){let{drawerRef:i,onPress:o,onRelease:l,onDrag:s,keyboardIsOpen:c,snapPointsOffset:d,activeSnapPointIndex:u,modal:f,isOpen:h,direction:m,snapPoints:p,container:g,handleOnly:x,shouldAnimate:v,autoFocus:b}=ea0(),[y,w]=ew.default.useState(!1),j=eia(a,i),k=ew.default.useRef(null),N=ew.default.useRef(null),S=ew.default.useRef(!1),C=p&&p.length>0;function M(e){k.current=null,S.current=!1,l(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:r,noBodyStyles:a}=ea0(),i=ew.default.useRef(null),o=(0,ew.useMemo)(()=>document.body.style.backgroundColor,[]);function l(){return(window.innerWidth-26)/window.innerWidth}ew.default.useEffect(()=>{if(t&&n){i.current&&clearTimeout(i.current);let t=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");if(!t)return;!function(...e){}(r&&!a?eic(document.body,{background:"black"}):eim,eic(t,{transformOrigin:eil(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eid.join(",")})`}));let n=eic(t,{borderRadius:"8px",overflow:"hidden",...eil(e)?{transform:`scale(${l()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`}:{transform:`scale(${l()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`}});return()=>{n(),i.current=window.setTimeout(()=>{o?document.body.style.background=o:document.body.style.removeProperty("background")},500)}}},[t,n,o])}(),ew.default.useEffect(()=>{C&&window.requestAnimationFrame(()=>{w(!0)})},[]),ew.default.createElement(dL,{"data-vaul-drawer-direction":m,"data-vaul-drawer":"","data-vaul-delayed-snap-points":y?"true":"false","data-vaul-snap-points":h&&C?"true":"false","data-vaul-custom-container":g?"true":"false","data-vaul-animate":(null==v?void 0:v.current)?"true":"false",...r,ref:j,style:d&&d.length>0?{"--snap-point-height":`${d[null!=u?u:0]}px`,...t}:t,onPointerDown:e=>{x||(null==r.onPointerDown||r.onPointerDown.call(r,e),k.current={x:e.pageX,y:e.pageY},o(e))},onOpenAutoFocus:e=>{null==n||n(e),b||e.preventDefault()},onPointerDownOutside:t=>{(null==e||e(t),!f||t.defaultPrevented)?t.preventDefault():c.current&&(c.current=!1)},onFocusOutside:e=>{if(!f)return void e.preventDefault()},onPointerMove:e=>{if(N.current=e,x||(null==r.onPointerMove||r.onPointerMove.call(r,e),!k.current))return;let t=e.pageY-k.current.y,n=e.pageX-k.current.x,a="touch"===e.pointerType?10:2;((e,t,n=0)=>{if(S.current)return!0;let r=Math.abs(e.y),a=Math.abs(e.x),i=a>r,o=["bottom","right"].includes(t)?1:-1;if("left"===t||"right"===t){if(!(e.x*o<0)&&a>=0&&a<=n)return i}else if(!(e.y*o<0)&&r>=0&&r<=n)return!i;return S.current=!0,!0})({x:n,y:t},m,a)?s(e):(Math.abs(n)>a||Math.abs(t)>a)&&(k.current=null)},onPointerUp:e=>{null==r.onPointerUp||r.onPointerUp.call(r,e),k.current=null,S.current=!1,l(e)},onPointerOut:e=>{null==r.onPointerOut||r.onPointerOut.call(r,e),M(N.current)},onContextMenu:e=>{null==r.onContextMenu||r.onContextMenu.call(r,e),N.current&&M(N.current)}})});eix.displayName="Drawer.Content",ew.default.forwardRef(function({preventCycle:e=!1,children:t,...n},r){let{closeDrawer:a,isDragging:i,snapPoints:o,activeSnapPoint:l,setActiveSnapPoint:s,dismissible:c,handleOnly:d,isOpen:u,onPress:f,onDrag:h}=ea0(),m=ew.default.useRef(null),p=ew.default.useRef(!1);function g(){m.current&&window.clearTimeout(m.current),p.current=!1}return ew.default.createElement("div",{onClick:function(){p.current?g():window.setTimeout(()=>{!function(){if(i||e||p.current)return g();if(g(),!o||0===o.length){c||a();return}if(l===o[o.length-1]&&c)return a();let t=o.findIndex(e=>e===l);-1===t||s(o[t+1])}()},120)},onPointerCancel:g,onPointerDown:e=>{d&&f(e),m.current=window.setTimeout(()=>{p.current=!0},250)},onPointerMove:e=>{d&&h(e)},ref:r,"data-vaul-drawer-visible":u?"true":"false","data-vaul-handle":"","aria-hidden":"true",...n},ew.default.createElement("span",{"data-vaul-handle-hitarea":"","aria-hidden":"true"},t))}).displayName="Drawer.Handle";let eiv=function({open:e,onOpenChange:t,children:n,onDrag:r,onRelease:a,snapPoints:i,shouldScaleBackground:l=!1,setBackgroundColorOnScale:s=!0,closeThreshold:c=.25,scrollLockTimeout:d=100,dismissible:u=!0,handleOnly:f=!1,fadeFromIndex:h=i&&i.length-1,activeSnapPoint:m,setActiveSnapPoint:p,fixed:g,modal:x=!0,onClose:v,nested:b,noBodyStyles:y=!1,direction:w="bottom",defaultOpen:j=!1,disablePreventScroll:k=!0,snapToSequentialPoint:N=!1,preventScrollRestoration:S=!1,repositionInputs:C=!0,onAnimationEnd:M,container:E,autoFocus:O=!1}){var P,z;let[I=!1,A]=eih({defaultProp:j,prop:e,onChange:e=>{null==t||t(e),e||b||ed(),setTimeout(()=>{null==M||M(e)},500),e&&!x&&"u">typeof window&&window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"}),e||(document.body.style.pointerEvents="auto")}}),[T,R]=ew.default.useState(!1),[D,_]=ew.default.useState(!1),[L,$]=ew.default.useState(!1),F=ew.default.useRef(null),B=ew.default.useRef(null),V=ew.default.useRef(null),H=ew.default.useRef(null),U=ew.default.useRef(null),q=ew.default.useRef(!1),W=ew.default.useRef(null),K=ew.default.useRef(0),G=ew.default.useRef(!1),X=ew.default.useRef(!j),Y=ew.default.useRef(0),Z=ew.default.useRef(null),J=ew.default.useRef((null==(P=Z.current)?void 0:P.getBoundingClientRect().height)||0),Q=ew.default.useRef((null==(z=Z.current)?void 0:z.getBoundingClientRect().width)||0),ee=ew.default.useRef(0),et=ew.default.useCallback(e=>{i&&e===eo.length-1&&(B.current=new Date)},[]),{activeSnapPoint:en,activeSnapPointIndex:er,setActiveSnapPoint:ea,onRelease:ei,snapPointsOffset:eo,onDrag:el,shouldFade:es,getPercentageDragged:ec}=function({activeSnapPointProp:e,setActiveSnapPointProp:t,snapPoints:n,drawerRef:r,overlayRef:a,fadeFromIndex:i,onSnapPointChange:o,direction:l="bottom",container:s,snapToSequentialPoint:c}){let[d,u]=eih({prop:e,defaultProp:null==n?void 0:n[0],onChange:t}),[f,h]=ew.default.useState("u">typeof window?{innerWidth:window.innerWidth,innerHeight:window.innerHeight}:void 0);ew.default.useEffect(()=>{function e(){h({innerWidth:window.innerWidth,innerHeight:window.innerHeight})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let m=ew.default.useMemo(()=>d===(null==n?void 0:n[n.length-1])||null,[n,d]),p=ew.default.useMemo(()=>{var e;return null!=(e=null==n?void 0:n.findIndex(e=>e===d))?e:null},[n,d]),g=n&&n.length>0&&(i||0===i)&&!Number.isNaN(i)&&n[i]===d||!n,x=ew.default.useMemo(()=>{var e;let t=s?{width:s.getBoundingClientRect().width,height:s.getBoundingClientRect().height}:"u">typeof window?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0};return null!=(e=null==n?void 0:n.map(e=>{let n="string"==typeof e,r=0;if(n&&(r=parseInt(e,10)),eil(l)){let a=n?r:f?e*t.height:0;return f?"bottom"===l?t.height-a:-t.height+a:a}let a=n?r:f?e*t.width:0;return f?"right"===l?t.width-a:-t.width+a:a}))?e:[]},[n,f,s]),v=ew.default.useMemo(()=>null!==p?null==x?void 0:x[p]:null,[x,p]),b=ew.default.useCallback(e=>{var t;let s=null!=(t=null==x?void 0:x.findIndex(t=>t===e))?t:null;o(s),eio(r.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"0"}):eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"1"}),u(null==n?void 0:n[Math.max(s,0)])},[r.current,n,x,i,a,u]);return ew.default.useEffect(()=>{if(d||e){var t;let r=null!=(t=null==n?void 0:n.findIndex(t=>t===e||t===d))?t:-1;x&&-1!==r&&"number"==typeof x[r]&&b(x[r])}},[d,e,n,x,b]),{isLastSnapPoint:m,activeSnapPoint:d,shouldFade:g,getPercentageDragged:function(e,t){if(!n||"number"!=typeof p||!x||void 0===i)return null;let r=p===i-1;if(p>=i&&t)return 0;if(r&&!t)return 1;if(!g&&!r)return null;let a=r?p+1:p-1,o=e/Math.abs(r?x[a]-x[a-1]:x[a+1]-x[a]);return r?1-o:o},setActiveSnapPoint:u,activeSnapPointIndex:p,onRelease:function({draggedDistance:e,closeDrawer:t,velocity:r,dismissible:o}){if(void 0===i)return;let s="bottom"===l||"right"===l?(null!=v?v:0)-e:(null!=v?v:0)+e,d=p===i-1,u=0===p,f=e>0;if(d&&eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`}),!c&&r>2&&!f)return void(o?t():b(x[0]));if(!c&&r>2&&f&&x&&n)return void b(x[n.length-1]);let h=null==x?void 0:x.reduce((e,t)=>"number"!=typeof e||"number"!=typeof t?e:Math.abs(t-s)<Math.abs(e-s)?t:e),g=eil(l)?window.innerHeight:window.innerWidth;if(r>.4&&Math.abs(e)<.4*g){let e=f?1:-1;return e>0&&m&&n?void b(x[n.length-1]):void(u&&e<0&&o&&t(),null===p||b(x[p+e]))}b(h)},onDrag:function({draggedDistance:e}){if(null===v)return;let t="bottom"===l||"right"===l?v-e:v+e;("bottom"===l||"right"===l)&&t<x[x.length-1]||("top"===l||"left"===l)&&t>x[x.length-1]||eio(r.current,{transform:eil(l)?`translate3d(0, ${t}px, 0)`:`translate3d(${t}px, 0, 0)`})},snapPointsOffset:x}}({snapPoints:i,activeSnapPointProp:m,setActiveSnapPointProp:p,drawerRef:Z,fadeFromIndex:h,overlayRef:F,onSnapPointChange:et,direction:w,container:E,snapToSequentialPoint:N});!function(e={}){let{isDisabled:t}=e;ea4(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eie&&ea2()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=ea3((e=document.documentElement,n="paddingRight",r=`${window.innerWidth-document.documentElement.clientWidth}px`,t=e.style[n],e.style[n]=r,()=>{e.style[n]=t})),window.scrollTo(0,0),d=ea3(eit(document,"touchstart",e=>{((a=ea7(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eit(document,"touchmove",e=>{if(!a||a===document.documentElement||a===document.body)return void e.preventDefault();let t=e.changedTouches[0].pageY,n=a.scrollTop,r=a.scrollHeight-a.clientHeight;0!==r&&((n<=0&&t>i||n>=r&&t<i)&&e.preventDefault(),i=t)},{passive:!1,capture:!0}),eit(document,"touchend",e=>{let t=e.target;eir(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eit(document,"focus",e=>{let t=e.target;eir(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",ea6&&(ea6.height<window.innerHeight?requestAnimationFrame(()=>{ein(t)}):ea6.addEventListener("resize",()=>ein(t),{once:!0}))}))},!0),eit(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eie&&(null==o||o())}}},[t])}({isDisabled:!I||D||!x||L||!T||!C||!k});let{restorePositionSetting:ed}=function({isOpen:e,modal:t,nested:n,hasBeenOpened:r,preventScrollRestoration:a,noBodyStyles:i}){let[o,l]=ew.default.useState(()=>"u">typeof window?window.location.href:""),s=ew.default.useRef(0),c=ew.default.useCallback(()=>{if(ea1()&&null===eip&&e&&!i){eip={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,height:document.body.style.height,right:"unset"};let{scrollX:e,innerHeight:t}=window;document.body.style.setProperty("position","fixed","important"),Object.assign(document.body.style,{top:`${-s.current}px`,left:`${-e}px`,right:"0px",height:"auto"}),window.setTimeout(()=>window.requestAnimationFrame(()=>{let e=t-window.innerHeight;e&&s.current>=t&&(document.body.style.top=`${-(s.current+e)}px`)}),300)}},[e]),d=ew.default.useCallback(()=>{if(ea1()&&null!==eip&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eip),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eip=null}},[o]);return ew.default.useEffect(()=>{function e(){s.current=window.scrollY}return e(),window.addEventListener("scroll",e),()=>{window.removeEventListener("scroll",e)}},[]),ew.default.useEffect(()=>{if(t)return()=>{"u"<typeof document||document.querySelector("[data-vaul-drawer]")||d()}},[t,d]),ew.default.useEffect(()=>{!n&&r&&(e?(window.matchMedia("(display-mode: standalone)").matches||c(),t||window.setTimeout(()=>{d()},500)):d())},[e,r,o,t,n,c,d]),{restorePositionSetting:d}}({isOpen:I,modal:x,nested:null!=b&&b,hasBeenOpened:T,preventScrollRestoration:S,noBodyStyles:y});function eu(){return(window.innerWidth-26)/window.innerWidth}function ef(e,t){var n;let r=e,a=null==(n=window.getSelection())?void 0:n.toString(),i=Z.current?eis(Z.current,w):null,o=new Date;if("SELECT"===r.tagName||r.hasAttribute("data-vaul-no-drag")||r.closest("[data-vaul-no-drag]"))return!1;if("right"===w||"left"===w)return!0;if(B.current&&o.getTime()-B.current.getTime()<500)return!1;if(null!==i&&("bottom"===w?i>0:i<0))return!0;if(a&&a.length>0)return!1;if(U.current&&o.getTime()-U.current.getTime()<d&&0===i||t)return U.current=o,!1;for(;r;){if(r.scrollHeight>r.clientHeight){if(0!==r.scrollTop)return U.current=new Date,!1;if("dialog"===r.getAttribute("role"))break}r=r.parentNode}return!0}function eh(e){D&&Z.current&&(Z.current.classList.remove(eiu),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||A(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=eis(Z.current,w);eio(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${eid.join(",")})`}),eio(F.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"1"}),l&&t&&t>0&&I&&eio(e,{borderRadius:"8px",overflow:"hidden",...eil(w)?{transform:`scale(${eu()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,transformOrigin:"top"}:{transform:`scale(${eu()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,transformOrigin:"left"},transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eid.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eir(document.activeElement)||G.current)){var e;let t=(null==(e=window.visualViewport)?void 0:e.height)||0,n=window.innerHeight,r=n-t,a=Z.current.getBoundingClientRect().height||0;ee.current||(ee.current=a);let o=Z.current.getBoundingClientRect().top;if(Math.abs(Y.current-r)>60&&(G.current=!G.current),i&&i.length>0&&eo&&er&&(r+=eo[er]||0),Y.current=r,a>t||G.current){let e=Z.current.getBoundingClientRect().height,i=e;e>t&&(i=t-(a>.8*n?o:26)),g?Z.current.style.height=`${e-Math.max(r,0)}px`:Z.current.style.height=`${Math.max(i,t-o)}px`}else{let e;e=navigator.userAgent,"u">typeof window&&(/Firefox/.test(e)&&/Mobile/.test(e)||/FxiOS/.test(e))||(Z.current.style.height=`${ee.current}px`)}i&&i.length>0&&!G.current?Z.current.style.bottom="0px":Z.current.style.bottom=`${Math.max(r,0)}px`}}return null==(e=window.visualViewport)||e.addEventListener("resize",t),()=>{var e;return null==(e=window.visualViewport)?void 0:e.removeEventListener("resize",t)}},[er,i,eo]),ew.default.useEffect(()=>(I&&(eio(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eii.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[I]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dC,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),A(e))},open:I},ew.default.createElement(eaQ.Provider,{value:{activeSnapPoint:en,snapPoints:i,setActiveSnapPoint:ea,drawerRef:Z,overlayRef:F,onOpenChange:t,onPress:function(e){var t,n;!u&&!i||(!Z.current||Z.current.contains(e.target))&&(J.current=(null==(t=Z.current)?void 0:t.getBoundingClientRect().height)||0,Q.current=(null==(n=Z.current)?void 0:n.getBoundingClientRect().width)||0,_(!0),V.current=new Date,ea2()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eil(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eiu),q.current=!1,_(!1),H.current=new Date;let r=eis(Z.current,w);if(!e||!ef(e.target,!1)||!r||Number.isNaN(r)||null===V.current)return;let o=H.current.getTime()-V.current.getTime(),l=K.current-(eil(w)?e.pageY:e.pageX),s=Math.abs(l)/o;if(s>.05&&($(!0),setTimeout(()=>{$(!1)},200)),i){ei({draggedDistance:l*("bottom"===w||"right"===w?1:-1),closeDrawer:eh,velocity:s,dismissible:u}),null==a||a(e,!0);return}if("bottom"===w||"right"===w?l>0:l<0){em(),null==a||a(e,!0);return}if(s>.4){eh(),null==a||a(e,!1);return}let d=Math.min(null!=(t=Z.current.getBoundingClientRect().height)?t:0,window.innerHeight),f=Math.min(null!=(n=Z.current.getBoundingClientRect().width)?n:0,window.innerWidth);if(Math.abs(r)>=("left"===w||"right"===w?f:d)*c){eh(),null==a||a(e,!1);return}null==a||a(e,!0),em()},onDrag:function(e){if(Z.current&&D){let t="bottom"===w||"right"===w?1:-1,n=(K.current-(eil(w)?e.pageY:e.pageX))*t,a=n>0,o=i&&!u&&!a;if(o&&0===er)return;let s=Math.abs(n),c=document.querySelector("[data-vaul-drawer-wrapper]"),d=s/("bottom"===w||"top"===w?J.current:Q.current),f=ec(s,a);if(null!==f&&(d=f),o&&d>=1||!q.current&&!ef(e.target,a))return;if(Z.current.classList.add(eiu),q.current=!0,eio(Z.current,{transition:"none"}),eio(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eio(Z.current,{transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`});return}let m=1-d;if((es||h&&er===h-1)&&(null==r||r(e,d),eio(F.current,{opacity:`${m}`,transition:"none"},!0)),c&&F.current&&l){let e=Math.min(eu()+d*(1-eu()),1),t=8-8*d,n=Math.max(0,14-14*d);eio(c,{borderRadius:`${t}px`,transform:eil(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eio(Z.current,{transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:I,isDragging:D,shouldFade:es,closeDrawer:eh,onNestedDrag:function(e,t){if(t<0)return;let n=(window.innerWidth-16)/window.innerWidth,r=n+t*(1-n),a=-16+16*t;eio(Z.current,{transform:eil(w)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`,transition:"none"})},onNestedOpenChange:function(e){let t=e?(window.innerWidth-16)/window.innerWidth:1,n=e?-16:0;W.current&&window.clearTimeout(W.current),eio(Z.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=eis(Z.current,w);eio(Z.current,{transition:"none",transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eil(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eio(Z.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(w)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`})},keyboardIsOpen:G,modal:x,snapPointsOffset:eo,activeSnapPointIndex:er,direction:w,shouldScaleBackground:l,setBackgroundColorOnScale:s,noBodyStyles:y,container:E,autoFocus:O}},n))},eib=function(e){let t=ea0(),{container:n=t.container,...r}=e;return ew.default.createElement(dI,{container:n,...r})};function eiy({className:e,...t}){return(0,eb.jsx)(eig,{"data-slot":"drawer-overlay",className:(0,eI.cn)("vtl-overlay fixed inset-0 z-50 animate-in fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0",e),...t})}function eiw({className:e,children:t,...n}){return(0,eb.jsxs)(eib,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiy,{}),(0,eb.jsxs)(eix,{"data-slot":"drawer-content",className:(0,eI.cn)("vtl-surface-modal group/drawer-content fixed z-50 flex h-auto flex-col border outline-none","data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-t-0","data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-b-0","data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-r-0 data-[vaul-drawer-direction=right]:sm:max-w-sm","data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-l-0 data-[vaul-drawer-direction=left]:sm:max-w-sm",e),...n,children:[(0,eb.jsx)("div",{className:"mx-auto mt-3 hidden h-1.5 w-16 shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block"}),t]})]})}function eij({className:e,...t}){return(0,eb.jsx)(dH,{"data-slot":"drawer-title",className:(0,eI.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eik({navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:i,onOpenConversation:o,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversationSettings:m,onConversationDeleted:p,onAccountSettings:g,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b,title:y,trailing:w}){let[j,k]=ew.useState(!1),N=ew.useCallback(()=>k(!1),[]),S=ew.useCallback(e=>{N(),i(e)},[N,i]),C=ew.useCallback((e,t)=>{N(),o(e,t)},[N,o]),M=ew.useCallback(e=>{N(),b?.(e)},[N,b]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eiN,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiv,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiw,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eij,{className:"sr-only",children:"导航"}),(0,eb.jsx)(eaE,{hideCanvas:!0,navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:S,onOpenConversation:C,onOpenCanvas:()=>{},onOpenProjectCanvas:(e,t)=>{N(),l?.(e,t)},onOpenProjectOverview:e=>{N(),s?.(e)},onOpenProjectKanban:e=>{N(),c?.(e)},onOpenProjectSettings:e=>{N(),d?.(e)},onNewProjectConversation:e=>{N(),u?.(e)},onOpenProjectConversation:(e,t,n)=>{N(),f?.(e,t,n)},onNewProject:()=>{N(),h?.()},onOpenConversationSettings:(e,t)=>{N(),m?.(e,t)},onConversationDeleted:p,onAccountSettings:()=>{N(),g?.()},subagentTree:x,activeSubagentPath:v,onOpenSubagent:M,className:"h-full w-full rounded-none border-0 p-3 pt-[max(0.75rem,env(safe-area-inset-top))] shadow-none"})]})})]})}function eiN({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,eI.cn)("fixed inset-x-0 top-0 z-40 flex h-12 items-center gap-1 border-b border-border bg-sidebar/95 px-1.5 pt-[env(safe-area-inset-top)] backdrop-blur",r),style:{height:"calc(3rem + env(safe-area-inset-top))"},children:[(0,eb.jsx)("button",{type:"button","aria-label":"展开导航",onClick:e,className:"flex size-9 shrink-0 items-center justify-center rounded-lg text-foreground/80 transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-5",children:(0,eb.jsx)(s8,{})}),t?(0,eb.jsx)("div",{className:"min-w-0 flex-1 truncate text-center text-sm font-medium text-foreground",children:t}):(0,eb.jsx)("div",{className:"min-w-0 flex-1"}),(0,eb.jsx)("div",{className:"flex shrink-0 items-center",children:n})]})}let eiS=(0,ek.default)("message-square-text",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M7 11h10",key:"1twpyw"}],["path",{d:"M7 15h6",key:"d9of3u"}],["path",{d:"M7 7h8",key:"af5zfr"}]]),eiC=[{id:"canvas",label:Q7.canvas,icon:(0,eb.jsx)(uw,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uy,{})},{id:"settings",label:Q7.settings,icon:(0,eb.jsx)(eec,{})}],eiM=[{id:"canvas",title:Q7.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:Q7.canvas,items:[{id:"open-recent-canvas",label:Q7.canvasRecent,icon:(0,eb.jsx)(uw,{})},{id:"new-canvas",label:Q7.canvasNew,icon:(0,eb.jsx)(lJ,{})},{id:"all-canvases",label:Q7.canvasAll,icon:(0,eb.jsx)(uS,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:Q7.conversationRecent,icon:(0,eb.jsx)(eiS,{})},{id:"new-agent-conversation",label:Q7.conversationNew,icon:(0,eb.jsx)(uy,{})}]}]},{id:"settings",title:Q7.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eec,{})}]}]}],eiE=(0,ek.default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),eiO=(0,ek.default)("unplug",[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]]),eiP=(0,ek.default)("wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]),eiz=(0,ek.default)("wifi-off",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);function eiI(){let{user:e,machine:t,logout:n,unbind:r,refreshUser:a}=tl(),[i,o]=ew.useState(!1),[l,s]=ew.useState(!1),[c,d]=ew.useState(t),[u,f]=ew.useState(!1),[h,m]=ew.useState(""),[p,g]=ew.useState(!1),[x,v]=ew.useState(null);async function b(){o(!0);try{await eJ("online");let e=eq();d(e),await a()}catch{}finally{o(!1)}}async function y(){let e=h.trim();if(!e)return void v("名称不能为空");g(!0),v(null);try{let t=await e0(e);d(e=>e?{...e,name:t}:e),f(!1)}catch(e){v(e instanceof Error?e.message:"重命名失败")}finally{g(!1)}}async function w(){s(!0);try{await r()}catch{s(!1)}}async function j(){await n()}return ew.useEffect(()=>{d(t)},[t]),e?(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)("div",{className:"flex items-center justify-between gap-3","data-tour":"hub-account",children:(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"Vantaloom Hub 账户"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"管理你的 Hub 连接和设备绑定"})]})}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户信息"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"你的 Vantaloom Hub 账户详情。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,eb.jsx)("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary/10",children:(0,eb.jsx)("span",{className:"text-base font-semibold text-primary",children:e.name.charAt(0).toUpperCase()})}),(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:e.email})]})]}),(0,eb.jsxs)(Bu,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(jD,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"用户 ID"}),(0,eb.jsxs)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:[e.id.slice(0,8),"..."]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"注册时间"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(e.createdAt).toLocaleDateString("zh-CN")})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"设备绑定"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"此设备已自动注册到你的 Hub 账户。"})]}),c?(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:b,disabled:i,children:[i?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bi,{}),i?"刷新中...":"刷新状态"]}):null]}),c?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[u?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(eA,{value:h,onChange:e=>m(e.target.value),maxLength:64,autoFocus:!0,placeholder:"机器名称",className:"h-8 text-sm",onKeyDown:e=>{"Enter"===e.key&&y(),"Escape"===e.key&&f(!1)}}),(0,eb.jsx)(ez.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>void y(),disabled:p,"aria-label":"保存名称",children:p?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(mJ,{})}),(0,eb.jsx)(ez.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>f(!1),disabled:p,"aria-label":"取消",children:(0,eb.jsx)(fg.XIcon,{})})]}):(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:c.name}),(0,eb.jsx)("button",{type:"button",onClick:function(){m(c?.name??""),v(null),f(!0)},title:"重命名",className:"shrink-0 rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:(0,eb.jsx)(HA,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bu,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(eiP,{className:"size-3"}):(0,eb.jsx)(eiz,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"设备 ID"}),(0,eb.jsxs)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:[c.id.slice(0,8),"..."]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"连接方式"}),(0,eb.jsx)("span",{className:"text-sm",children:c.connectivity||"直连"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"本机 IP"}),(0,eb.jsx)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:c.localIp})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"最后心跳"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(c.lastHeartbeat).toLocaleString("zh-CN")})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"注册时间"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(c.createdAt).toLocaleString("zh-CN")})]})]}):(0,eb.jsxs)("div",{className:"flex flex-col items-center gap-3 py-6 text-center",children:[(0,eb.jsx)(eiz,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsxs)("div",{children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"设备未绑定"}),(0,eb.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"设备注册异常,请尝试重新登录"})]})]})]}),(0,eb.jsx)(eiA,{}),(0,eb.jsx)(eiT,{}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"hub-account-danger",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold text-destructive",children:"危险操作"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"以下操作不可逆,请谨慎执行。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"解除设备绑定"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"将此设备从你的 Hub 账户中移除,并退出登录。设备数据不会受到影响。"})]}),(0,eb.jsxs)(d4,{children:[(0,eb.jsx)(d3,{asChild:!0,children:(0,eb.jsxs)(ez.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(eiO,{}),"解除绑定"]})}),(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"确认解除设备绑定?"}),(0,eb.jsx)(ug,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{onClick:w,disabled:l,className:"bg-destructive text-white hover:bg-destructive/90",children:l?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"animate-spin"}),"处理中..."]}):"确认解除"})]})]})]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"退出登录"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"退出当前 Hub 账户但保留设备在云端的注册。下次登录时无需重新绑定。"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:j,children:[(0,eb.jsx)(eao,{}),"退出登录"]})]})]})]})})}):null}function eiA(){let[e,t]=ew.useState(""),[n,r]=ew.useState(""),[a,i]=ew.useState(""),[o,l]=ew.useState(!1),[s,c]=ew.useState(null);async function d(){if(c(null),n.length<8)return void c({kind:"err",text:"新密码至少 8 位"});if(n!==a)return void c({kind:"err",text:"两次输入的新密码不一致"});l(!0);try{await e1(e,n),c({kind:"ok",text:"密码已更新"}),t(""),r(""),i("")}catch(e){c({kind:"err",text:e instanceof Error?e.message:"修改失败,请重试"})}finally{l(!1)}}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eiE,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"修改密码"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"更改你的 Vantaloom Hub 登录密码。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(eA,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"确认新密码",autoComplete:"new-password",value:a,onChange:e=>i(e.target.value)})]}),s?(0,eb.jsx)("p",{className:"ok"===s.kind?"text-xs text-primary":"text-xs text-destructive",children:s.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(ez.Button,{size:"sm",onClick:d,disabled:o||!e||!n,children:o?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"animate-spin"}),"保存中..."]}):"更新密码"})})]})}function eiT(){let[e,t]=ew.useState(!1),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(null);async function s(n){if(!a){t(n),i(!0),l(null);try{let e=await jd({telemetry:{enabled:n}});t(e.telemetry?.enabled??n)}catch(n){t(e),l(n instanceof Error?n.message:"保存失败,请重试")}finally{i(!1)}}}return ew.useEffect(()=>{let e=!1;return async function(){try{let n=await jc();e||t(n.telemetry?.enabled??!1)}catch{}finally{e||r(!1)}}(),()=>{e=!0}},[]),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(ub,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"错误诊断上报"})]}),(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["默认",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"关闭"}),"。开启后,",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"仅当出现网络错误时"}),",应用会把少量非隐私设备信息(系统 / 架构 / 版本 / 代理模式 / 网络开关 等) 与",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"完整错误文本"}),"上报到 Hub,用于协助排查连接问题。"]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(vJ,{checked:e,disabled:n||a,onCheckedChange:e=>void s(e)})]}),(0,eb.jsx)("div",{className:"rounded-md bg-muted/50 px-3 py-2",children:(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"绝不会上报:API 密钥、代理地址、文件路径、对话内容,以及你的 Hub 身份。"})}),o?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:o}):null]})}var eiR=["PageUp","PageDown"],eiD=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ei_={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eiL="Slider",[ei$,eiF,eiB]=hK(eiL),[eiV,eiH]=cr(eiL,[eiB]),[eiU,eiq]=eiV(eiL),eiW=ew.forwardRef((e,t)=>{let{name:n,min:r=0,max:a=100,step:i=1,orientation:o="horizontal",disabled:l=!1,minStepsBetweenThumbs:s=0,defaultValue:c=[r],value:d,onValueChange:u=()=>{},onValueCommit:f=()=>{},inverted:h=!1,form:m,...p}=e,g=ew.useRef(new Set),x=ew.useRef(0),v="horizontal"===o,[b=[],y]=cu({prop:d,defaultProp:c,onChange:e=>{let t=[...g.current];t[x.current]?.focus(),u(e)}}),w=ew.useRef(b);function j(e,t,{commit:n}={commit:!1}){let o,l=(String(i).split(".")[1]||"").length,c=m5(Math.round((Math.round((e-r)/i)*i+r)*(o=Math.pow(10,l)))/o,[r,a]);y((e=[])=>{let r=function(e=[],t,n){let r=[...e];return r[n]=t,r.sort((e,t)=>e-t)}(e,c,t);if(!function(e,t){if(t>0)return Math.min(...e.slice(0,-1).map((t,n)=>e[n+1]-t))>=t;return!0}(r,s*i))return e;{x.current=r.indexOf(c);let t=String(r)!==String(e);return t&&n&&f(r),t?r:e}})}return(0,eb.jsx)(eiU,{scope:e.__scopeSlider,name:n,disabled:l,min:r,max:a,valueIndexToChangeRef:x,thumbs:g.current,values:b,orientation:o,form:m,children:(0,eb.jsx)(ei$.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(ei$.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?eiX:eiY,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:ci(p.onPointerDown,()=>{l||(w.current=b)}),min:r,max:a,inverted:h,onSlideStart:l?void 0:function(e){let t=function(e,t){if(1===e.length)return 0;let n=e.map(e=>Math.abs(e-t)),r=Math.min(...n);return n.indexOf(r)}(b,e);j(e,t)},onSlideMove:l?void 0:function(e){j(e,x.current)},onSlideEnd:l?void 0:function(){let e=w.current[x.current];b[x.current]!==e&&f(b)},onHomeKeyDown:()=>!l&&j(r,0,{commit:!0}),onEndKeyDown:()=>!l&&j(a,b.length-1,{commit:!0}),onStepKeyDown:({event:e,direction:t})=>{if(!l){let n=eiR.includes(e.key)||e.shiftKey&&eiD.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});eiW.displayName=eiL;var[eiK,eiG]=eiV(eiL,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eiX=ew.forwardRef((e,t)=>{let{min:n,max:r,dir:a,inverted:i,onSlideStart:o,onSlideMove:l,onSlideEnd:s,onStepKeyDown:c,...d}=e,[u,f]=ew.useState(null),h=(0,ca.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=hJ(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=ei8([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(eiK,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(eiZ,{dir:p,"data-orientation":"horizontal",...d,ref:h,style:{...d.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:e=>{let t=v(e.clientX);o?.(t)},onSlideMove:e=>{let t=v(e.clientX);l?.(t)},onSlideEnd:()=>{m.current=void 0,s?.()},onStepKeyDown:e=>{let t=ei_[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),eiY=ew.forwardRef((e,t)=>{let{min:n,max:r,inverted:a,onSlideStart:i,onSlideMove:o,onSlideEnd:l,onStepKeyDown:s,...c}=e,d=ew.useRef(null),u=(0,ca.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=ei8([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(eiK,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(eiZ,{"data-orientation":"vertical",...c,ref:u,style:{...c.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:e=>{let t=m(e.clientY);i?.(t)},onSlideMove:e=>{let t=m(e.clientY);o?.(t)},onSlideEnd:()=>{f.current=void 0,l?.()},onStepKeyDown:e=>{let t=ei_[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),eiZ=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=eiq(eiL,n);return(0,eb.jsx)(cp.span,{...c,ref:t,onKeyDown:ci(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eiR.concat(eiD).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:ci(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:ci(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:ci(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),eiJ="SliderTrack",eiQ=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiq(eiJ,n);return(0,eb.jsx)(cp.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});eiQ.displayName=eiJ;var ei0="SliderRange",ei1=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiq(ei0,n),i=eiG(ei0,n),o=ew.useRef(null),l=(0,ca.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>ei6(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cp.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});ei1.displayName=ei0;var ei2="SliderThumb",ei5=ew.forwardRef((e,t)=>{let n=eiF(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,ca.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(ei4,{...e,ref:i,index:o})}),ei4=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=eiq(ei2,c),m=eiG(ei2,c),[p,g]=ew.useState(null),x=(0,ca.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=gt(p),y=h.values[d],w=void 0===y?0:ei6(y,h.min,h.max),j=(n=d,(r=h.values.length)>2?`Value ${n+1} of ${r}`:2===r?["Minimum","Maximum"][n]:void 0),k=b?.[m.size],N=k?(a=k,i=w,o=m.direction,s=ei8([0,50],[0,l=a/2]),(l-s(i)*o)*o):0;return ew.useEffect(()=>{if(p)return h.thumbs.add(p),()=>{h.thumbs.delete(p)}},[p,h.thumbs]),(0,eb.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[m.startEdge]:`calc(${w}% + ${N}px)`},children:[(0,eb.jsx)(ei$.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cp.span,{role:"slider","aria-label":e["aria-label"]||j,"aria-valuemin":h.min,"aria-valuenow":y,"aria-valuemax":h.max,"aria-orientation":h.orientation,"data-orientation":h.orientation,"data-disabled":h.disabled?"":void 0,tabIndex:h.disabled?void 0:0,...f,ref:x,style:void 0===y?{display:"none"}:e.style,onFocus:ci(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(ei3,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});ei5.displayName=ei2;var ei3=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,ca.useComposedRefs)(a,r),o=gy(t);return ew.useEffect(()=>{let e=a.current;if(!e)return;let n=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(o!==t&&n){let r=new Event("input",{bubbles:!0});n.call(e,t),e.dispatchEvent(r)}},[o,t]),(0,eb.jsx)(cp.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function ei6(e,t,n){return m5(100/(n-t)*(e-t),[0,100])}function ei8(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function ei7(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function ei9({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>ei7(n)??ei7(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(eiW,{"data-slot":"slider",defaultValue:ei7(t),value:ei7(n),min:r,max:a,className:(0,eI.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...i,children:[(0,eb.jsx)(eiQ,{"data-slot":"slider-track",className:"relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1",children:(0,eb.jsx)(ei1,{"data-slot":"slider-range",className:"absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"})}),o.map((e,t)=>(0,eb.jsx)(ei5,{"data-slot":"slider-thumb",className:"relative block size-3 shrink-0 rounded-full border border-ring bg-white shadow-sm transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 hover:ring-ring/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-hidden active:ring-3 active:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 dark:bg-primary-foreground"},t))]})}ei3.displayName="RadioBubbleInput";let eoe=[1e4,3e4,12e4,3e5,6e5];function eot(e){return{compression:{...e.compression},summary:{...e.summary},approval:{...e.approval},behavior:{maxToolCalls:e.behavior?.maxToolCalls??0,retryCount:e.behavior?.retryCount??0,retryDelaysMs:e.behavior?.retryDelaysMs??[]}}}function eon(e){return(e&&e.length?e:eoe).map(e=>Math.round(e/1e3)).join(", ")}function eor(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1),[f,h]=ew.useState("");function m(e,n){t(t=>t?{...t,[e]:{...t[e],...n}}:t),u(!0)}async function p(){if(e&&!o){l(!0),c("");try{let n=await jd({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eot(n)),h(eon(n.behavior?.retryDelaysMs)),u(!1)}catch(e){c(e instanceof Error?e.message:"Save failed")}finally{l(!1)}}}return(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jc(),xB()]);t(eot(e)),h(eon(e.behavior?.retryDelaysMs)),r(n.models)}catch(e){c(e instanceof Error?e.message:"Failed to load config")}finally{i(!1)}}()},[]),a)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取代理配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"代理配置"})}),d&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void p(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-compression",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"压缩上下文"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"当对话 token 达到模型上下文窗口的指定百分比时自动压缩。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(ei9,{value:[e.compression.autoThresholdPercent],onValueChange:([e])=>m("compression",{autoThresholdPercent:e}),min:0,max:100,step:5}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"0% 表示禁用自动压缩。建议设为 70%-85%。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eoa,{models:n,value:e.compression.modelRef,onValueChange:e=>m("compression",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于执行上下文压缩的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-summary",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"对话摘要"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(vJ,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(vJ,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoa,{models:n,value:e.summary.modelRef,onValueChange:e=>m("summary",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于生成对话摘要的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自动重试与工具调用上限"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本机(vantaloom)agent 单次运行的工具调用上限,以及请求失败后的自动重试。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.maxToolCalls,onChange:e=>m("behavior",{maxToolCalls:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"单次运行累计调用工具达到该次数后强制暂停(可点击“继续”恢复)。设为 0 表示不限次(默认)。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.retryCount,onChange:e=>m("behavior",{retryCount:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型/服务商请求失败时自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(eA,{value:f,onChange:e=>{let t=e.currentTarget.value;h(t),m("behavior",{retryDelaysMs:t.split(/[,,\s]+/).map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e)})},placeholder:"10, 30, 120, 300, 600"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用逗号分隔每次重试的等待秒数(指数级递增),例如 10, 30, 120, 300, 600。超出列表长度时使用最后一项。留空使用内置默认梯度。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-approval",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"命令审批"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在 Auto 权限模式下,使用 AI 模型审批 Agent 发起的命令是否可以自动执行。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eoa,{models:n,value:e.approval.modelRef,onValueChange:e=>m("approval",{modelRef:e}),placeholder:"未配置(全部放行)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空表示 Auto 模式下不进行 AI 审批,所有非危险命令自动放行。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(y6,{value:e.approval.prompt,onChange:e=>m("approval",{prompt:e.currentTarget.value}),placeholder:"可选:给审批模型的额外指导,例如允许哪些操作、拒绝哪些操作",rows:4,className:"resize-none text-sm"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"与系统提示词一起发送给审批模型,帮助它判断命令是否安全。"})]})]})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载代理配置"})]})}function eoa({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.label},e.id))]})]})}let eoi=(0,ek.default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);var eoo="Accordion",eol=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eos,eoc,eod]=hK(eoo),[eou,eof]=cr(eoo,[eod,eag]),eoh=eag(),eom=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eos.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoy,{...r,ref:t}):(0,eb.jsx)(eob,{...r,ref:t})})});eom.displayName=eoo;var[eop,eog]=eou(eoo),[eox,eov]=eou(eoo,{collapsible:!1}),eob=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=cu({prop:n,defaultProp:r??"",onChange:a,caller:eoo});return(0,eb.jsx)(eop,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eox,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eok,{...o,ref:t})})})}),eoy=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=cu({prop:n,defaultProp:r??[],onChange:a,caller:eoo}),s=ew.default.useCallback(e=>l((t=[])=>[...t,e]),[l]),c=ew.default.useCallback(e=>l((t=[])=>t.filter(t=>t!==e)),[l]);return(0,eb.jsx)(eop,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eox,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eok,{...i,ref:t})})})}),[eow,eoj]=eou(eoo),eok=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,ca.useComposedRefs)(l,t),c=eoc(n),d="ltr"===hJ(a),u=ci(e.onKeyDown,e=>{if(!eol.includes(e.key))return;let t=e.target,n=c().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),a=n.length;if(-1===r)return;e.preventDefault();let o=r,l=a-1,s=()=>{(o=r+1)>l&&(o=0)},u=()=>{(o=r-1)<0&&(o=l)};switch(e.key){case"Home":o=0;break;case"End":o=l;break;case"ArrowRight":"horizontal"===i&&(d?s():u());break;case"ArrowDown":"vertical"===i&&s();break;case"ArrowLeft":"horizontal"===i&&(d?u():s());break;case"ArrowUp":"vertical"===i&&u()}let f=o%a;n[f].ref.current?.focus()});return(0,eb.jsx)(eow,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eos.Slot,{scope:n,children:(0,eb.jsx)(cp.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoN="AccordionItem",[eoS,eoC]=eou(eoN),eoM=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoj(eoN,n),o=eog(eoN,n),l=eoh(n),s=cc(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eoS,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eab,{"data-orientation":i.orientation,"data-state":eoT(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eoM.displayName=eoN;var eoE="AccordionHeader",eoO=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoE,n);return(0,eb.jsx)(cp.h3,{"data-orientation":a.orientation,"data-state":eoT(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eoO.displayName=eoE;var eoP="AccordionTrigger",eoz=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoP,n),o=eov(eoP,n),l=eoh(n);return(0,eb.jsx)(eos.ItemSlot,{scope:n,children:(0,eb.jsx)(eaw,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eoz.displayName=eoP;var eoI="AccordionContent",eoA=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoI,n),o=eoh(n);return(0,eb.jsx)(eak,{role:"region","aria-labelledby":i.triggerId,"data-orientation":a.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});function eoT(e){return e?"open":"closed"}function eoR({...e}){return(0,eb.jsx)(eom,{"data-slot":"accordion",...e})}function eoD({className:e,...t}){return(0,eb.jsx)(eoM,{"data-slot":"accordion-item",className:(0,eI.cn)("border-b last:border-b-0",e),...t})}function eo_({className:e,children:t,...n}){return(0,eb.jsx)(eoO,{className:"flex",children:(0,eb.jsxs)(eoz,{"data-slot":"accordion-trigger",className:(0,eI.cn)("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",e),...n,children:[t,(0,eb.jsx)(xf,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function eoL({className:e,children:t,...n}){return(0,eb.jsx)(eoA,{"data-slot":"accordion-content",className:"overflow-hidden text-sm data-[state=closed]:animate-out data-[state=open]:animate-in",...n,children:(0,eb.jsx)("div",{className:(0,eI.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eoA.displayName=eoI;let eo$={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eoF(e){return{...e.claudeCode??{}}}function eoB(e,t){if(e.reclaudeExecutable)return e;let n=t.find(e=>"reclaude"===e.engine);return n?.available&&n.detail?{...e,reclaudeExecutable:n.detail}:e}function eoV(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState([]),[o,l]=ew.useState(!0),[s,c]=ew.useState(!1),[d,u]=ew.useState(!1),[f,h]=ew.useState(""),[m,p]=ew.useState(!1);async function g(){if(!d){u(!0),h("");try{let e=(await jf()).engines??[];r(e),t(t=>t?eoB(t,e):t)}catch(e){h(e instanceof Error?e.message:"适配器安装失败")}finally{u(!1)}}}function x(e){t(t=>t?{...t,...e}:t),p(!0)}ew.useEffect(()=>{!async function(){try{let[e,n,a]=await Promise.all([jc(),ju(),xB()]),o=n.engines??[];t(eoB(eoF(e),o)),r(o),i(a.models)}catch(e){h(e instanceof Error?e.message:"Failed to load config")}finally{l(!1)}}()},[]);let v=e?.adapterArgs?.[0]??"";async function b(){if(e&&!s){c(!0),h("");try{let n=await jd({claudeCode:e});t(eoF(n)),p(!1)}catch(e){h(e instanceof Error?e.message:"Save failed")}finally{c(!1)}}}return o?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取引擎配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"CC 引擎"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"配置 Claude Code / reclaude 引擎。展开下方分组按需修改,留空项将自动发现。"})]}),m&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void b(),disabled:s,children:[(0,eb.jsx)(Gr,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:f})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"检测到的引擎"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本机当前可用的 Agent 运行引擎。不可用的引擎会说明原因。"})]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>void g(),disabled:d,children:[d?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(v2,{className:"size-4"}),d?"安装中…":"下载/安装适配器"]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"Claude Code / reclaude 需要 ACP 适配器。运行时不再内置它(以减小体积), 点击上方按钮即可在后台静默下载安装;安装后无需手填路径即可使用。"}),(0,eb.jsx)("div",{className:"grid gap-2",children:0===n.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未检测到引擎信息。"}):n.map(e=>(0,eb.jsxs)("div",{className:"grid gap-1 rounded-md border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"text-sm font-medium",children:eo$[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,eI.cn)("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium [&_svg]:size-3",e.available?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-destructive/10 text-destructive"),children:[e.available?(0,eb.jsx)(eO,{}):(0,eb.jsx)(eoi,{}),e.available?"可用":"不可用"]})]}),e.reason?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e.reason}):null,e.detail?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:e.detail}):null]},e.engine))})]}),(0,eb.jsx)("section",{className:"rounded-lg border bg-card px-4",children:(0,eb.jsxs)(eoR,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(eoD,{value:"adapter",children:[(0,eb.jsx)(eo_,{children:"适配器"}),(0,eb.jsxs)(eoL,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"适配器命令"}),(0,eb.jsx)(eA,{value:e.adapterCommand??"",onChange:e=>x({adapterCommand:e.currentTarget.value}),placeholder:"node"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动使用 node 运行适配器。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"适配器入口 (…/@zed-industries/claude-code-acp/dist/index.js)"}),(0,eb.jsx)(eA,{value:v,onChange:e=>{let t=e.currentTarget.value;x({adapterArgs:t?[t]:[]})},placeholder:"…/@zed-industries/claude-code-acp/dist/index.js"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动发现(随运行时安装或环境变量 VANTALOOM_CC_ADAPTER)。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(eA,{value:e.gitBashPath??"",onChange:e=>x({gitBashPath:e.currentTarget.value}),placeholder:"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Windows 专用,留空自动发现。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(eA,{value:e.reclaudeExecutable??"",onChange:e=>x({reclaudeExecutable:e.currentTarget.value}),placeholder:"reclaude"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"reclaude 可执行文件(或 node shim)路径;自动发现到 reclaude 时会自动填入, 会通过内置 shim 启动。留空则自动发现。"})]})]})]}),(0,eb.jsxs)(eoD,{value:"auth",children:[(0,eb.jsx)(eo_,{children:"认证"}),(0,eb.jsxs)(eoL,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.apiKey??"",onChange:e=>x({apiKey:e.currentTarget.value}),placeholder:"claude-code 引擎用;留空可用 claude /login"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"claude-code 引擎用;留空可使用 claude /login 登录。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.oauthToken??"",onChange:e=>x({oauthToken:e.currentTarget.value}),placeholder:"留空使用其它认证方式"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"可选的 OAuth Token,作为 API Key 之外的认证方式。"})]})]})]}),(0,eb.jsxs)(eoD,{value:"summary",children:[(0,eb.jsx)(eo_,{children:"摘要模型"}),(0,eb.jsx)(eoL,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoH,{models:a,value:e.summaryModelRef??"",onValueChange:e=>x({summaryModelRef:e}),placeholder:"使用默认"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"CC 会话标题/摘要用的 Vantaloom 模型路由。"})]})})]})]})})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:f||"无法加载引擎配置"})]})}function eoH({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.label},e.id))]})]})}let eoU=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eai,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(Uc,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eP,{})}],eoq=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(s8,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(s9,{})}];function eoW(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=J2();t(e.mode),r(e.agentSide)},[]),(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"布局排版"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅电脑端生效。切换 Agent 工作区的窗口布局与 Agent 对话的位置,设置即时应用到所有会话。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"布局模式"}),(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-3",children:eoU.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),J5({mode:e})},className:(0,eI.cn)("flex flex-col gap-2 rounded-lg border p-3 text-left transition-colors [&_svg]:size-5",r?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground"),"aria-pressed":r,children:[(0,eb.jsx)("span",{className:(0,eI.cn)("grid size-9 place-items-center rounded-md",r?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:n.icon}),(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:n.label}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:n.description})]},n.id)})})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"Agent 对话位置"}),(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:eoq.map(e=>{let t=n===e.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var t;r(t=e.id),J5({agentSide:t})},className:(0,eI.cn)("inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-sm transition-colors [&_svg]:size-4",t?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground"),"aria-pressed":t,children:[e.icon,e.label]},e.id)})})]})]})}function eoK(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function eoG(){let[e,t]=ew.useState(null),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1);function d(e){t(t=>t?{...t,...e}:t),c(!0)}async function u(){if(e&&!a){i(!0),l("");try{let n=await jd({memory:e});t(eoK(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jc();t(eoK(e))}catch(e){l(e instanceof Error?e.message:"读取记忆配置失败")}finally{r(!1)}}()},[]),n)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取记忆配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"记忆"}),s?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:o})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"总开关"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(vJ,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(ei9,{value:[e.injectBudgetTokens],onValueChange:([e])=>d({injectBudgetTokens:e}),min:200,max:8e3,step:100}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次运行自动注入的相关记忆正文上限。超出按相关性截断。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(vJ,{checked:e.autoCapture,onCheckedChange:e=>d({autoCapture:e})})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"记忆看板"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"浏览、新增、编辑与删除全局记忆。项目记忆与对话记忆需在对应对话的设置中查看(它们依赖该对话的工作区与上下文)。"}),(0,eb.jsx)(QC,{scopes:["global"]})]})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:o||"无法加载记忆配置"})]})}let eoX=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function eoY(e){return{id:e.id,providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:"",models:e.models,selectedModelIds:e.selectedModelIds,builtin:e.builtin,loadingModels:!1,saving:!1,error:e.lastError??"",savedKeyAvailable:!0,editing:!1}}function eoZ(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await xB();t(e.routes.map(eoY))}catch(e){i(e instanceof Error?e.message:"模型路由读取失败")}finally{r(!1)}},[]);function l(e,n){t(t=>t.map((t,r)=>r===e?n(t):t))}async function s(t){let n=e[t];if(n&&!n.saving){l(t,e=>({...e,saving:!0,error:""}));try{let e=await xH({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>eoY(e))}catch(e){l(t,t=>({...t,saving:!1,error:e instanceof Error?e.message:"保存失败"}))}}}async function c(n){let r=e[n];if(r&&!r.saving){if(!r.id)return void t(e=>e.filter((e,t)=>t!==n));l(n,e=>({...e,saving:!0,error:""}));try{await xU(r.id),t(e=>e.filter((e,t)=>t!==n))}catch(e){l(n,t=>({...t,saving:!1,error:e instanceof Error?e.message:"删除失败"}))}}}return ew.useEffect(()=>{o()},[o]),ew.useEffect(()=>{let e=!1,n=window.setInterval(()=>{(async()=>{try{let n=await xB();if(e)return;let r=n.routes.find(e=>e.builtin);t(e=>{let t=e.some(e=>e.builtin);return r?t?e.map(e=>e.builtin?{...e,providerName:r.providerName,models:r.models,selectedModelIds:r.selectedModelIds,error:r.lastError??""}:e):[eoY(r),...e]:t?e.filter(e=>!e.builtin):e})}catch{}})()},3e4);return()=>{e=!0,window.clearInterval(n)}},[]),(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"模型路由"})}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:function(){t(e=>[{providerName:"",protocol:"openai-v1",endpointUrl:"",apiKey:"",models:[],selectedModelIds:[],loadingModels:!1,saving:!1,error:"",editing:!0},...e])},"data-tour":"add-model-route",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加模型路由"]})]}),a?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:a})]}):null,n?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取模型路由"}):0===e.length?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"还没有模型路由。"}):(0,eb.jsx)("div",{className:"grid gap-3",children:e.map((e,t)=>(0,eb.jsx)(eoJ,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function eoJ({draft:e,onDraftChange:t,onSave:n,onDelete:r}){let a=ew.useRef(e),i=ew.useRef(t),o=[e.providerName,e.protocol,e.endpointUrl,e.apiKey||(e.savedKeyAvailable?"saved":"")].join("\n"),l=e.providerName.trim()&&e.endpointUrl.trim()&&e.apiKey.trim(),s=e.providerName.trim()&&e.endpointUrl.trim()&&(e.apiKey.trim()||e.savedKeyAvailable)&&e.selectedModelIds.length>0&&!e.saving;function c(n){t({...e,...n})}if(ew.useEffect(()=>{a.current=e,i.current=t},[e,t]),ew.useEffect(()=>{if(!l)return;let e=window.setTimeout(async()=>{let e=a.current;i.current({...e,loadingModels:!0,error:""});try{let t=await xV({providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:e.apiKey}),n=e.selectedModelIds.filter(e=>t.models.some(t=>t.id===e));i.current({...e,models:t.models,selectedModelIds:n,loadingModels:!1,error:""})}catch(t){i.current({...e,loadingModels:!1,error:t instanceof Error?t.message:"模型拉取失败"})}},650);return()=>window.clearTimeout(e)},[l,o]),!e.editing||e.builtin){let t=e.selectedModelIds.map(t=>e.models.find(e=>e.id===t)?.displayName||t).filter(Boolean),n=eoX.find(t=>t.value===e.protocol)?.label??e.protocol;return(0,eb.jsxs)("section",{className:"grid min-h-16 grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-lg border bg-card px-3 py-2.5",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[e.builtin?(0,eb.jsx)(lK,{className:"size-3.5 shrink-0 text-muted-foreground"}):null,(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.providerName}),e.builtin?(0,eb.jsx)("span",{className:"ui-text-kbd rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:"官渠"}):null,(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:n})]}),(0,eb.jsx)("div",{className:"mt-1 truncate text-xs text-muted-foreground",children:t.length>0?t.join(", "):"未选择模型"})]}),e.builtin?null:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>c({editing:!0}),children:[(0,eb.jsx)(HA,{className:"size-4"}),"编辑"]})]})}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-3","data-tour":"model-route-form",children:[(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_11rem]",children:[(0,eb.jsx)(eA,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gR,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:eoX.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_minmax(0,18rem)]",children:[(0,eb.jsx)(eA,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(eA,{value:e.apiKey,type:"password",placeholder:e.savedKeyAvailable?"已保存,留空沿用":"API Key",onChange:e=>c({apiKey:e.currentTarget.value})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-h-6 items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-sm font-medium",children:[(0,eb.jsx)(mZ,{className:"size-4 text-muted-foreground"}),"可用模型"]}),e.loadingModels?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"拉取中"}):null]}),e.models.length>0?(0,eb.jsx)("div",{className:"grid max-h-64 gap-1 overflow-auto pr-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:e.models.map(t=>{let n=e.selectedModelIds.includes(t.id);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-8 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-md px-2 text-sm hover:bg-muted/60",n&&"bg-muted/70"),children:[(0,eb.jsxs)("label",{className:"flex cursor-pointer items-center gap-2",children:[(0,eb.jsx)(xF,{checked:n,onCheckedChange:n=>{var r;return r=t.id,void c({selectedModelIds:!0===n?[...e.selectedModelIds,r]:e.selectedModelIds.filter(e=>e!==r)})}}),(0,eb.jsx)("span",{className:"truncate",children:t.displayName||t.id})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(eA,{type:"number",className:"h-6 w-16 px-1.5 text-center text-xs tabular-nums",value:t.contextLength||200,min:1,max:1e4,onChange:n=>{var r,a;return r=t.id,a=Number.parseInt(n.currentTarget.value,10)||0,void c({models:e.models.map(e=>e.id===r?{...e,contextLength:a>0?a:void 0}:e)})}}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"k"})]})]},t.id)})}):(0,eb.jsx)("div",{className:"rounded-md border border-dashed px-3 py-4 text-sm text-muted-foreground",children:"填写端点和密钥后会自动拉取模型。"})]}),e.error?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"模型路由错误"}),(0,eb.jsx)(QT,{className:"break-words",children:e.error})]}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"destructive",onClick:r,disabled:e.saving,children:[(0,eb.jsx)(bo,{className:"size-4"}),"删除"]}),(0,eb.jsx)(ez.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function eoQ(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function eo0(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1),[f,h]=ew.useState(""),[m,p]=ew.useState("");function g(e){t(t=>t?{...t,...e}:t),u(!0)}async function x(){if(e&&!o){l(!0),c("");try{let n=await jd({skills:e});t(eoQ(n)),r(await Qv()),u(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{l(!1)}}}if(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jc(),Qv()]);t(eoQ(e)),r(n)}catch(e){c(e instanceof Error?e.message:"读取技能配置失败")}finally{i(!1)}}()},[]),a)return(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取技能配置"});if(!e)return(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载技能配置"})]});let v=n.filter(e=>e.readOnly);return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"技能"}),d?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void x(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"总开关"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(vJ,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(ei9,{value:[e.listingBudgetTokens],onValueChange:([e])=>g({listingBudgetTokens:e}),min:200,max:6e3,step:100}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次运行注入到系统提示词的技能清单上限(只计名称+描述+何时使用)。超出按相关性截断。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"技能源"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"配置可拉取技能的远程源(http / git raw URL)。内置 local 源与 Hub 官方源为只读。"}),v.length>0?(0,eb.jsx)("div",{className:"grid gap-1.5",children:v.map(e=>(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md bg-muted/55 px-3 py-2 text-sm",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"font-medium",children:e.label}),e.url?(0,eb.jsx)("span",{className:"ml-2 truncate text-xs text-muted-foreground",children:e.url}):null]}),(0,eb.jsx)(Bu,{variant:"outline",children:"只读"})]},e.label))}):null,(e.sources??[]).length>0?(0,eb.jsx)("div",{className:"grid gap-1.5",children:(e.sources??[]).map((t,n)=>(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"font-medium",children:t.label}),(0,eb.jsx)("span",{className:"ml-2 truncate text-xs text-muted-foreground",children:t.url})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs",className:"size-6 opacity-55 hover:opacity-100","aria-label":`删除源 ${t.label}`,onClick:()=>{e&&g({sources:(e.sources??[]).filter((e,t)=>t!==n)})},children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},`${t.label}-${n}`))}):null,(0,eb.jsxs)("div",{className:"flex flex-wrap items-end gap-2",children:[(0,eb.jsxs)("div",{className:"grid min-w-[6rem] flex-1 gap-1",children:[(0,eb.jsx)(Qd,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(eA,{value:f,onChange:e=>h(e.currentTarget.value),placeholder:"my-source",className:"h-9"})]}),(0,eb.jsxs)("div",{className:"grid min-w-[10rem] flex-[2] gap-1",children:[(0,eb.jsx)(Qd,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(eA,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:!f.trim()||!m.trim(),onClick:function(){let t=f.trim(),n=m.trim();t&&n&&e&&(g({sources:[...e.sources??[],{label:t,url:n}]}),h(""),p(""))},children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加"]})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"技能库"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"浏览全局技能库,可查看正文、删除全局技能,或从已配置的源拉取新技能。安装到具体工作区请在对话设置内操作。"}),(0,eb.jsx)(QO,{})]})]})}async function eo1(){return eo5("/api/local/subagent-config")}async function eo2(e){return eo5("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function eo5(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"subagent config api failed");return r}function eo4(e){return{explore:{...e.explore},workflow:{...e.workflow},operator:{...e.operator},custom:{...e.custom,models:[...e.custom.models??[]]}}}let eo3={explore:{title:"探索子代理",icon:(0,eb.jsx)(Vj,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uP,{className:"size-4"}),tint:"text-violet-600 dark:text-violet-400",description:"按 workflow-*.yml 严格执行可重复的多步流程,并把其中确定性的步骤自动固化为脚本、给 yml 添加批注。",tools:"阅读 / 编辑 / 终端(vantaloom_read · vantaloom_edit · vantaloom_shell)"},operator:{title:"操作员子代理",icon:(0,eb.jsx)(uO,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function eo6(){let[e,t]=ew.useState(null),{models:n,loading:r}=xK(),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1);async function f(){if(e&&!o){l(!0),c("");try{let n=await eo2({explore:e.explore,workflow:e.workflow,operator:e.operator,custom:e.custom});t(eo4(n)),u(!1)}catch(e){c(e instanceof Error?e.message:"Save failed")}finally{l(!1)}}}return ew.useEffect(()=>{!async function(){try{let e=await eo1();t(eo4(e))}catch(e){c(e instanceof Error?e.message:"Failed to load config")}finally{i(!1)}}()},[]),a?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取子代理配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"子代理配置"}),(0,eb.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"主 agent 可以派发这些子代理来分担任务。每个子代理拥有独立上下文与受限工具集,完成后只把结果汇报给主 agent。"})]}),d&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void f(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(eo8,{tourId:`subagent-${a}`,meta:eo3[a],value:e[a],models:n,modelsLoading:r,onChange:e=>{t(t=>t?{...t,[a]:{...t[a],...e}}:t),u(!0)}},a)),(0,eb.jsx)(eo7,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载子代理配置"})]})}function eo8({meta:e,value:t,models:n,modelsLoading:r,onChange:a,tourId:i}){return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":i,children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:e.tint,children:e.icon}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:e.title})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e.description}),(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"text-foreground/70",children:"可用工具:"}),e.tools,(0,eb.jsx)("span",{className:"ml-1 text-muted-foreground/70",children:"(固定,不可更改)"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(eo9,{models:n,value:t.modelRef,onValueChange:e=>a({modelRef:e}),placeholder:r?"读取模型中":"继承上级模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则继承派发它的上级 agent 当前使用的模型。"})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(vJ,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"系统提示词"}),t.promptOverride?(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>a({promptOverride:""}),children:"恢复默认"}):null]}),(0,eb.jsx)(y6,{value:t.promptOverride,onChange:e=>a({promptOverride:e.currentTarget.value}),placeholder:"留空使用内置默认提示词;在此输入将覆盖默认提示词(环境/工具说明仍会自动附加)。",rows:t.promptOverride?10:3,className:"resize-y text-sm"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"覆盖该官方子代理的预设系统提示词。派发时还会自动附加工作区、操作系统与工具使用说明。"})]})]})}function eo7({value:e,models:t,modelsLoading:n,onChange:r}){let a=ew.useCallback(e=>t.find(t=>t.value===e)?.label??e,[t]);return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"subagent-custom",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:(0,eb.jsx)(uy,{className:"size-4"})}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自定义子代理"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"主 agent 可以自取名字、从下面的模型池中选一个模型来召唤自定义子代理,并可选择是否继承当前对话上下文。自定义子代理拥有完整工具集,还能进一步派发上面三种官方子代理。"}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(vZ,{variant:"list-combobox",value:e.models,onValueChange:e=>r({models:e}),options:t,placeholder:n?"读取模型中":"选择可供自定义子代理使用的模型",searchPlaceholder:"搜索模型...",emptyText:"没有可用模型",renderItem:a}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"主 agent 召唤自定义子代理时会从这个池中选择一个模型。留空则沿用上级 agent 的模型。"})]})]})}function eo9({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))]})]})}function ele(){let[e,t]=ew.useState(""),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(!1),[s,c]=ew.useState("");async function d(){if(!a){i(!0),c("");try{await jd({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jc();t(e.systemPrompt?.userPrompt??"")}catch(e){c(e instanceof Error?e.message:"加载失败")}finally{r(!1)}})()},[]),n)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取系统提示词配置"}):(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"兜底系统提示词"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅对 vantaloom 引擎对话生效。当某个对话未检测到任何项目文档(CLAUDE.md / AGENTS.md / vantaloom.md),也没有在该对话的“系统提示词”里单独设置时, 才使用这里的内容作为兜底。各对话独立的系统提示词请到对话设置 → 系统提示词中配置。"})]}),o?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void d(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsx)(y6,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elt({section:e}={}){return(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":`preferences-${e??"model-routes"}`,children:"agent-config"===e?(0,eb.jsx)(eor,{}):"subagent-config"===e?(0,eb.jsx)(eo6,{}):"cc-engine-config"===e?(0,eb.jsx)(eoV,{}):"system-prompt"===e?(0,eb.jsx)(ele,{}):"skills"===e?(0,eb.jsx)(eo0,{}):"memory"===e?(0,eb.jsx)(eoG,{}):"layout"===e?(0,eb.jsx)(eoW,{}):(0,eb.jsx)(eoZ,{})})})}let eln=(0,ek.default)("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);function elr(e,t){if(e.isLocal)return eR(t);let n=t.replace(/^\/v1(?=\/)/,"");return eR(`/v1/remote/${e.id}${n}`)}async function ela(e){try{let t=await fetch(`https://registry.npmjs.org/@vantaloom/runtime-${e}`,{headers:{Accept:"application/vnd.npm.install-v1+json"},cache:"no-store"});if(!t.ok)return;let n=await t.json();return n?.["dist-tags"]?.latest}catch{return}}function eli(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),a=ew.useRef(!0),i=ew.useCallback((e,n)=>{t(t=>t.map(t=>t.machine.id===e?{...t,...n}:t))},[]),o=ew.useCallback(async()=>{r(!0);let e=[];try{let t=await fetch(eR("/v1/remote/machines"),{cache:"no-store"});e=(await t.json()).machines??[]}catch{e=[]}a.current&&(t(e.map(e=>({machine:e,loading:!0}))),r(!1),await Promise.all(e.map(async e=>{if(!e.isLocal&&"online"!==e.status){a.current&&i(e.id,{loading:!1,error:"离线"});return}try{let t,n=await fetch(elr(e,"/v1/runtime/info"),{cache:"no-store"});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.text();try{t=JSON.parse(r)}catch{throw Error("该机器运行时过旧,不支持版本检测")}let o=await ela(t.platform);a.current&&i(e.id,{info:t,latest:o,loading:!1})}catch(t){a.current&&i(e.id,{loading:!1,error:t instanceof Error?t.message:"无法获取版本"})}})))},[i]);async function l(e){if(e.info&&!e.updating){i(e.machine.id,{updating:!0});try{await fetch(elr(e.machine,"/v1/runtime/update"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:e.latest})})}catch{}window.setTimeout(()=>{a.current&&o()},25e3)}}return ew.useEffect(()=>(a.current=!0,o(),()=>{a.current=!1}),[o]),(0,eb.jsx)("div",{className:"h-full overflow-auto px-6 py-8","data-tour":"check-update",children:(0,eb.jsxs)("div",{className:"mx-auto flex max-w-3xl flex-col gap-5",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("h1",{className:"text-xl font-semibold",children:"检查更新"}),(0,eb.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"工作组内各机器的运行时版本与可用更新。点击「立即更新」可让对应机器自动更新(该机器会短暂重启)。"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void o(),disabled:n,children:[(0,eb.jsx)(bi,{className:(0,eI.cn)("size-4",n&&"animate-spin")}),"刷新"]})]}),n&&0===e.length?(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 rounded-xl border bg-card p-8 text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"})," 正在获取机器列表…"]}):0===e.length?(0,eb.jsx)("div",{className:"rounded-xl border bg-card p-8 text-center text-sm text-muted-foreground",children:"暂无可用机器。"}):(0,eb.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>{let t=!!e.info&&!!e.latest&&e.latest!==e.info.version;return(0,eb.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border bg-card px-4 py-3",children:[(0,eb.jsx)(eP,{className:"size-5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.machine.name}),e.machine.isLocal?(0,eb.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"本机"}):null]}),(0,eb.jsx)("div",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:e.loading?"读取版本中…":e.error?(0,eb.jsx)("span",{className:"text-amber-600",children:e.error}):(0,eb.jsxs)(eb.Fragment,{children:[function(e){switch(e){case"windows":return"Windows";case"darwin":return"macOS";case"linux":return"Linux";case"android":return"Android";default:return e||"未知"}}(e.info?.os??e.machine.platform??"")," · 当前 ",(0,eb.jsx)("span",{className:"font-mono",children:e.info?.version??"?"}),e.latest?(0,eb.jsxs)(eb.Fragment,{children:[" · 最新 ",(0,eb.jsx)("span",{className:"font-mono",children:e.latest})]}):null,e.info?.updatedAt?(0,eb.jsxs)(eb.Fragment,{children:[" · 更新于 ",function(e){if(!e)return"—";let t=Date.parse(e);return Number.isFinite(t)?new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(t):"—"}(e.info.updatedAt)]}):null]})})]}),e.loading?(0,eb.jsx)(eM,{className:"size-4 animate-spin text-muted-foreground"}):e.updating?(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-xs text-primary",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"})," 更新中…"]}):t?(0,eb.jsxs)(ez.Button,{size:"sm",onClick:()=>void l(e),children:[(0,eb.jsx)(eln,{className:"size-4"})," 立即更新"]}):e.info?(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)(eO,{className:"size-4 text-emerald-500"})," 已是最新"]}):null]},e.machine.id)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"最新版本号来自 npm(@vantaloom/runtime-<平台>)。更新过程中该机器会停止并重启运行时, 若你的手机正连着它会短暂断开,更新完成后重新连接即可。"})]})})}let elo=(0,ek.default)("gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]),ell=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),els=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elc(){let{user:e}=tl(),[t,n]=ew.useState(null),[r,a]=ew.useState(!0),[i,o]=ew.useState(null),[l,s]=ew.useState("7d"),[c,d]=ew.useState("all"),[u,f]=ew.useState([]),[h,m]=ew.useState([]),[p,g]=ew.useState(!0),[x,v]=ew.useState(""),[b,y]=ew.useState(!1),[w,j]=ew.useState(null),k=ew.useCallback(async()=>{a(!0),o(null);try{n(await e6())}catch(e){o(e instanceof Error?e.message:"读取余额失败")}finally{a(!1)}},[]);ew.useEffect(()=>{e&&(k(),e9().then(e=>f(e.models)).catch(()=>f([])))},[e,k]),ew.useEffect(()=>{if(!e)return;let t=!1;return g(!0),e8(l,"all"===c?void 0:c).then(e=>{t||m(e.points)}).catch(()=>{t||m([])}).finally(()=>{t||g(!1)}),()=>{t=!0}},[e,l,c]);let N=ew.useMemo(()=>h.reduce((e,t)=>(e.costMicro+=t.costMicro,e.requests+=t.requests,e.totalTokens+=t.totalTokens,e),{costMicro:0,requests:0,totalTokens:0}),[h]),S=ew.useMemo(()=>h.map(e=>{var t;let n;return{label:(t=e.time,n=new Date(t),"24h"===l?n.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):n.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})),cost:e.costMicro/1e6,requests:e.requests,tokens:e.totalTokens}}),[h,l]);async function C(){let e=x.trim();if(e){y(!0),j(null);try{let t=await e7(e);j({kind:"ok",text:`兑换成功,到账 ${e4(t.valueMicro)}`}),v(""),n(e=>e?{...e,balanceMicro:t.balanceMicro,balanceUsd:t.balanceMicro/1e6}:e)}catch(e){j({kind:"err",text:e instanceof Error?e.message:"兑换失败,请检查兑换码"})}finally{y(!1)}}}return e?(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsxs)("div",{className:"mx-auto grid w-full max-w-3xl gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"余额与用量"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"查看官方渠道的账户余额、调用用量,并使用兑换码充值。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eah,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户余额"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:()=>void k(),disabled:r,children:[r?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bi,{}),"刷新"]})]}),i?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:i}):(0,eb.jsx)("p",{className:"text-3xl font-semibold tracking-tight",children:r&&!t?"—":e4(t?.balanceMicro??0,4)})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(elo,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"兑换码充值"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"输入兑换码,金额将立即计入账户余额。"}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eA,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(ez.Button,{className:"shrink-0",onClick:()=>void C(),disabled:b||!x.trim(),children:[b?(0,eb.jsx)(eM,{className:"animate-spin"}):null,"兑换"]})]}),w?(0,eb.jsx)("p",{className:(0,eI.cn)("text-xs","ok"===w.kind?"text-primary":"text-destructive"),children:w.text}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(ell,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"用量趋势"})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)(gR,{value:c,onValueChange:d,children:[(0,eb.jsx)(xm,{size:"sm",className:"w-44",children:(0,eb.jsx)(g$,{placeholder:"全部模型"})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gR,{value:l,onValueChange:s,children:[(0,eb.jsx)(xm,{size:"sm",className:"w-32",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:els.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(eld,{label:"花费",value:e4(N.costMicro,4)}),(0,eb.jsx)(eld,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(eld,{label:"Tokens",value:N.totalTokens.toLocaleString("zh-CN")})]}),(0,eb.jsx)("div",{className:"h-56 w-full",children:p&&0===h.length?(0,eb.jsx)("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})}):0===S.length?(0,eb.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:"所选区间暂无用量记录"}):(0,eb.jsx)(Cv,{width:"100%",height:"100%",children:(0,eb.jsxs)(Y4,{data:S,margin:{top:8,right:8,left:0,bottom:0},children:[(0,eb.jsx)("defs",{children:(0,eb.jsxs)("linearGradient",{id:"usageCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,eb.jsx)("stop",{offset:"5%",stopColor:"var(--color-primary)",stopOpacity:.35}),(0,eb.jsx)("stop",{offset:"95%",stopColor:"var(--color-primary)",stopOpacity:0})]})}),(0,eb.jsx)(ZO,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(Zq,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Z2,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(BK,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(YJ,{type:"monotone",dataKey:"cost",stroke:"var(--color-primary)",strokeWidth:2,fill:"url(#usageCost)"})]})})})]})]})}):(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 text-foreground",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col items-center gap-3 py-16 text-center",children:[(0,eb.jsx)(eah,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsx)("p",{className:"text-sm font-medium",children:"未登录 Hub 账户"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请先在「系统设置 · Hub 账户」中登录,再查看余额与用量。"})]})})}function eld({label:e,value:t}){return(0,eb.jsxs)("div",{className:"rounded-md bg-muted/55 px-3 py-2",children:[(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e}),(0,eb.jsx)("p",{className:"mt-0.5 truncate text-sm font-semibold",children:t})]})}let elu=(0,ek.default)("image-plus",[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]),elf=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elh=Object.fromEntries(elf.map(e=>[e.value,e.label])),elm={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elp(){let{user:e}=tl(),[t,n]=ew.useState(""),[r,a]=ew.useState("bug"),[i,o]=ew.useState(""),[l,s]=ew.useState([]),[c,d]=ew.useState(!1),[u,f]=ew.useState(null),[h,m]=ew.useState(!1),p=ew.useRef(null),[g,x]=ew.useState([]),[v,b]=ew.useState(!0),[y,w]=ew.useState(null),j=ew.useCallback(async()=>{b(!0);try{let e=await tt();x(e.issues)}catch{x([])}finally{b(!1)}},[]);function k(e){let t=Array.from(e).filter(e=>e.type.startsWith("image/"));f(null),s(e=>{let n=[...e];for(let e of t){if(n.length>=10){f({kind:"err",text:`最多上传 10 张图片`});break}if(e.size>8388608){f({kind:"err",text:`「${e.name}」过大(上限 8MB)`});continue}n.push({id:`${e.name}-${e.size}-${n.length}`,file:e,url:URL.createObjectURL(e)})}return n})}async function N(){if(!t.trim())return void f({kind:"err",text:"请填写标题"});d(!0),f(null);try{let{issue:e}=await te({title:t.trim(),type:r,content:i.trim()}),c=!1;for(let t of l)try{await tn(e.id,t.file)}catch{c=!0}f({kind:"ok",text:c?"反馈已提交,但部分图片上传失败,请在下方列表确认":"反馈已提交,感谢您的反馈!"}),n(""),a("bug"),o(""),l.forEach(e=>URL.revokeObjectURL(e.url)),s([]),j()}catch(e){f({kind:"err",text:e instanceof Error?e.message:"提交失败,请重试"})}finally{d(!1)}}return ew.useEffect(()=>{e&&j()},[e,j]),ew.useEffect(()=>()=>{l.forEach(e=>URL.revokeObjectURL(e.url))},[]),e?(0,eb.jsxs)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:[(0,eb.jsxs)("div",{className:"mx-auto grid w-full max-w-3xl gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"问题反馈"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"提交功能异常、建议或计费问题,我们会在看板中跟进处理。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"标题"}),(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),maxLength:120,placeholder:"简要描述问题"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"类型"}),(0,eb.jsxs)(gR,{value:r,onValueChange:a,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:elf.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"详细描述"}),(0,eb.jsx)(y6,{value:i,onChange:e=>o(e.target.value),rows:5,placeholder:"详细描述问题的复现步骤、期望行为等",onPaste:e=>{let t=Array.from(e.clipboardData.files).filter(e=>e.type.startsWith("image/"));t.length>0&&(e.preventDefault(),k(t))}})]}),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3 rounded-lg border border-dashed p-3 transition-colors",h?"border-primary bg-primary/5":"border-input"),onDragOver:e=>{e.preventDefault(),m(!0)},onDragLeave:()=>m(!1),onDrop:e=>{e.preventDefault(),m(!1),e.dataTransfer.files.length>0&&k(e.dataTransfer.files)},children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["可拖拽、粘贴或选择图片(最多 ",10," 张,单张 ≤ 8MB)"]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>p.current?.click(),children:[(0,eb.jsx)(elu,{}),"添加图片"]}),(0,eb.jsx)("input",{ref:p,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:e=>{e.target.files&&k(e.target.files),e.target.value=""}})]}),l.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:l.map(e=>(0,eb.jsxs)("div",{className:"relative size-16 overflow-hidden rounded-md border",children:[(0,eb.jsx)("img",{src:e.url,alt:e.file.name,className:"size-full object-cover"}),(0,eb.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void s(e=>{let n=e.find(e=>e.id===t);return n&&URL.revokeObjectURL(n.url),e.filter(e=>e.id!==t)})},className:"absolute right-0.5 top-0.5 rounded-full bg-black/55 p-0.5 text-white hover:bg-black/75","aria-label":"移除图片",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,eI.cn)("text-xs","ok"===u.kind?"text-primary":"text-destructive"),children:u.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(ez.Button,{onClick:()=>void N(),disabled:c||!t.trim(),children:[c?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(er_,{}),"提交反馈"]})})]}),(0,eb.jsxs)("section",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"我的反馈"}),v?(0,eb.jsx)("div",{className:"flex items-center justify-center py-8 text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})}):0===g.length?(0,eb.jsx)("p",{className:"rounded-lg border bg-card p-6 text-center text-xs text-muted-foreground",children:"你还没有提交过反馈。"}):g.map(e=>{let t=elm[e.status]??{label:e.status,variant:"secondary"};return(0,eb.jsxs)("article",{className:"grid gap-2 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsx)("p",{className:"min-w-0 flex-1 break-words text-sm font-medium",children:e.title}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,eb.jsx)(Bu,{variant:"outline",children:elh[e.type]??e.type}),(0,eb.jsx)(Bu,{variant:t.variant,children:t.label})]})]}),e.content?(0,eb.jsx)("p",{className:"whitespace-pre-wrap break-words text-xs text-muted-foreground",children:e.content}):null,e.images.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:e.images.map(t=>(0,eb.jsx)("button",{type:"button",className:"size-16 overflow-hidden rounded-md border",onClick:()=>w({issueId:e.id,imageId:t.id}),children:(0,eb.jsx)(elx,{issueId:e.id,imageId:t.id})},t.id))}):null,(0,eb.jsx)("p",{className:"text-[11px] text-muted-foreground",children:new Date(e.createdAt).toLocaleString("zh-CN")})]},e.id)})]})]}),(0,eb.jsx)(dC,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fv,{className:"max-w-3xl",children:y?(0,eb.jsx)(elv,{issueId:y.issueId,imageId:y.imageId,className:"max-h-[75vh] w-full object-contain"}):null})})]}):(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 text-foreground",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col items-center gap-3 py-16 text-center",children:[(0,eb.jsx)(jk,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsx)("p",{className:"text-sm font-medium",children:"未登录 Hub 账户"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请先在「系统设置 · Hub 账户」中登录,再提交问题反馈。"})]})})}function elg(e,t){let[n,r]=ew.useState(null);return ew.useEffect(()=>{let n=!0,a=null;return tr(e,t).then(e=>{a=e,n?r(e):URL.revokeObjectURL(e)}).catch(()=>{}),()=>{n=!1,a&&URL.revokeObjectURL(a)}},[e,t]),n}function elx({issueId:e,imageId:t}){let n=elg(e,t);return n?(0,eb.jsx)("img",{src:n,alt:"",className:"size-full object-cover"}):(0,eb.jsx)("div",{className:"flex size-full items-center justify-center bg-muted"})}function elv({issueId:e,imageId:t,className:n}){let r=elg(e,t);return r?(0,eb.jsx)("img",{src:r,alt:"",className:n}):(0,eb.jsx)("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})})}let elb={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},ely={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elw(e,t){let[n,r]=ew.useState(t);return ew.useEffect(()=>{let n=!0,a=!1;async function i(){if(!a){a=!0;try{let t=await fetch(eR(e),{cache:"no-store"});if(!t.ok)return;let a=await t.json();n&&r(a)}catch{n&&r(t)}finally{a=!1}}}i();let o=window.setInterval(i,2e3);return()=>{n=!1,window.clearInterval(o)}},[t,e]),n}function elj(){let e=elw("/api/local/machines/fleet",elb),{nodes:t,links:n}=e.topology;return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"shrink-0 border-b px-6 py-4",children:[(0,eb.jsx)("h2",{className:"text-base font-semibold tracking-normal",children:"组网关系"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"系统中各机器的拓扑关系图(自动生成)。节点为机器,连线表示机器之间的连接方式与实时延迟。"}),(0,eb.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-x-5 gap-y-1.5 text-xs text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["机器 ",e.totals.online,"/",e.totals.machines," 在线"]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-foreground"}),"直连 ",e.pathTotals.direct]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-foreground"}),"P2P ",e.pathTotals.p2p]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-muted-foreground"}),"中继 ",e.pathTotals.relay]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-destructive"}),"断开 ",e.pathTotals.broken]})]})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 p-4",children:0===t.length?(0,eb.jsx)("div",{className:"grid h-full place-items-center rounded-lg border border-dashed",children:(0,eb.jsx)("p",{className:"max-w-sm text-center text-sm text-muted-foreground",children:"暂未发现其它机器。登录 Hub 账户并把机器加入同一工作组后,这里会自动绘制组网拓扑。"})}):(0,eb.jsx)("div",{className:"h-full overflow-hidden rounded-lg border bg-card",children:(0,eb.jsx)(et5,{nodes:t,links:n})})}),(0,eb.jsx)("footer",{className:"shrink-0 border-t px-6 py-2",children:(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] text-muted-foreground",children:[(0,eb.jsx)("span",{children:"连接方式:"}),[{kind:"direct",label:"直连",className:"bg-foreground"},{kind:"p2p",label:"P2P",className:"bg-foreground"},{kind:"relay",label:"中继",className:"bg-muted-foreground"},{kind:"down",label:"断开",className:"bg-destructive"}].map(e=>(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:`h-0.5 w-4 rounded ${e.className}`}),e.label]},e.kind))]})})]})}let elk=[{value:"system",label:"跟随系统",help:"读取操作系统的系统代理设置(Windows 注册表 / Clash「系统代理」模式)。注意:macOS / Linux 上没有系统代理读取能力,此项等价于「仅环境变量」。"},{value:"env",label:"仅环境变量",help:"只使用 HTTP_PROXY / HTTPS_PROXY / NO_PROXY 环境变量,忽略系统代理设置。"},{value:"direct",label:"直连",help:"不使用任何代理,直接连接。在「只能走代理」的网络环境下会失败。"},{value:"custom",label:"自定义",help:"手动指定代理地址(见下方)。注意:当前仅支持 http / https 代理(CONNECT 隧道),socks5 代理可能无法生效。"}];function elN(e){let t=e.network;return{enableUTLS:t?.enableUTLS??!0,enableBrowserHeaders:t?.enableBrowserHeaders??!0,proxyMode:t?.proxyMode??"system",customProxyURL:t?.customProxyURL??"",retryCount:t?.retryCount??3,retryDelaysMs:t?.retryDelaysMs??[],enableFallback:t?.enableFallback??!0}}function elS(){let[e,t]=ew.useState(null),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1);function d(e){t(t=>t?{...t,...e}:t),c(!0)}async function u(){if(e&&!a){i(!0),l("");try{let n=await jd({network:e});t(elN(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"Save failed")}finally{i(!1)}}}if(ew.useEffect(()=>{!async function(){try{let e=await jc();t(elN(e))}catch(e){l(e instanceof Error?e.message:"Failed to load config")}finally{r(!1)}}()},[]),n)return(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取网络设置"});if(!e)return(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:o||"无法加载网络设置"})]});let f=elk.find(t=>t.value===e.proxyMode),h=function(e){if(!e)return e;try{let t=new URL(e);return(t.username||t.password)&&(t.username=t.username?"***":"",t.password=t.password?"***":""),t.toString()}catch{return e.replace(/\/\/[^/@]+@/,"//***:***@")}}(e.customProxyURL??"");return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"网络设置"})}),s&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:o})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"传输层伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模拟真实浏览器的 TLS 指纹与请求头,避免被 Cloudflare 等防护按机器人流量重置连接。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(vJ,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(hE,{}),(0,eb.jsx)(QA,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(QT,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(vJ,{checked:e.enableBrowserHeaders,onCheckedChange:e=>d({enableBrowserHeaders:e})})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"代理模式"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制所有出站请求(模型列表拉取 + 对话流)如何解析代理。换机器表现不一时,通常是这里的问题。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gR,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:elk.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),f?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:f.help}):null]}),"custom"===e.proxyMode?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(eA,{value:e.customProxyURL??"",onChange:e=>d({customProxyURL:e.currentTarget.value}),placeholder:"http://127.0.0.1:7890",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅支持 http / https 代理。若填写包含账号密码(user:pass),日志中会被脱敏处理。"}),h&&h!==e.customProxyURL?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["脱敏预览:",h]}):null]})]}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"重试与降级"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请求因网络抖动(连接重置 / 网关 5xx)失败时的自动恢复策略。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(ei9,{value:[e.retryCount],onValueChange:([e])=>d({retryCount:e}),min:0,max:10,step:1}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"可重试的请求失败后自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。默认 3。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(vJ,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function elC(){return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"shrink-0 border-b px-6 py-4",children:[(0,eb.jsx)("h2",{className:"text-base font-semibold tracking-normal",children:"网络设置"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"调整出站请求的传输伪装、代理模式与失败重试,以适配不同网络环境并应对 Cloudflare 连接异常。"})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-6",children:(0,eb.jsx)("div",{className:"mx-auto max-w-2xl",children:(0,eb.jsx)(elS,{})})})]})}let elM="local",elE=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function elO(){let{machines:e}=xk(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:elM,name:"本机",online:!0,reachable:!0,isLocal:!0});else{let e="online"===r.status;t.push({id:r.id,name:r.name,online:e,reachable:r.reachable??e,isLocal:!1})}return n||t.unshift({id:elM,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(elM);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??elM)},[t,n]),(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":"preferences-official-extensions",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"官方扩展"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为指定机器安装并管理官方扩展。扩展与 Agent 运行时同机部署,按机器各自安装。"})]}),(0,eb.jsxs)(mu,{value:n,onValueChange:r,className:"grid gap-4",children:[(0,eb.jsx)("div",{className:"overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsx)(my,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mw,{value:e.id,className:"gap-1.5",children:[(0,eb.jsx)(eP,{className:"size-3.5"}),(0,eb.jsx)("span",{className:"truncate",children:e.name}),(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(elP,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function elP({machine:e}){var t;let n=(t=e?.id??elM)===elM?void 0:t,r=e?.reachable??!0,[a,i]=ew.useState(null),[o,l]=ew.useState(!0),[s,c]=ew.useState(!1),[d,u]=ew.useState(0),[f,h]=ew.useState(!1),m=ew.useCallback(()=>u(e=>e+1),[]);ew.useEffect(()=>{if(!r){l(!1),c(!0),i(null);return}let e=!0,t=new AbortController;async function a(){try{let r=await GL(n,{signal:t.signal});if(!e)return;i(r.extensions??[]),c(!1)}catch{if(!e)return;c(!0)}finally{e&&l(!1)}}a();let o=f?window.setInterval(a,3e3):void 0;return()=>{e=!1,t.abort(),o&&window.clearInterval(o)}},[n,r,d,f]);let p=a?.find(e=>"browser"===e.id)??(a?elz:void 0);return o?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在获取扩展状态…"]}):s||!a?(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取扩展状态"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:r?"请确认该机器的运行时已启动,稍后重试。":"该机器当前不可达(离线或无连接路径)。"}),r&&(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:m,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(elI,{machineId:n,extension:p,onChanged:m,setPolling:h}):(0,eb.jsx)("div",{className:"rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:"该机器暂无可用的官方扩展。"})}let elz={id:"browser",name:"Vantaloom 浏览器",installed:!1,enabled:!1,running:!1,variant:"cloakbrowser",version:"",available:["cloakbrowser","chrome-for-testing"]};function elI({machineId:e,extension:t,onChanged:n,setPolling:r}){var a;let[i,o]=ew.useState(null),[l,s]=ew.useState(null),[c,d]=ew.useState(t.variant??"cloakbrowser");ew.useEffect(()=>{t.installed&&t.variant&&d(t.variant)},[t.installed,t.variant]);let u="install"===i;async function f(e,t,a=!1){o(e),s(null),a&&r(!0);try{await t(),n()}catch{s("操作失败,请稍后重试。")}finally{o(null),a&&r(!1)}}async function h(t){o("enable"),s(null),r(!0);try{await GH(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await GL(e,{timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);if(n&&n.running===t)break}catch{}}n()}catch{s(t?"启动失败,请稍后重试。":"停止失败,请稍后重试。")}finally{o(null),r(!1)}}let m="enable"===i,p=m&&!t.running||t.enabled&&!t.running,g=m&&t.running,x=t.installed?t.running?(0,eb.jsx)(Bu,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bu,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bu,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bu,{variant:"outline",children:"未安装"}),v=elE.filter(e=>!t.available?.length||t.available.includes(e.id));return(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-3",children:[(0,eb.jsx)("span",{className:"grid size-10 shrink-0 place-items-center rounded-md bg-primary/10 text-primary [&_svg]:size-5",children:(0,eb.jsx)(Uh,{})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold text-foreground",children:"Vantaloom 浏览器"}),x,t.installed&&t.version&&(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground",children:["v",t.version]})]}),(0,eb.jsx)("p",{className:"mt-1 text-xs leading-relaxed text-muted-foreground",children:"让 Agent 可操作真实浏览器:网站预览直连真实浏览器,可在指定机器上运行并远程观看 Agent 的操作过程。"})]})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"浏览器内核"}),(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:v.map(e=>{let n=c===e.id,r=t.installed;return(0,eb.jsxs)("button",{type:"button",disabled:r||null!==i,onClick:()=>d(e.id),className:(0,eI.cn)("flex flex-col gap-1 rounded-lg border p-3 text-left transition-colors",n?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground",(r||null!==i)&&"opacity-60"),"aria-pressed":n,children:[(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:e.label}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:e.description})]},e.id)})}),t.installed&&(0,eb.jsxs)("p",{className:"text-[11px] text-muted-foreground",children:["已安装的内核为 ",(a=t.variant,elE.find(e=>e.id===a)?.label??a),",如需更换请先卸载。"]})]}),(0,eb.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:t.installed?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(ez.Button,{size:"sm",disabled:null!==i,onClick:()=>h(!t.running),children:[m?(0,eb.jsx)(Vz,{className:"size-3.5"}):t.running?(0,eb.jsx)(jL,{className:"size-3.5"}):(0,eb.jsx)(VN,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(ez.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>GB(e),!0),children:["update"===i?(0,eb.jsx)(Vz,{className:"size-3.5"}):(0,eb.jsx)(bi,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(ez.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>GV(e)),children:["uninstall"===i?(0,eb.jsx)(Vz,{className:"size-3.5"}):(0,eb.jsx)(bo,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(ez.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>GF(e,c),!0),children:[u?(0,eb.jsx)(Vz,{className:"size-3.5"}):null,u?"正在安装…":"安装"]})}),t.installed&&(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"在此机器上运行"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后该机器的 Agent 可使用浏览器工具;关闭则停止浏览器与边车进程。"})]}),(0,eb.jsx)(vJ,{checked:t.enabled,disabled:null!==i,onCheckedChange:e=>void h(e),"aria-label":"在此机器上运行浏览器扩展"})]}),l&&(0,eb.jsx)("p",{className:"text-xs text-destructive",children:l})]})}let elA=(0,ek.default)("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]);function elT(e){if(!Number.isFinite(e)||e<0)return"—";if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=100?0:1)} ${t[r]}`}function elR({status:e}){switch(e){case"active":return(0,eb.jsx)(Bu,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bu,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bu,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bu,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bu,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bu,{variant:"outline",children:"等待中"})}}let elD=["complete","error","canceled"];function el_({download:e}){let{status:t,percent:n,totalBytes:r}=e,a=Math.max(0,Math.min(100,n));return r<0&&"active"===t?(0,eb.jsx)("div",{className:"relative h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-y-0 w-1/3 rounded-full bg-primary/70","vtl-download-indeterminate")})}):(0,eb.jsx)("div",{className:"relative h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("h-full rounded-full transition-all","error"===t?"bg-destructive":"complete"===t?"bg-emerald-500":"paused"===t?"bg-muted-foreground/60":"bg-primary","active"===t&&"vtl-download-stripes bg-[length:1rem_1rem]"),style:{width:`${a}%`}})})}function elL({download:e}){var t,n,r;let a,[i,o]=ew.useState(!1),l=ew.useCallback(async e=>{o(!0);try{await e()}catch{}finally{o(!1)}},[]),{status:s}=e,c="active"===s?!Number.isFinite(t=e.speedBps)||t<=0?"":`${elT(t)}/s`:"",d="active"===s?function(e){if(!Number.isFinite(e)||e<0)return"";let t=Math.round(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),a=t%60;return n>0?`${n}:${String(r).padStart(2,"0")}:${String(a).padStart(2,"0")}`:`${String(r).padStart(2,"0")}:${String(a).padStart(2,"0")}`}(e.etaSeconds):"",u=!(e.totalBytes<0&&"active"===s),f="active"===s,h="paused"===s,m="error"===s||"canceled"===s,p="active"===s||"paused"===s||"waiting"===s,g=elD.includes(s);return(0,eb.jsxs)("div",{className:"grid gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.label||e.url||e.id}),(0,eb.jsx)(elR,{status:s}),e.attempt>1&&(0,eb.jsxs)("span",{className:"text-[11px] text-muted-foreground",children:["重试 ",e.attempt]})]}),e.dest&&(0,eb.jsx)("p",{className:"mt-0.5 truncate text-[11px] text-muted-foreground",children:e.dest})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[i&&(0,eb.jsx)(Vz,{className:"size-3.5"}),f&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>mG(e.id,"pause")),children:(0,eb.jsx)(elA,{className:"size-3.5"})}),h&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>mG(e.id,"resume")),children:(0,eb.jsx)(VN,{className:"size-3.5"})}),m&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>mG(e.id,"retry")),children:(0,eb.jsx)(bi,{className:"size-3.5"})}),p&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>mG(e.id,"cancel")),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})}),g&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7 text-muted-foreground hover:text-destructive",disabled:i,title:"移除","aria-label":"移除",onClick:()=>l(()=>mG(e.id,"remove")),children:(0,eb.jsx)(bo,{className:"size-3.5"})})]})]}),(0,eb.jsx)(el_,{download:e}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[u&&(0,eb.jsxs)("span",{className:"tabular-nums",children:[Math.round(e.percent),"%"]}),(0,eb.jsx)("span",{className:"tabular-nums",children:(n=e.downloadedBytes,r=e.totalBytes,a=elT(n),r<0?a:`${a} / ${elT(r)}`)}),c&&(0,eb.jsx)("span",{className:"tabular-nums",children:c}),d&&(0,eb.jsxs)("span",{className:"tabular-nums",children:["剩余 ",d]}),e.connections>0&&(0,eb.jsxs)("span",{className:"tabular-nums",children:[e.connections," 连接"]})]}),"error"===s&&e.error&&(0,eb.jsx)("p",{className:"text-[11px] text-destructive",children:e.error})]})}function el$(){let[e,t]=ew.useState([]),[n,r]=ew.useState("loading"),[a,i]=ew.useState(0),o=ew.useCallback(()=>{r("loading"),i(e=>e+1)},[]);return(ew.useEffect(()=>{let e,n=!1,a=new AbortController,i=e=>{n||(t(e),r("ready"))};async function o(){try{let e=await mq({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof mU)return void r("unavailable")}try{await mW(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof mU)return void r("unavailable");r(e=>"ready"===e?"ready":"error"),l()}}function l(){n||(e=setTimeout(()=>{n||o()},2e3))}return o(),()=>{n=!0,a.abort(),e&&clearTimeout(e)}},[a]),"loading"===n)?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在获取下载状态…"]}):"unavailable"===n||"error"===n?(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取下载状态"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请确认本机运行时已启动,稍后重试。"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:o,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]}):0===e.length?(0,eb.jsx)("div",{className:"rounded-lg border bg-card p-10 text-center text-sm text-muted-foreground",children:"暂无下载任务"}):(0,eb.jsx)("div",{className:"grid gap-2",children:e.map(e=>(0,eb.jsx)(elL,{download:e},e.id))})}function elF({label:e,description:t,value:n,min:r,max:a,onChange:i,disabled:o}){return(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:e}),t&&(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:t}),(0,eb.jsx)(eA,{type:"number",inputMode:"numeric",min:r,max:a,value:Number.isFinite(n)?n:0,disabled:o,onChange:e=>{let t=Number(e.target.value);if(Number.isNaN(t))return;let n=t;void 0!==r&&(n=Math.max(r,n)),void 0!==a&&(n=Math.min(a,n)),i(n)},className:"max-w-[12rem]"})]})}function elB(){let[e,t]=ew.useState(null),[n,r]=ew.useState("loading"),[a,i]=ew.useState(!1),[o,l]=ew.useState(!1),[s,c]=ew.useState(null),[d,u]=ew.useState(0),f=ew.useCallback(()=>{r("loading"),u(e=>e+1)},[]);ew.useEffect(()=>{let e=!1,n=new AbortController;return async function(){try{let a=await mX({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof mU?"unavailable":"error")}}(),()=>{e=!0,n.abort()}},[d]);let h=ew.useCallback((e,n)=>{t(t=>t?{...t,[e]:n}:t),l(!1)},[]),m=ew.useCallback(async()=>{if(e){i(!0),c(null),l(!1);try{let n=await mY(e);t(n),l(!0)}catch{c("保存失败,请稍后重试。")}finally{i(!1)}}},[e]);return"loading"===n?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在加载下载设置…"]}):"unavailable"!==n&&"error"!==n&&e?(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"下载目录"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载文件的默认保存位置。"}),(0,eb.jsx)(eA,{type:"text",value:e.downloadDir,disabled:a,placeholder:"例如 D:\\\\Downloads",onChange:e=>h("downloadDir",e.target.value)})]}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(elF,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(elF,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(elF,{label:"失败重试次数",description:"任务失败后的自动重试上限。",value:e.maxRetries,min:0,max:20,disabled:a,onChange:e=>h("maxRetries",e)})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"代理"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载使用的代理地址,留空则不使用代理。"}),(0,eb.jsx)(eA,{type:"text",value:e.proxy,disabled:a,placeholder:"例如 http://127.0.0.1:7890(留空=不使用)",onChange:e=>h("proxy",e.target.value)})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"校验文件哈希"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"下载完成后校验文件哈希以确保完整性。"})]}),(0,eb.jsx)(vJ,{checked:e.verifyChecksums,disabled:a,onCheckedChange:e=>h("verifyChecksums",e),"aria-label":"校验文件哈希"})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,eb.jsxs)(ez.Button,{size:"sm",disabled:a,onClick:m,children:[a?(0,eb.jsx)(Vz,{className:"size-3.5"}):null,a?"正在保存…":"保存设置"]}),o&&!a&&(0,eb.jsx)("span",{className:"text-xs text-emerald-600 dark:text-emerald-400",children:"已保存"}),s&&(0,eb.jsx)("span",{className:"text-xs text-destructive",children:s})]})]}):(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取下载设置"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请确认本机运行时已启动,稍后重试。"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:f,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]})}function elV(){return(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":"system-downloads",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("h3",{className:"flex items-center gap-2 text-base font-semibold tracking-normal",children:[(0,eb.jsx)(v2,{className:"size-4"}),"下载"]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"管理本机的下载任务,并配置下载目录、并发与代理等全局选项。"})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"下载任务"}),(0,eb.jsx)(el$,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(elB,{})]})]})})})}let elH=["light","dark","jelly"],elU={light:{label:"Light",icon:eau,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eal,className:"text-sidebar-foreground/60"},jelly:{label:"Jelly",icon:function(e){return(0,eb.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...e,children:[(0,eb.jsx)("path",{d:"M6.5 11.5C6.5 8 8.7 5.5 12 5.5s5.5 2.5 5.5 6v.6c0 .8-.6 1.4-1.4 1.4H7.9c-.8 0-1.4-.6-1.4-1.4v-.6Z"}),(0,eb.jsx)("path",{d:"M7.8 13.5c.4 1 1.1 1.5 2 1.5s1.6-.5 2-1.5c.4 1 1.1 1.5 2 1.5s1.6-.5 2-1.5"}),(0,eb.jsx)("path",{d:"M9 15.5c0 1.4-1.2 1.4-1.2 2.8 0 .7.3 1.2.8 1.7"}),(0,eb.jsx)("path",{d:"M12 15.5c0 1.6-1.4 1.6-1.4 3.2 0 .7.3 1.2.8 1.8"}),(0,eb.jsx)("path",{d:"M15 15.5c0 1.4 1.2 1.4 1.2 2.8 0 .7-.3 1.2-.8 1.7"})]})},className:"text-primary"}};function elq(){let{resolvedTheme:e,setTheme:t}=(0,hO.useTheme)(),[n,r]=ew.useState(eaC.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaC.appearanceThemeStorageKey)??eaC.defaultAppearanceTheme;r(e),(0,eaC.applyAppearanceTheme)({theme:e})},[]);let a=n===eaC.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=elH.indexOf(a),o=elH[(i+1)%elH.length]??"light",{icon:l,label:s,className:c}=elU[a];function d(e){r(e),window.localStorage.setItem(eaC.appearanceThemeStorageKey,e),(0,eaC.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,eI.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${Q8.theme}: ${s}`,title:`${Q8.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(eaC.jellyAppearanceTheme);return}d(eaC.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let elW=(0,ek.default)("chart-area",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M7 11.207a.5.5 0 0 1 .146-.353l2-2a.5.5 0 0 1 .708 0l3.292 3.292a.5.5 0 0 0 .708 0l4.292-4.292a.5.5 0 0 1 .854.353V16a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z",key:"q0gr47"}]]);(0,ek.default)("layout-dashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),(0,ek.default)("route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);let elK=[{id:"run-ui-polish",title:"组件库视觉回归检查",machine:"Studio-PC",agent:"UI Polish",state:"running",started:"14:08",runtime:"22m",progress:68,load:54},{id:"run-runner-build",title:"Linux runner 镜像构建",machine:"Linux-runner-02",agent:"Build Agent",state:"running",started:"14:15",runtime:"15m",progress:41,load:86},{id:"run-access-audit",title:"工作组权限审阅",machine:"Studio-PC",agent:"Access Agent",state:"blocked",started:"14:21",runtime:"9m",progress:37,load:18},{id:"run-docs",title:"发布说明摘要",machine:"MacBook-build",agent:"Docs Agent",state:"queued",started:"等待",runtime:"0m",progress:0,load:0},{id:"run-cache-clean",title:"缓存清理策略验证",machine:"Linux-runner-02",agent:"Ops Sentinel",state:"failed",started:"13:54",runtime:"6m",progress:28,load:12}],elG=[{id:"worker-studio",machine:"Studio-PC",role:"local coordinator",active:3,capacity:6,cpu:42,memory:68},{id:"worker-runner",machine:"Linux-runner-02",role:"gpu worker",active:4,capacity:5,cpu:76,memory:81},{id:"worker-mac",machine:"MacBook-build",role:"build host",active:0,capacity:3,cpu:8,memory:24}],elX=[{id:"confirm-shell",title:"Studio-PC 请求执行发布前文件写入",meta:"UI Polish · apply_patch",tone:"normal"},{id:"confirm-service",title:"Linux-runner-02 请求重启 runner 服务",meta:"Ops Sentinel · Restart-Service",tone:"warning"},{id:"confirm-token",title:"工作组 token 加入新机器",meta:"Access Agent · admin required",tone:"normal"}],elY=[["14:29","Studio-PC","pnpm --filter vantaloom-app lint","完成"],["14:27","Linux-runner-02","docker build agent-runtime","运行中"],["14:22","Studio-PC","apply_patch agent settings","完成"],["14:17","MacBook-build","pnpm typecheck","排队"],["14:03","Linux-runner-02","cache prune dry-run","失败"]],elZ={cpu:{label:"CPU",color:"var(--chart-1)"},memory:{label:"Memory",color:"var(--chart-3)"},network:{label:"Network",color:"var(--chart-5)"}};function elJ(e,t,n=42,r){return(0,eb.jsx)("section",{className:(0,eI.cn)("size-full rounded-xl border bg-card p-5",r&&"vtl-jelly-image-card",r&&r.includes("/bg")&&"vtl-jelly-image-card-shadowless"),style:r?Q3({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeN,{label:e,value:t,minSize:n})})}function elQ(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let el0={metrics:{online:2,health:88.4,latency:"38ms",events:17},machines:[{id:"studio",name:"Studio-PC",os:"Windows",status:"online",link:"direct",heartbeat:"3s",cpu:42,memory:68,disk:71,network:24},{id:"runner",name:"Linux-runner-02",os:"Linux",status:"online",link:"p2p",heartbeat:"5s",cpu:76,memory:81,disk:62,network:43},{id:"mac",name:"MacBook-build",os:"macOS",status:"sleeping",link:"direct",heartbeat:"2m",cpu:8,memory:24,disk:48,network:6}],trend:[{time:"09:00",cpu:36,memory:54,network:24},{time:"10:00",cpu:48,memory:61,network:29},{time:"11:00",cpu:44,memory:58,network:34},{time:"12:00",cpu:63,memory:72,network:41},{time:"13:00",cpu:58,memory:69,network:37},{time:"14:00",cpu:71,memory:76,network:46}],networkLinks:[["Studio-PC","Linux-runner-02","P2P","38ms","0.3%"],["Studio-PC","MacBook-build","Direct","12ms","0.0%"],["Linux-runner-02","MacBook-build","Relay fallback","84ms","1.1%"]],events:[["14:31","Linux-runner-02 心跳延迟升高"],["14:28","Studio-PC 完成 2 个工具调用"],["14:19","MacBook-build 进入睡眠状态"],["14:12","工作组权限策略同步完成"],["14:04","P2P 链路切换到备用路径"]],serviceHealth:[{id:"local-service",name:"Local service",state:"正常",samples:[96,98,97,95,96,94,97,98,96,95,97,96]},{id:"agent-runtime",name:"Agent runtime",state:"正常",samples:[91,93,94,90,88,92,94,93,91,89,92,94]},{id:"p2p-mesh",name:"P2P mesh",state:"波动",samples:[78,82,76,73,68,71,74,79,83,80,77,72]},{id:"plugin-bridge",name:"Plugin bridge",state:"告警",samples:[88,86,84,82,79,74,63,54,48,52,67,76]}]},el1=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("运行中","运行队列"),render:e=>elJ(e.title,"07",44,Q1)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(ub,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("排队","调度器"),render:e=>elJ(e.title,"04",44,Q2)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(en_,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("待确认","确认队列"),render:e=>elJ(e.title,"03",44,Q5)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("Worker","Agent worker"),render:e=>elJ(e.title,"14",44,Q4)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(GT,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:elQ("任务队列","运行队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et8,{items:elK})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:elQ("Agent worker","Worker 状态"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et9,{workers:elG})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(eeE,{className:"size-4"}),defaultSize:{w:7,h:4},defaultConfig:elQ("最近执行","执行日志"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et6,{items:elY})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:5,h:4},defaultConfig:elQ("待确认","确认队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et3,{items:elX})]})}],el2=[{id:"metric-runs",kind:"metric-runs",x:0,y:0,w:3,h:2},{id:"metric-queued",kind:"metric-queued",x:3,y:0,w:3,h:2},{id:"metric-blocked",kind:"metric-blocked",x:6,y:0,w:3,h:2},{id:"metric-workers",kind:"metric-workers",x:9,y:0,w:3,h:2},{id:"queue",kind:"queue",x:0,y:2,w:7,h:5},{id:"workers",kind:"workers",x:7,y:2,w:5,h:5},{id:"log",kind:"log",x:0,y:7,w:7,h:4},{id:"confirmations",kind:"confirmations",x:7,y:7,w:5,h:4}];function el5(e=el0){return[{id:"metric-online",title:"在线机器",description:"当前在线机器数量。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("在线机器","机器心跳"),render:t=>elJ(t.title,String(e.metrics.online),44,Q1)},{id:"metric-health",title:"健康度",description:"工作组整体健康度。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("健康度","服务遥测"),render:t=>elJ(t.title,`${e.metrics.health}%`,44,Q2)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(eeA,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("平均延迟","网络遥测"),render:t=>elJ(t.title,e.metrics.latency,44,Q5)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("事件","事件流"),render:t=>elJ(t.title,String(e.metrics.events),44,Q4)},{id:"machines",title:"机器健康矩阵",description:"各机器资源和心跳状态。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:elQ("机器健康矩阵","机器遥测"),render:t=>(0,eb.jsxs)("section",{className:"vtl-jelly-image-card flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",style:Q3({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enr,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(elW,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:elQ("资源趋势","机器遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(ens,{config:elZ,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(QG,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:elQ("网络连接","网络遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enl,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:elQ("事件流","事件流"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enn,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:elQ("服务健康","服务遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enc,{services:e.serviceHealth})]})}]}el5();let el4=[{id:"metric-online",kind:"metric-online",x:0,y:0,w:3,h:2},{id:"metric-health",kind:"metric-health",x:3,y:0,w:3,h:2},{id:"metric-latency",kind:"metric-latency",x:6,y:0,w:3,h:2},{id:"metric-events",kind:"metric-events",x:9,y:0,w:3,h:2},{id:"machines",kind:"machines",x:0,y:2,w:7,h:5},{id:"trend",kind:"trend",x:7,y:2,w:5,h:5},{id:"network",kind:"network",x:0,y:7,w:6,h:4},{id:"events",kind:"events",x:6,y:7,w:6,h:4},{id:"services",kind:"services",x:0,y:11,w:12,h:3}],el3={totals:{machines:4,online:2,runtime:3,tokens:7},machines:[{id:"studio",name:"Studio-PC",role:"本机",group:"Core",os:"Windows 11",runtime:"0.16.4",state:"online",tags:["admin","shell","files","scheduler"],agent:"6/8",cpu:42,memory:68,version:"Agent runtime 0.16.4",admin:"Allay"},{id:"runner",name:"Linux-runner-02",role:"GPU worker",group:"Compute",os:"Ubuntu 24.04",runtime:"0.16.3",state:"online",tags:["gpu","agent","files"],agent:"4/6",cpu:76,memory:81,version:"Agent runtime 0.16.3",admin:"Ops"},{id:"mac",name:"MacBook-build",role:"构建机",group:"Build",os:"macOS 15.4",runtime:"0.15.9",state:"sleeping",tags:["build","readonly"],agent:"0/3",cpu:8,memory:24,version:"Agent runtime 0.15.9",admin:"Allay"},{id:"observer",name:"Observer-01",role:"只读观测节点",group:"Edge",os:"Debian 13",runtime:"0.16.2",state:"warning",tags:["readonly","audit"],agent:"1/2",cpu:18,memory:36,version:"Agent runtime 0.16.2",admin:"Security"}],topology:{nodes:[{id:"studio",label:"Studio-PC",meta:"本机",x:50,y:18},{id:"runner",label:"Linux-runner-02",meta:"GPU worker",x:22,y:60},{id:"mac",label:"MacBook-build",meta:"构建机",x:76,y:58,state:"warning"},{id:"observer",label:"Observer-01",meta:"只读观测",x:50,y:82,state:"warning"}],links:[{id:"sr",from:"studio",to:"runner",kind:"p2p",label:"P2P",meta:"38ms / 0.3%"},{id:"sm",from:"studio",to:"mac",kind:"direct",label:"Direct",meta:"12ms / 0%"},{id:"ro",from:"runner",to:"observer",kind:"relay",label:"Relay",meta:"84ms / 1.1%"},{id:"mo",from:"mac",to:"observer",kind:"down",label:"Down",meta:"lost"}]},pathTotals:{direct:1,p2p:1,relay:1,broken:1},latency:[{time:"09:00",p2p:42,direct:12,relay:96},{time:"10:00",p2p:39,direct:12,relay:88},{time:"11:00",p2p:44,direct:14,relay:91},{time:"12:00",p2p:38,direct:12,relay:84},{time:"13:00",p2p:36,direct:11,relay:86},{time:"14:00",p2p:41,direct:13,relay:93}],candidates:[["Studio-PC","Linux-runner-02","P2P","symmetric NAT","38ms","0.3%"],["Studio-PC","MacBook-build","Direct","open port 4178","12ms","0.0%"],["Linux-runner-02","Observer-01","Relay","udp blocked","84ms","1.1%"],["MacBook-build","Observer-01","Interrupted","sleep","-","-"]]};function el6({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eey,{boardId:"runtime-operations",definitions:el1,initialLayouts:el2,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function el8({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elw("/api/local/machines/telemetry",ely),a=ew.useMemo(()=>el5(r),[r]);return(0,eb.jsx)(eey,{boardId:"telemetry",definitions:a,initialLayouts:el4,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function el7({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,eI.cn)("[[data-vtl-theme=jelly]_&]:opacity-70",e),children:[(0,eb.jsx)("path",{d:"m658 393 2 1v47l57 1v1l-12 2-45 5v89l2 14 4 7 6 3h12l8-2-5-10-1-4v-11l3-8 4-6 7-7 14-8 16-6 33-9h3l-1-16-4-8-6-5-10-3h-15l-13 3-16 7-7 5 1-4 8-8 14-8 12-4 7-1h23l16 4 9 6 4 5 4 9 1 5 1 69 2 11 3 5 7 5v1h-28l-6-4-4-11v-7h-2l-2 4-7 8-11 8-10 4-4 1h-21l-9-4-7-5-14 7-7 2h-18l-11-4-6-5-5-10-1-4-1-33v-61l1-4-26 3-9-7-4-3 4-1 34-2v-34l2-5zm107 104-19 6-17 8-10 9-4 8-1 4v11l3 8 8 7 7 2h8l10-3 10-7 6-7 1-2v-44z"}),(0,eb.jsx)("path",{d:"m1147 452h15l11 3 10 9 5 10v3h2l2-5 10-10 12-7 11-3h18l10 3 6 4 7 8 4 12 1 9 1 62 3 12 4 5 3 3h-38l-1-86-2-9-5-7-7-3h-12l-10 3-9 6-7 8-1 88h-26l-1-88-3-9-5-6-6-2h-11l-9 3-9 7-4 6-1 89h-34l6-14 4-19 1-10v-28l-3-19-6-18-4-9h28l3 8 3 13 7-8 8-7 10-5z"}),(0,eb.jsx)("path",{d:"m556 449h19l13 4 10 9 4 9 2 13 1 67 3 10 4 5 5 4h-40l-1-85-3-12-4-6-7-4-3-1h-14l-11 4-10 7-5 8-1 6-1 83h-25l-1-99-2-17 1-1h24l2 6 2 13 9-10 12-8 11-4z"}),(0,eb.jsx)("path",{d:"m409 450h22l16 4 9 6 6 9 3 11 1 71 2 9 3 5 6 4v1h-27l-6-4-3-7-2-9-11 12-13 8-9 3-7 1h-13l-12-3-10-7-6-10-1-4v-13l5-12 4-5 12-9 18-8 35-10 6-2v-14l-3-8-5-5-7-3-4-1h-15l-13 3-20 10 6-9 10-7 13-5zm27 47-23 8-13 7-8 7-5 9-1 4v11l5 10 5 4 8 3h10l11-4 8-6 5-6 1-4v-43z"}),(0,eb.jsx)("path",{d:"m918 450h22l15 3 16 8 12 11 7 8 7 14 3 11v21l-3 12-4 8-5-5-8-17-11-33-7-13-9-10-10-6-7-2h-12l-11 4-8 7-7 10-4 13-1 7v18l3 14 4 10 6 8 9 8 10 4 6 1h9l9-2 7-4 5 1 5 5v2l-10 5-13 3h-22l-15-4-16-8-10-9-6-7-7-14-3-14v-16l3-13 6-12 8-10 12-9 12-5z"}),(0,eb.jsx)("path",{d:"m224 442h17l15 3 10 5 10 9 9 13 14 29 13 28 6 14v2h2l1-5 16-39 17-40 4-8h9l-2 6-18 42-11 26-17 40-9 21-3-1-29-58-10-19-12-23-8-11-9-10-9-7-10-4-5-1h-19l-15 3 4-4 13-6 16-4z"}),(0,eb.jsx)("path",{d:"m1010 450h19l17 4 13 7 12 11 7 11 5 13 2 11v10l-3 16-4 10-9 12-8 7-12 7-13 4-7 1h-25l-16-4-13-7-11-9-7-9-7-14-2-9v-17l3-12 5-10 3-1 7 18 11 33 8 14 8 9 8 5 12 3h8l12-3 10-7 6-8 5-12 2-11v-19l-3-14-5-12-8-10-10-6-7-2h-13l-11 4-6 4-4-2-6-5 3-3 10-5z"}),(0,eb.jsx)("path",{d:"m848 371h1l1 171 2 9 4 6 6 5 19 5 6 2v1h-65l-1-188z"})]})}function el9(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function ese(e){return"u"<typeof document?null:document.querySelector(e)}function est(){return null!=ese('[role="menu"]')}function esn(){return null!=ese('[data-tour="init-wizard"]')}function esr(){let e=ese('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=el3){elQ("机器","机器组"),elQ("在线","机器心跳"),elQ("Runtime","Agent runtime"),elQ("Token","机器注册"),elQ("机器组","机器组"),elQ("拓扑图","网络拓扑"),elQ("直连","网络拓扑"),elQ("P2P","网络拓扑"),elQ("Relay","网络拓扑"),elQ("中断","网络拓扑"),elQ("延迟","网络遥测"),elQ("候选路径","网络候选路径")}(),elQ("日志与审计","审计事件"),elQ("筛选","审计筛选"),elQ("拒绝事件","审计事件"),elQ("事件趋势","审计事件");var esa=e.i(64990);function esi(){let e=sy(),[t,n]=ew.useState(!1);ew.useEffect(()=>{try{n("1"===window.localStorage.getItem("vtl:sidebar-collapsed"))}catch{}},[]);let r=ew.useCallback(()=>{n(e=>{let t=!e;try{window.localStorage.setItem("vtl:sidebar-collapsed",t?"1":"0")}catch{}return t})},[]),[a,i]=ew.useState("home"),[o,l]=ew.useState(!1),[s,c]=ew.useState(),[d,u]=ew.useState(),[f,h]=ew.useState([]),[m,p]=ew.useState([]),[g,x]=ew.useState("conversation"),[v,b]=ew.useState(0),y=s?.conversation.id,w=s?.conversation.ownerMachineId;ew.useEffect(()=>{h([]),p([]),x("conversation")},[y]),ew.useEffect(()=>{let e;if(!y||"new-agent-conversation"!==a&&"project-conversation"!==a)return void p([]);let t=!1,n=async()=>{let r=await sA(y,w);t||(p(r),e=window.setTimeout(n,!function e(t){return t.some(t=>t.running||e(t.children??[]))}(r)?6e3:2e3))};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[y,w,a]);let[j,k]=ew.useState(),[N,S]=ew.useState(!1),[C,M]=ew.useState([]),[E,O]=ew.useState([]),[P,z]=ew.useState({}),[I,A]=ew.useState(),[T,R]=ew.useState(u_),[D,_]=ew.useState([]),[L,$]=ew.useState(),[F,B]=ew.useState(),[V,H]=ew.useState(),[U,q]=ew.useState(),W=ew.useRef(!1),K=ew.useCallback(e=>{R(t=>iQ(e,t))},[]),G=ew.useCallback(e=>{_(t=>iQ(e,t))},[]),X=ew.useCallback(async(e,t)=>{let n="u">typeof performance?performance.now():Date.now();console.debug(`[open] click conversation=${e} owner=${t??"local"}`),u({id:e,ownerMachineId:t}),i("new-agent-conversation");let r=()=>Math.round(("u">typeof performance?performance.now():Date.now())-n);try{let n=await sB(e,t);console.debug(`[open] detail loaded in ${r()}ms (id=${e})`),c(n),u(t=>t?.id===e?void 0:t)}catch(n){if(n instanceof sk){let r=n.openedBy?.displayName||"另一台设备";if(window.confirm(`此对话正在「${r}」上打开,无法同时操作。是否强制接管(对方将被踢出)?`)){try{let n=await sB(e,t,{force:!0});c(n)}finally{u(t=>t?.id===e?void 0:t)}return}u(t=>t?.id===e?void 0:t),s||i("home");return}console.warn(`[open] failed after ${r()}ms (id=${e})`,n),u(t=>t?.id===e?void 0:t),s||i("home")}},[s]),Y=ew.useCallback(async(e,t)=>{h([]),await X(e,t)},[X]),Z=ew.useCallback(()=>{c(void 0),i("new-agent-conversation")},[]),J=ew.useCallback(async()=>{let e=await sP();e?await X(e.conversation.id,e.conversation.ownerMachineId):Z()},[X,Z]),Q=ew.useCallback(async()=>{W.current=!0,R(u_),_([]),i("new-canvas");try{let e=await QB({title:"新画布",nodes:u_,edges:[]});B(e.canvas.id),H("local")}catch{B(void 0),H(void 0),W.current=!1}},[]),ee=ew.useCallback(async(e,t)=>{try{await QH(e,t);let n=await QF(e,t);W.current=!0,R(n.nodes),_(n.edges),B(n.canvas.id),H(n.canvas.ownerMachineId),i("new-canvas")}catch{}},[]),et=ew.useCallback(e=>{q(e),i("project-overview")},[]),en=ew.useCallback(e=>{q(e),i("kanban")},[]),er=ew.useCallback(e=>{q(e),i("project-settings")},[]),ea=ew.useCallback(async(e,t)=>{q(e);let n=t;if(!n)try{n=(await enE(e)).canvasId}catch{}if(!n)try{n=(await QB({title:"工程画布",nodes:u_,edges:[]})).canvas.id,await enP(e,{canvasId:n}).catch(()=>{})}catch{return}await ee(n)},[ee]),ei=ew.useCallback(async(e,t,n)=>{q(e),h([]),u({id:t,ownerMachineId:n}),i("project-conversation");try{let e=await sB(t,n);c(e)}catch{}finally{u(e=>e?.id===t?void 0:e)}},[]),eo=ew.useCallback(()=>{i("new-project")},[]),el=ew.useCallback(async e=>{try{let t=await enR(e);await ei(e,t.id,t.ownerMachineId)}catch{}},[ei]);ew.useEffect(()=>{if(!F)return;if(W.current){W.current=!1;return}let e=window.setTimeout(()=>{QV(F,{nodes:T,edges:D,nodeIds:T.map(e=>e.id)},V).catch(()=>{})},800);return()=>window.clearTimeout(e)},[T,D,F,V]);let es=ew.useCallback(({item:t})=>{if(!e||"new-canvas"!==t.id&&"all-canvases"!==t.id&&"open-recent-canvas"!==t.id){if("new-canvas"===t.id)return void Q();if("all-canvases"===t.id)return void i("all-canvases");if("new-agent-conversation"===t.id)return void Z();if("open-recent-conversation"===t.id)return void J();if("runs"===t.id)return void i("runs");if("telemetry"===t.id)return void i("telemetry");("preferences"===t.id||"preferences-model-routes"===t.id||"preferences-agent-config"===t.id||"preferences-subagent-config"===t.id||"preferences-cc-engine-config"===t.id||"preferences-system-prompt"===t.id||"preferences-skills"===t.id||"preferences-memory"===t.id||"preferences-layout"===t.id||"preferences-official-extensions"===t.id||"network-topology"===t.id||"network-settings"===t.id||"system-downloads"===t.id||"check-update"===t.id||"account"===t.id||"balance-usage"===t.id||"feedback"===t.id)&&i(t.id)}},[Q,e,J,Z]),{start:ec}=(0,esa.useTour)(),ed=ew.useCallback(()=>{var e;ec((e={select:e=>es({item:{id:e}}),startNewConversation:Z,goHome:()=>{i("home"),c(void 0)}},{id:"product-tour",steps:[{id:"intro",centered:!0,title:"欢迎使用 Vantaloom 👋",body:(0,eb.jsxs)(eb.Fragment,{children:["这是一份手把手向导,会高亮关键位置并在需要时",(0,eb.jsx)("b",{children:"请你亲自操作"}),"(没做完不会出现「下一步」)。 全程界面都可正常点击;随时按 ",(0,eb.jsx)("kbd",{children:"Esc"})," 或右上角 ✕ 退出。"]})},{id:"theme",before:el9(()=>e.goHome()),target:()=>ese('[role="menu"]')??ese('[data-tour="account-button"]'),gate:est,gateHint:"点击用户名按钮展开菜单",padding:6,title:"切换主题",body:(0,eb.jsxs)(eb.Fragment,{children:["点击左下角的 ",(0,eb.jsx)("b",{children:"用户名按钮"})," 打开菜单。展开后,里面的 ",(0,eb.jsx)("b",{children:"外观 / 主题"})," 项每点一次就在"," ",(0,eb.jsx)("b",{children:"浅色 → 深色 → 果冻"})," 之间循环。"]})},{id:"model-routes-add",before:el9(()=>e.select("preferences-model-routes")),target:()=>ese('[data-tour="model-route-form"]')??ese('[data-tour="add-model-route"]'),gate:()=>null!=ese('[data-tour="model-route-form"]'),gateHint:"点击「添加模型路由」",title:"配置模型渠道(1/2)",body:(0,eb.jsxs)(eb.Fragment,{children:["进入 ",(0,eb.jsx)("b",{children:"设置 → 模型路由"}),"。请点 ",(0,eb.jsx)("b",{children:"添加模型路由"})," 新增一个第三方渠道(任何 OpenAI / Anthropic 兼容 API 都行)。"]})},{id:"model-routes-fields",before:el9(()=>e.select("preferences-model-routes")),target:'[data-tour="model-route-form"]',waitForTarget:2500,title:"配置模型渠道(2/2)",body:(0,eb.jsxs)(eb.Fragment,{children:["表单各项:",(0,eb.jsx)("b",{children:"提供商名称"})," 仅作标识;",(0,eb.jsx)("b",{children:"协议"})," 选 OpenAI / Anthropic 风格;",(0,eb.jsx)("b",{children:"Endpoint URL"})," 填到 ",(0,eb.jsx)("code",{children:"/v1"})," 这一级;",(0,eb.jsx)("b",{children:"API Key"})," 是密钥;",(0,eb.jsx)("b",{children:"可用模型"})," 勾选启用并可设上下文长度。",(0,eb.jsx)("br",{}),"⚠️ 填完",(0,eb.jsx)("b",{children:"务必点「保存」"}),",否则不生效。"]})},{id:"agent-config-compression",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-compression"]',title:"代理配置 · 压缩上下文",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → 代理配置"})," 的第一块:当对话 token 接近模型上下文窗口的设定百分比时,自动用",(0,eb.jsx)("b",{children:"压缩模型"})," 压缩历史。阈值 0% 表示关闭,建议 70%-85%。"]})},{id:"agent-config-summary",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-summary"]',title:"代理配置 · 对话摘要",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"对话摘要"}),":开启后用",(0,eb.jsx)("b",{children:"摘要模型"}),"自动生成 / 更新对话标题与每轮的轮次标题,方便在侧边栏 与时间轴里快速辨认。"]})},{id:"agent-config-approval",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-approval"]',title:"代理配置 · 命令审批",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"命令审批"}),":在 Auto 权限模式下,用",(0,eb.jsx)("b",{children:"审批模型"})," + ",(0,eb.jsx)("b",{children:"审批提示词"})," 判断 Agent 发起的命令 是否自动放行。留空则非危险命令全部放行。改完记得 ",(0,eb.jsx)("b",{children:"保存"}),"。"]})},{id:"subagent-explore",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-explore"]',title:"子代理 · 探索",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → 子代理配置"}),"。",(0,eb.jsx)("b",{children:"探索"})," 子代理擅长只读检索代码 / 资料。可单独设它的",(0,eb.jsx)("b",{children:"使用模型"}),"(留空则继承上级)与",(0,eb.jsx)("b",{children:"系统提示词"}),"。"]})},{id:"subagent-workflow",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-workflow"]',title:"子代理 · 工作流",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"工作流"})," 子代理负责多步骤任务编排,同样可单独配模型与提示词。"]})},{id:"subagent-operator",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-operator"]',title:"子代理 · 操作",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"操作"})," 子代理执行写文件 / 跑命令等动手类任务,工具集固定。"]})},{id:"subagent-custom",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-custom"]',title:"子代理 · 自定义",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"自定义子代理"}),":主 Agent 可自取名字、从你设的",(0,eb.jsx)("b",{children:"可用模型池"}),"里挑模型来召唤,拥有完整 工具集,还能再派发上面三种官方子代理。"]})},{id:"check-update",before:el9(()=>e.select("check-update")),target:'[data-tour="check-update"]',title:"检查更新",body:(0,eb.jsxs)(eb.Fragment,{children:["这里查看各机器的运行时版本并 ",(0,eb.jsx)("b",{children:"立即更新"}),"。原理:从 npm 拉取最新运行时包、就地替换二进制与 前端,",(0,eb.jsx)("b",{children:"无需重装"}),";P2P mesh 未变时更新还",(0,eb.jsx)("b",{children:"不需要管理员权限"}),"。"]})},{id:"hub-account",before:el9(()=>e.select("account")),target:'[data-tour="hub-account"]',title:"Hub 账户",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → Hub 账户"}),"。上方是你的",(0,eb.jsx)("b",{children:"账户信息"}),"与",(0,eb.jsx)("b",{children:"设备绑定"}),"状态——Hub 负责多机互联、组网 下发与云端身份。"]})},{id:"hub-account-danger",before:el9(()=>e.select("account")),target:'[data-tour="hub-account-danger"]',title:"Hub 账户 · 危险操作",body:(0,eb.jsxs)(eb.Fragment,{children:["下方的 ",(0,eb.jsx)("b",{children:"危险操作"})," 区可",(0,eb.jsx)("b",{children:"解除设备绑定"}),"或",(0,eb.jsx)("b",{children:"退出登录"}),"。这些操作不可逆,会把本机移出 账户,请谨慎。"]})},{id:"new-conversation",before:el9(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:esn,gateHint:"点击「新建对话」继续",title:"创建新对话",body:(0,eb.jsxs)(eb.Fragment,{children:["回到主页,请点 ",(0,eb.jsx)("b",{children:"新建对话"})," 进入初始化向导(侧边栏顶部也有同样入口)。"]})},{id:"wizard-1",target:'[data-tour="init-wizard"]',placement:"left",padding:4,waitForTarget:5e3,gate:()=>!esn()||esr()>=2,gateHint:"配好运行环境后点向导的「下一步」",title:"向导 ① 运行环境与引擎",body:(0,eb.jsxs)(eb.Fragment,{children:["先选在",(0,eb.jsx)("b",{children:"哪台机器"}),"上运行;本机运行时还能选 ",(0,eb.jsx)("b",{children:"运行引擎"}),"——",(0,eb.jsx)("b",{children:"Vantaloom"})," / ",(0,eb.jsx)("b",{children:"Claude Code"})," / ",(0,eb.jsx)("b",{children:"reclaude"}),"(Claude Code 仅限本机)。 整个向导区域已高亮,配好后点向导自己的 ",(0,eb.jsx)("b",{children:"下一步"}),"。"]})},{id:"wizard-2",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn()||esr()>=3,gateHint:"选好工作目录后点向导的「下一步」",title:"向导 ② 选择工作目录",body:(0,eb.jsxs)(eb.Fragment,{children:["先给对话",(0,eb.jsx)("b",{children:"起个名字"}),",再选 ",(0,eb.jsx)("b",{children:"工作目录"}),"——这是智能体能读写的根目录 (Claude Code 用单个目录作为工作根目录)。选好后点向导的「下一步」。"]})},{id:"wizard-3",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn()||esr()>=4,gateHint:"配好模型后点向导的「下一步」",title:"向导 ③ 模型设置",body:(0,eb.jsxs)(eb.Fragment,{children:["选择这段对话使用的",(0,eb.jsx)("b",{children:"模型"}),"——",(0,eb.jsx)("b",{children:"Vantaloom"})," 用你刚配置的模型路由,",(0,eb.jsx)("b",{children:"Claude Code"})," 则由其自身提供模型。选好后点向导的「下一步」。"]})},{id:"wizard-4",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn(),gateHint:"点向导的「确认开始」创建对话",title:"向导 ④ 确认开始",body:(0,eb.jsxs)(eb.Fragment,{children:["核对无误后,点向导右下角的 ",(0,eb.jsx)("b",{children:"确认开始"})," 创建对话。创建成功后会自动进入对话界面。"]})},{id:"composer-toolbar",target:'[data-slot="agent-input-composer-toolbar"]',waitForTarget:6e3,title:"输入框下方的按钮",body:(0,eb.jsxs)(eb.Fragment,{children:["输入框下面一排:",(0,eb.jsx)("b",{children:"权限模式"}),"(工具调用是否需审批)、",(0,eb.jsx)("b",{children:"模型选择"}),"、右侧 ",(0,eb.jsx)("b",{children:"发送 / 停止"}),"按钮(运行中变停止),以及 ",(0,eb.jsx)("b",{children:"上下文用量"})," 指示。"]})},{id:"queue-stack",target:'[data-slot="agent-input-composer-textarea"]',waitForTarget:3e3,title:"待发送栈(Tab 键)",body:(0,eb.jsxs)(eb.Fragment,{children:["输入内容后按 ",(0,eb.jsx)("kbd",{children:"Tab"})," 可把它压入",(0,eb.jsx)("b",{children:"待发送栈"}),"而不立即发送,便于排队多条指令。栈里每条都能 点击:用 ",(0,eb.jsx)("b",{children:"引导"})," 在合适时机插入对话,或删除。"]})},{id:"pane-toolbar",target:'[data-tour="pane-toolbar"]',waitForTarget:3e3,title:"工作区顶栏",body:(0,eb.jsxs)(eb.Fragment,{children:["右侧工作区最上面一排:左边 ",(0,eb.jsx)("b",{children:"布局标签"})," 切换分屏预设,中间 ",(0,eb.jsx)("b",{children:"位置切换"})," 控制对话面板在左 / 居中 / 在右。"]})},{id:"pane-split",target:'[aria-label="上下二分"]',waitForTarget:4e3,gate:()=>null!=ese('[aria-label="上下二分"][data-state="active"]'),gateHint:"点「上下二分」分栏",title:"动手 · 上下分栏",body:(0,eb.jsxs)(eb.Fragment,{children:["在布局标签里点 ",(0,eb.jsx)("b",{children:"上下二分"}),"(顶部面板图标),把右侧工作区分成上下两块。"]})},{id:"pane-add-top",target:'[data-tour="pane-add"]',waitForTarget:3e3,gate:()=>null!=ese('[placeholder="搜索组件..."]')||null!=ese('[data-slot="multi-tab-list"]'),gateHint:"点上面板的「添加」",autoAdvance:!0,title:"动手 · 添加上面板组件",body:(0,eb.jsxs)(eb.Fragment,{children:["点",(0,eb.jsx)("b",{children:"上面板"}),"中间的 ",(0,eb.jsx)("b",{children:"添加"})," 按钮,打开组件选择面板。"]})},{id:"pane-pick-multitab",target:'[data-tour="pane-template-multi-tab-system"]',waitForTarget:3e3,gate:()=>null!=ese('[data-slot="multi-tab-list"]'),gateHint:"选择「多标签页系统」",title:"动手 · 选多文件标签组件",body:(0,eb.jsxs)(eb.Fragment,{children:["在弹出面板里找到 ",(0,eb.jsx)("b",{children:"多标签页系统"}),"(即多文件标签组件)并点击添加,它会填入上面板。"]})},{id:"multi-tab",target:'[data-slot="multi-tab-list"]',waitForTarget:3e3,title:"多文件标签组件",body:(0,eb.jsxs)(eb.Fragment,{children:["顶部是",(0,eb.jsx)("b",{children:"多文件标签条"}),":点 ",(0,eb.jsx)("b",{children:"+"})," 新增标签、点标签切换文件、",(0,eb.jsx)("b",{children:"×"})," 关闭。单文件内还能在",(0,eb.jsx)("b",{children:"查看 / 编辑"})," 与 ",(0,eb.jsx)("b",{children:"代码 / 预览 / 十六进制"})," 间切换,编辑后记得保存。"]})},{id:"pane-add-bottom",target:'[data-tour="pane-add"]',waitForTarget:3e3,gate:()=>null!=ese('[placeholder="搜索组件..."]')||null!=ese('[data-slot="terminal-tab-group"]'),gateHint:"点下面板的「添加」",autoAdvance:!0,title:"动手 · 添加下面板组件",body:(0,eb.jsxs)(eb.Fragment,{children:["现在点",(0,eb.jsx)("b",{children:"下面板"}),"的 ",(0,eb.jsx)("b",{children:"添加"})," 按钮,再次打开组件选择面板。"]})},{id:"pane-pick-terminal",target:'[data-tour="pane-template-terminal-tab-group"]',waitForTarget:3e3,gate:()=>null!=ese('[data-slot="terminal-tab-group"]'),gateHint:"选择「终端标签组」",title:"动手 · 选终端",body:(0,eb.jsxs)(eb.Fragment,{children:["在面板里找到 ",(0,eb.jsx)("b",{children:"终端标签组"})," 并点击添加,它会填入下面板。"]})},{id:"terminal",target:'[data-slot="terminal-tab-group"]',waitForTarget:3e3,title:"终端组件",body:(0,eb.jsxs)(eb.Fragment,{children:["终端支持多会话标签:点 ",(0,eb.jsx)("b",{children:"+"})," 新开会话、点标签切换、",(0,eb.jsx)("b",{children:"×"})," 关闭。直接输入命令即可,输出实时回显,与本机真实 shell 一致。"]})},{id:"pane-cut-clear",target:'[aria-label="剪切窗口内容"]',waitForTarget:3e3,title:"剪切与粉碎",body:(0,eb.jsxs)(eb.Fragment,{children:["顶栏的 ",(0,eb.jsx)("b",{children:"剪切"}),"(剪刀)把窗口内容移动到别处;",(0,eb.jsx)("b",{children:"粉碎"}),"(碎纸机)清空该窗口。均对单个 pane 生效。"]})},{id:"control-room",target:'[data-tour="control-room-toggle"]',waitForTarget:3e3,title:"导播台视角",body:(0,eb.jsxs)(eb.Fragment,{children:["点位置切换中间的 ",(0,eb.jsx)("b",{children:"「隐藏面板」"}),"(矩形图标)进入",(0,eb.jsx)("b",{children:"导播台"}),":对话偏左,右侧悬浮显示主 Agent 与各子 Agent 的实时预览小窗,点小窗即可切换主面板。"]})},{id:"outro",centered:!0,title:"完成 🎉",body:(0,eb.jsxs)(eb.Fragment,{children:["你已走过核心功能。随时可从空白页的 ",(0,eb.jsx)("b",{children:"使用教程"})," 重新打开本向导。开始创造吧!"]})}]}))},[es,Z,ec]),eu=ew.useCallback(()=>{i("account")},[]),ef=d?.id??s?.conversation.id,eh=!!d&&s?.conversation.id!==d.id,em="new-agent-conversation"===a||"project-conversation"===a;return(0,eb.jsxs)("main",{className:"vtl-app-background relative flex h-svh overflow-hidden text-foreground select-none [-webkit-touch-callout:none]",children:[e?(0,eb.jsx)(eik,{navItems:eiC,contents:eiM,activeWorkspace:a,activeConversationId:ef,activeProjectId:U,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenProjectCanvas:(e,t)=>{ea(e,t)},onOpenProjectOverview:et,onOpenProjectKanban:en,onOpenProjectSettings:er,onNewProjectConversation:e=>{el(e)},onOpenProjectConversation:(e,t,n)=>{ei(e,t,n)},onNewProject:()=>{eo()},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{s?.conversation.id===e&&(c(void 0),i("home")),k(t=>t?.id===e?void 0:t)},onAccountSettings:eu,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e),title:em&&s?s.conversation.title?.trim()||"新 Agent 对话":Q8.product,trailing:em&&s?(0,eb.jsx)(jS,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(elq,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,eI.cn)("relative hidden h-svh shrink-0 overflow-hidden p-3 transition-[width,padding] duration-300 ease-out md:block",t?"w-0 p-0":"w-[19.5rem]"),children:(0,eb.jsx)(eaE,{navItems:eiC,contents:eiM,activeWorkspace:a,activeConversationId:ef,activeCanvasId:F,activeProjectId:U,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenCanvas:(e,t)=>{ee(e,t)},onOpenProjectCanvas:(e,t)=>{ea(e,t)},onOpenProjectOverview:et,onOpenProjectKanban:en,onOpenProjectSettings:er,onNewProjectConversation:e=>{el(e)},onOpenProjectConversation:(e,t,n)=>{ei(e,t,n)},onNewProject:()=>{eo()},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{s?.conversation.id===e&&(c(void 0),i("home")),k(t=>t?.id===e?void 0:t)},onAccountSettings:eu,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e)})}),(0,eb.jsx)("div",{className:(0,eI.cn)("group/sb-handle absolute inset-y-0 z-30 hidden w-8 md:block","transition-[left] duration-300 ease-out",t?"left-0":"left-[18.5rem]"),children:(0,eb.jsx)("button",{type:"button",onClick:r,"aria-label":t?"展开侧边栏":"收起侧边栏",title:t?"展开侧边栏":"收起侧边栏",className:"absolute top-1/2 left-0 flex h-14 w-6 -translate-y-1/2 items-center justify-center rounded-r-md border border-l-0 border-border bg-background/85 text-muted-foreground opacity-0 shadow-md backdrop-blur transition-opacity duration-200 hover:text-foreground focus-visible:opacity-100 group-hover/sb-handle:opacity-100",children:t?(0,eb.jsx)(tu,{className:"size-4"}):(0,eb.jsx)(td,{className:"size-4"})})})]}),(0,eb.jsxs)("section",{className:(0,eI.cn)("relative h-full min-w-0 flex-1 overflow-hidden",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:["runs"===a?(0,eb.jsx)(el6,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):"telemetry"===a?(0,eb.jsx)(el8,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):"preferences-model-routes"===a?(0,eb.jsx)(elt,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elt,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elt,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elt,{section:"cc-engine-config"}):"preferences-system-prompt"===a?(0,eb.jsx)(elt,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elt,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elt,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elt,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(elO,{}):"network-topology"===a?(0,eb.jsx)(elj,{}):"network-settings"===a?(0,eb.jsx)(elC,{}):"system-downloads"===a?(0,eb.jsx)(elV,{}):"preferences"===a?(0,eb.jsx)(elt,{}):"check-update"===a?(0,eb.jsx)(eli,{}):"balance-usage"===a?(0,eb.jsx)(elc,{}):"feedback"===a?(0,eb.jsx)(elp,{}):"account"===a?(0,eb.jsx)(eiI,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(enq,{onCreated:e=>{et(e)},onCancel:()=>i("home")}):"project-overview"===a&&U?(0,eb.jsx)(er1,{projectId:U,onOpenSettings:er}):"project-settings"===a&&U?(0,eb.jsx)(en5,{projectId:U}):"kanban"===a&&U?(0,eb.jsx)(erG,{projectId:U}):("new-agent-conversation"===a||"project-conversation"===a)&&eh?(0,eb.jsxs)("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-6 animate-spin"}),(0,eb.jsx)("span",{className:"text-sm",children:"正在打开对话…"})]}):"new-agent-conversation"===a||"project-conversation"===a?(0,eb.jsx)(Qi,{conversation:s,clipboardItems:C,clipboardDraggingId:I,onClipboardItemsChange:M,onClipboardDraggingChange:A,onOverlayOpenChange:l,onConversationCreated:e=>{c(e)},onCancelDraft:()=>i("home"),subagentStack:f,onSubagentStackChange:h,subagentTree:m,mobileView:g,onMobilePaneCountChange:b}):e?(0,eb.jsx)(esl,{activeConversationId:ef,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{k(t=>t?.id===e?void 0:t)}}):(0,eb.jsx)(eso,{onNewConversation:Z,onStartTour:ed}):(0,eb.jsx)(enb,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):(0,eb.jsx)(enC,{nodes:T,edges:D,selectedNodeId:L,clipboardItems:C,onNodesChange:K,onEdgesChange:G,onNodesSet:R,onEdgesSet:_,onSelectedNodeChange:$,onClipboardItemsChange:M}),j?(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(QL,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{Y(e,t)}})}):null,(0,eb.jsx)(ear,{hidden:!!j||(em?o:N),items:C,trashItems:E,draggingId:I,onDraggingChange:A,onItemsChange:M,onTrashItemsChange:O,onTrashClipboardItemsChange:z,trashClipboardItems:P})]})]})}function eso({onNewConversation:e,onStartTour:t}){return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col items-center justify-center gap-5 px-6 text-center",children:[(0,eb.jsx)(el7,{className:"h-20 w-auto max-w-[78vw] text-foreground"}),(0,eb.jsx)("p",{className:"max-w-sm text-sm text-muted-foreground",children:"从左侧选择一个会话,或新建对话"}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-center gap-3",children:[(0,eb.jsxs)(ez.Button,{type:"button",onClick:e,"data-tour":"home-new-conversation",children:[(0,eb.jsx)(tc,{className:"size-4"}),"新建对话"]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",onClick:t,children:[(0,eb.jsx)(ts,{className:"size-4"}),"使用教程"]})]})]})}function esl({activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a}){return(0,eb.jsx)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col px-3 pt-3 pb-[max(0.75rem,env(safe-area-inset-bottom))]",children:(0,eb.jsx)(eaT,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function ess(){let{ready:e,user:t,logout:n}=tl();return e?t?(0,eb.jsx)(esi,{}):(0,eb.jsx)(ta,{onComplete:()=>{window.location.reload()}}):(0,eb.jsx)("main",{className:"grid min-h-svh place-items-center bg-background",children:(0,eb.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,eb.jsx)("div",{className:"size-8 animate-spin rounded-full border-2 border-muted-foreground/20 border-t-primary"}),(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"连接中..."})]})})}function esc(){return(0,eb.jsx)(to,{children:(0,eb.jsx)(ess,{})})}e.s(["default",()=>esc],66204)}]);
|
|
52
|
+
</style>`,/<\/head>/i.test(t)?t.replace(/<\/head>/i,`${n}</head>`):`${n}${t}`},[r,t]);return(0,eb.jsx)("iframe",{title:e,sandbox:"allow-scripts",srcDoc:a,className:(0,eI.cn)("size-full border-0 bg-background",n)})}function Gp({file:e,value:t,labels:n}){let r=ew.useMemo(()=>{let n=e.bytes??(t?new TextEncoder().encode(t):[]),r=Math.min(n.length,4096),a=[];for(let e=0;e<r;e+=16){let t=Array.from({length:Math.min(16,r-e)},(t,r)=>n[e+r]??0);a.push({offset:e.toString(16).padStart(8,"0"),hex:t.map(e=>e.toString(16).padStart(2,"0")).join(" "),ascii:t.map(e=>e>=32&&e<=126?String.fromCharCode(e):".").join("")})}return a},[e.bytes,t]);return 0===r.length?(0,eb.jsx)("div",{className:"ui-text-body grid size-full place-items-center p-6 text-center text-muted-foreground",children:n.noContent}):(0,eb.jsx)("div",{className:"size-full overflow-auto bg-background p-3 ui-text-code",children:(0,eb.jsx)("div",{className:"grid min-w-max grid-cols-[5.5rem_30rem_1fr] gap-x-4",children:r.map(e=>(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:e.offset}),(0,eb.jsx)("span",{className:"font-mono text-foreground",children:e.hex}),(0,eb.jsx)("span",{className:"font-mono text-muted-foreground",children:e.ascii})]},e.offset))})})}function Gg({file:e,labels:t,onApprove:n}){return(0,eb.jsx)("div",{className:"grid size-full place-items-center bg-muted/20 p-6",children:(0,eb.jsxs)("div",{className:"grid max-w-md justify-items-center gap-3 text-center",children:[(0,eb.jsx)("div",{className:"grid size-10 place-items-center rounded-full border bg-background text-muted-foreground",children:(0,eb.jsx)(K7,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("h3",{className:"ui-text-body font-medium text-foreground",children:t.binaryTitle}),(0,eb.jsx)("p",{className:"ui-text-body text-muted-foreground",children:t.binaryDescription})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[Gs(e.size)&&(0,eb.jsx)(Bu,{variant:"outline",children:Gs(e.size)}),(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function Gx({labels:e}){return(0,eb.jsx)("div",{className:"ui-text-body grid size-full place-items-center p-6 text-center text-muted-foreground",children:e.unsupportedPreview})}function Gv({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=Go(e),o=e.src?e.src:t&&"svg"===Go(e)?`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`:void 0,l=r?.(e,t);return void 0!==l?(0,eb.jsx)("div",{"data-slot":"file-tab-custom-preview",className:(0,eI.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gm,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,eI.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(Gh,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,eI.cn)("grid size-full place-items-center overflow-auto bg-muted/20 p-6",a),children:(0,eb.jsx)("img",{src:o,alt:e.name,className:"max-h-full max-w-full rounded-lg border bg-background p-4"})}):"image"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-image-preview",className:(0,eI.cn)("grid size-full place-items-center overflow-auto bg-muted/20 p-6",a),children:(0,eb.jsx)("img",{src:o,alt:e.name,className:"max-h-full max-w-full rounded-md"})}):"video"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-video-preview",className:(0,eI.cn)("grid size-full place-items-center bg-muted/20 p-6",a),children:(0,eb.jsx)("video",{src:o,controls:!0,preload:"none",className:"max-h-full max-w-full rounded-md border bg-background"})}):(0,eb.jsx)(Gx,{labels:n})}function Gb({open:e,labels:t,currentView:n,currentMode:r,saving:a,modified:i,canSwitchView:o,canSwitchMode:l,canSave:s,canOpenHistory:c,onOpenChange:d,onToggleView:u,onToggleMode:f,onSave:h,onHistory:m}){let p=[o?{key:"view",label:"code"===n?t.preview:t.code,onClick:u,icon:"code"===n?(0,eb.jsx)(Ug,{className:"size-4"}):(0,eb.jsx)(uk,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(K9,{className:"size-4"}):(0,eb.jsx)(eN,{className:"size-4"})}:void 0,s?{key:"save",label:a?t.saving:t.save,onClick:h,disabled:a||!i,icon:(0,eb.jsx)(Gr,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Ge,{className:"size-4"})}:void 0].filter(e=>void 0!==e);return 0===p.length?null:(0,eb.jsx)("div",{"data-slot":"file-tab-floating-actions",className:"absolute right-3 bottom-3 z-20",children:(0,eb.jsxs)("div",{className:"relative size-8",children:[p.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,disabled:t.disabled,onClick:()=>{t.disabled||t.onClick()},className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0",t.disabled&&"opacity-45"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.actions,"aria-expanded":e,onClick:()=>d(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function Gy({file:e,value:t,defaultValue:n,onValueChange:r,mode:a,defaultMode:i="review",onModeChange:o,view:l,defaultView:s="code",onViewChange:c,modified:d=!1,onSave:u,onSaveError:f,largeBinaryThreshold:h=2097152,showHeader:m=!0,wrapLines:p=!1,renderPreview:g,onHistory:x,labels:v,className:b,editorClassName:y,previewClassName:w,headerClassName:j,...k}){var N;let S,C,M=ew.useMemo(()=>({...Ga,...v}),[v]),[E,O]=ew.useState(n??e.content??""),[P,z]=ew.useState(i),[I,A]=ew.useState(s),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),[L,$]=ew.useState(!1),F=ew.useRef(null),B=t??E,V=a??P,H=(N=l??I,(S=Gc(e)).includes(N)?N:S[0]),U=Go(e),q=Gc(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(Go(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=Go(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=Gs(e.size??B.length);async function J(){if(u&&!L){$(!0);try{await u(B),_(!1)}catch(e){f?.(e)}finally{$(!1)}}}return ew.useEffect(()=>{void 0===t&&O(n??e.content??""),R(!1),_(!1)},[n,e,t]),ew.useEffect(()=>{if(D)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof Node&&F.current?.contains(t)||_(!1)}},[D]),(0,eb.jsxs)("div",{ref:F,"data-slot":"file-tab-viewer","data-mode":V,"data-view":H,className:(0,eI.cn)("vtl-surface-panel relative grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",m?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",b),...k,children:[m&&(0,eb.jsxs)("div",{"data-slot":"file-tab-viewer-header",className:(0,eI.cn)("flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",j),children:[(0,eb.jsx)("span",{className:"grid size-5 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:"image"===U?(0,eb.jsx)(Gt,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Gn,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(K7,{className:"size-3.5"}):(0,eb.jsx)(v6,{className:"size-3.5"})}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 ui-text-kbd",children:Y.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[t>0&&(0,eb.jsx)("span",{className:"text-muted-foreground",children:M.pathSeparator}),(0,eb.jsx)("span",{className:(0,eI.cn)("truncate",t===Y.length-1?"font-medium text-foreground":"text-muted-foreground"),children:e})]},`${e}-${t}`))}),(0,eb.jsxs)("div",{className:"hidden shrink-0 items-center gap-1.5 sm:flex",children:[Z&&(0,eb.jsx)(Bu,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bu,{variant:"secondary",children:[(0,eb.jsx)(lK,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bu,{variant:"outline",children:[(0,eb.jsx)(K9,{className:"size-3"}),M.edit]}))]})]}),(0,eb.jsx)("div",{"data-slot":"file-tab-viewer-body",className:"min-h-0 overflow-hidden",children:X&&!T?(0,eb.jsx)(Gg,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(Gv,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(Gp,{file:e,value:B,labels:M}):(0,eb.jsx)(Gf,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&O(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(Gb,{open:D,labels:M,currentView:H,currentMode:V,saving:L,modified:d,canSwitchView:q,canSwitchMode:W&&"code"===H,canSave:K,canOpenHistory:!!(x&&e.path),onOpenChange:_,onToggleView:function(){var e;e="code"===H?"preview":"code",void 0===l&&A(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&z(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function Gw(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function Gj(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function Gk(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GN({tabs:e,defaultTabs:t=[],activeTabId:n,defaultActiveTabId:r,onActiveTabChange:a,onTabsChange:i,onCreateTab:o,onCloseTab:l,onTabReorder:s,onTabDetach:c,onExternalTabDrop:d,createActions:u=[],tabActions:f=[],reorderable:h=!0,detachable:m=!1,externalDropTypes:p=[],createLabel:g="New tab",moreLabel:x="More tab actions",closeLabel:v="Close tab",scrollLeftLabel:b="Scroll tabs left",scrollRightLabel:y="Scroll tabs right",tabListLabel:w="Open tabs",emptyContent:j,renderContent:k,showContent:N=!0,className:S,tabListClassName:C,contentClassName:M}){let[E,O]=ew.useState(t),P=ew.useRef(null),z=ew.useRef(null),[I,A]=ew.useState(),[T,R]=ew.useState(void 0),D=ew.useRef(void 0),[_,L]=ew.useState(void 0),[$,F]=ew.useState(!1),B=ew.useRef(void 0),V=ew.useRef(void 0),H=ew.useRef(!1),[U,q]=ew.useState(!1),[W,K]=ew.useState(!1),[G,X]=ew.useState(),Y=e??E,Z=Y.find(e=>!e.disabled),[J,Q]=ew.useState(r??Z?.id),ee=n??J,et=Y.find(e=>e.id===ee&&!e.disabled)??Z;ew.useEffect(()=>{!et&&Z&&void 0===n&&Q(Z.id)},[et,n,Z]);let en=ew.useCallback(t=>{void 0===e&&O(t),i?.(t)},[i,e]),er=ew.useCallback(e=>{D.current=e,R(e)},[]),ea=ew.useCallback(()=>{let e=z.current,t=new Map;if(!e)return t;for(let n of e.querySelectorAll("[data-tab-id]")){let e=n.getBoundingClientRect(),r=n.dataset.tabId;r&&t.set(r,{left:e.left,top:e.top})}return t},[]),ei=ew.useCallback((e,t=!0)=>{t&&(V.current=ea()),B.current=e,L(e)},[ea]),eo=ew.useCallback(()=>{let e=z.current;if(!e){q(!1),K(!1);return}let t=e.scrollWidth-e.clientWidth;q(e.scrollLeft>1),K(e.scrollLeft<t-1)},[]);function el(e){let t=z.current;if(!t)return;let n=Math.max(.7*t.clientWidth,160);t.scrollLeft+="left"===e?-n:n,window.requestAnimationFrame(eo)}ew.useEffect(()=>{F(!0)},[]),ew.useEffect(()=>{eo();let e=z.current;if(!e)return;let t=new ResizeObserver(eo);return t.observe(e),window.addEventListener("resize",eo),()=>{t.disconnect(),window.removeEventListener("resize",eo)}},[Y.length,eo]),ew.useLayoutEffect(()=>{let e=V.current,t=z.current;if(e&&t)for(let n of(V.current=void 0,t.querySelectorAll("[data-tab-id]"))){let t=n.dataset.tabId;if(!t)continue;let r=e.get(t);if(!r)continue;let a=n.getBoundingClientRect(),i=r.left-a.left,o=r.top-a.top;1>Math.abs(i)&&1>Math.abs(o)||n.animate([{transform:`translate(${i}px, ${o}px)`},{transform:"translate(0, 0)"}],{duration:150,easing:"cubic-bezier(0.2, 0, 0, 1)"})}},[_]);let es=ew.useCallback(e=>{let t=z.current;if(t)return Array.from(t.querySelectorAll("[data-tab-id]")).find(t=>t.dataset.tabId===e)},[]),ec=ew.useCallback((e,t)=>{let n=B.current??Y,r=n.findIndex(t=>t.id===e.tabId);if(-1===r)return;let a=t-e.offsetX,i=a+e.width,o=t>=e.currentX,l=n[r+1],s=n[r-1];if(o&&l&&!l.disabled){let e=es(l.id),t=e?.getBoundingClientRect();t&&i>=t.left+.7*t.width&&ei(Gk(n,r,r+1));return}if(!o&&s&&!s.disabled){let e=es(s.id),t=e?.getBoundingClientRect();t&&a<=t.right-.7*t.width&&ei(Gk(n,r,r-1))}},[es,Y,ei]);function ed(e){if(!d||0===p.length)return!1;let t=Array.from(e.dataTransfer.types);return p.some(e=>t.includes(e))}function eu(e){let t=z.current;if(!t)return{index:Y.length,left:0};let n=t.getBoundingClientRect(),r=Array.from(t.querySelectorAll("[data-tab-id]"));if(0===r.length)return{index:0,left:t.scrollLeft+8};for(let[a,i]of r.entries()){let r=i.getBoundingClientRect();if(e.clientX<r.left+r.width/2)return{index:a,left:r.left-n.left+t.scrollLeft}}let a=r[r.length-1].getBoundingClientRect();return{index:r.length,left:a.right-n.left+t.scrollLeft}}ew.useEffect(()=>{if(T)return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t,{once:!0}),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t)};function e(e){let t=D.current;if(!t)return;let n=e.clientX-t.startX,r=e.clientY-t.startY,a=t.dragging||Math.abs(n)>4||Math.abs(r)>4;a&&(e.preventDefault(),ec(t,e.clientX)),er({...t,currentX:e.clientX,currentY:e.clientY,dragging:a})}function t(e){let t=D.current;if(t?.dragging){e.preventDefault(),H.current=!0;let r=Y.find(e=>e.id===t.tabId),i=P.current?.getBoundingClientRect(),o=!!i&&(e.clientX<i.left||e.clientX>i.right||e.clientY<i.top||e.clientY>i.bottom);if(m&&c&&r&&o&&function(e,t){if(e.pinned)return!1;let r=Y.findIndex(t=>t.id===e.id);if(c?.(e,{tabs:Y,clientX:t.clientX,clientY:t.clientY,nativeEvent:t})===!1)return!1;let i=Y.filter(t=>t.id!==e.id);if(en(i),e.id===ee){let e=Gw(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){A(void 0),er(void 0),ei(void 0,!1);return}let l=B.current;l&&!(l.length===Y.length&&l.every((e,t)=>e.id===Y[t]?.id))&&(en(l),s?.(l))}A(void 0),er(void 0),ei(void 0,!1)}});let ef=et&&(k?.(et)??et.content??(0,eb.jsx)("div",{className:"grid min-h-44 place-items-center bg-muted/30 p-6 text-center text-muted-foreground",children:et.title})),eh=T?.dragging&&_?_:Y,em=T?.dragging?Y.find(e=>e.id===T.tabId):void 0,ep=T?.dragging&&em&&$?(0,ib.createPortal)((0,eb.jsxs)("div",{"data-slot":"multi-tab-drag-preview","aria-hidden":"true",className:"pointer-events-none fixed z-[100] flex h-9 min-w-0 items-center gap-1 rounded-t-lg border border-border bg-background px-2.5 text-foreground shadow-lg",style:{left:T.currentX-T.offsetX,top:T.top,width:T.width},children:[em.icon&&(0,eb.jsx)("span",{className:"grid size-4 shrink-0 place-items-center text-muted-foreground [&_svg]:size-3.5",children:em.icon}),(0,eb.jsx)("span",{className:"truncate ui-text-control font-medium",children:em.title}),em.modified&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-foreground/70"})]}),document.body):null;return(0,eb.jsxs)("div",{ref:P,"data-slot":"multi-tab-system",className:(0,eI.cn)("vtl-surface-panel grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden rounded-[var(--surface-panel-radius)] border",S),children:[(0,eb.jsxs)("div",{className:"relative flex min-w-0 shrink-0 items-end gap-1 border-b bg-muted/35 px-1.5 pt-1.5",children:[U&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":b,onClick:()=>el("left"),className:"mb-1 shrink-0",children:(0,eb.jsx)(mQ,{})}),(0,eb.jsxs)("div",{ref:z,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,eI.cn)("relative flex min-w-0 flex-1 items-end overflow-x-auto [scrollbar-width:none] data-[overflow=both]:[mask-image:linear-gradient(90deg,transparent,black_24px,black_calc(100%-24px),transparent)] data-[overflow=left]:[mask-image:linear-gradient(90deg,transparent,black_24px)] data-[overflow=right]:[mask-image:linear-gradient(90deg,black_calc(100%-24px),transparent)] [&::-webkit-scrollbar]:hidden",C),"data-overflow":U&&W?"both":U?"left":W?"right":void 0,onScroll:eo,onDragOver:function(e){ed(e)&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",X(eu(e)))},onDragLeave:function(e){if(!ed(e))return;let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||X(void 0)},onDrop:function(e){if(!ed(e))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let t=eu(e);X(void 0),d?.({tabs:Y,insertIndex:t.index,nativeEvent:e})},children:[eh.map((e,t)=>{let r=e.id===et?.id,i=eh[t+1],o=T?.dragging&&I===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==I;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsxs)("div",{onPointerDown:t=>(function(e,t){if(!h||e.disabled||0!==t.button)return;let n=t.currentTarget.getBoundingClientRect();A(e.id),ei(Y,!1),er({tabId:e.id,startX:t.clientX,startY:t.clientY,offsetX:t.clientX-n.left,top:n.top,width:n.width,currentX:t.clientX,currentY:t.clientY,dragging:!1})})(e,t),"data-slot":"multi-tab","data-tab-id":e.id,"data-state":r?"active":"inactive","data-dragging":I===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,eI.cn)("group/tab relative flex h-9 min-w-0 max-w-52 shrink-0 items-center gap-1 rounded-t-lg border border-b-0 px-2.5 transition-[border-color,background-color,color,box-shadow,outline-color] duration-150 ease-out",h&&!e.disabled&&"cursor-grab active:cursor-grabbing",r?"border-border bg-background text-foreground shadow-[0_-1px_0_var(--background)_inset]":"border-transparent bg-transparent text-muted-foreground hover:bg-background/70 hover:text-foreground",o&&"border-dashed border-border bg-muted/45 text-transparent shadow-none outline outline-1 outline-ring/30 [&_*]:opacity-0",e.disabled&&"pointer-events-none opacity-50"),children:[(0,eb.jsx)("button",{type:"button",role:"tab","aria-label":Gj(e.title),"aria-selected":r,disabled:e.disabled,onClick:t=>{var r;let i;if(H.current){H.current=!1,t.preventDefault();return}r=e.id,(i=Y.find(e=>e.id===r))&&!i.disabled&&(void 0===n&&Q(r),a?.(r))},className:"absolute inset-0 rounded-t-lg outline-none focus-visible:ring-2 focus-visible:ring-ring/50"}),(0,eb.jsxs)("div",{"aria-hidden":"true",className:"pointer-events-none relative z-10 flex min-w-0 flex-1 items-center gap-1.5",children:[e.icon&&(0,eb.jsx)("span",{className:"grid size-4 shrink-0 place-items-center text-muted-foreground [&_svg]:size-3.5",children:e.icon}),(0,eb.jsx)("span",{className:"truncate ui-text-control font-medium",children:e.title}),e.meta&&(0,eb.jsx)("span",{className:"shrink-0 ui-text-kbd text-muted-foreground",children:e.meta}),e.modified&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"size-1.5 shrink-0 rounded-full bg-foreground/70"})]}),!e.pinned&&(0,eb.jsx)("button",{type:"button",draggable:!1,onPointerDown:e=>e.stopPropagation(),"aria-label":e.closeLabel??(Gj(e.title)?`${v}: ${Gj(e.title)}`:v),onClick:()=>(function(e){if(e.pinned)return;let t=Y.findIndex(t=>t.id===e.id),r=Y.filter(t=>t.id!==e.id);if(en(r),l?.(e),e.id===ee){let e=Gw(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,eI.cn)("relative z-20 grid size-5 shrink-0 place-items-center rounded-md text-muted-foreground opacity-0 transition-all hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none group-hover/tab:opacity-100",r&&"opacity-100"),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]}),s&&(0,eb.jsx)("span",{"aria-hidden":"true",className:"mb-2 h-4 w-px shrink-0 bg-border/80"})]},e.id)}),G?(0,eb.jsxs)("span",{"data-slot":"multi-tab-external-insert","aria-hidden":"true",className:"pointer-events-none absolute top-2 bottom-1 z-30 flex w-0 -translate-x-1/2 items-center justify-center",style:{left:G.left},children:[(0,eb.jsx)("span",{className:"h-full w-px rounded-full bg-foreground/80"}),(0,eb.jsx)("span",{className:"absolute top-0 size-1.5 rounded-full bg-foreground"})]}):null]}),(0,eb.jsxs)("div",{className:"mb-1 flex shrink-0 items-center gap-1",children:[W&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":y,onClick:()=>el("right"),children:(0,eb.jsx)(m0,{})}),u.length>0?(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,children:(0,eb.jsx)(lJ,{})})}),(0,eb.jsx)(yJ,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y5,{children:e.shortcut})]})]},t))})]}):(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,onClick:function(){let e=o?.();e&&(en([...Y,e]),e.disabled||(void 0===n&&Q(e.id),a?.(e.id)))},children:(0,eb.jsx)(lJ,{})}),f.length>0&&(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":x,children:(0,eb.jsx)(lY,{})})}),(0,eb.jsx)(yJ,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y5,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,eI.cn)("min-h-0 overflow-hidden",M),children:ef??j??(0,eb.jsx)("div",{"aria-hidden":"true",className:"min-h-44 rounded-lg border border-dashed bg-muted/30"})})]})}let GS=(0,ek.default)("ban",[["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function GC({status:e}){return"done"===e?(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VN,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GS,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yM,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GM({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("div",{className:"h-1.5 w-16 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${n}%`}})}),(0,eb.jsxs)("span",{className:"shrink-0 text-[10px] tabular-nums text-muted-foreground",children:[e,"/",t]})]})}let GE={main:"主",subagent:"子"};function GO({node:e,depth:t,activeId:n}){let r=function e(t){if(!t.children||0===t.children.length)return"task"!==t.kind&&"subplan"!==t.kind?{done:0,total:0}:{done:+("done"===t.status),total:1};let n=0,r=0;for(let a of t.children){let t=e(a);n+=t.done,r+=t.total}return{done:n,total:r}}(e),a="phase"===e.kind,i=e.orchestration,o=void 0!==n&&e.id===n;return(0,eb.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("flex items-center gap-2 rounded-md px-1.5 py-1",o&&"bg-sky-teal/10 ring-1 ring-sky-teal/30"),style:{marginLeft:12*t},children:[(0,eb.jsx)(GC,{status:e.status}),(0,eb.jsx)("span",{className:(0,eI.cn)("min-w-0 flex-1 truncate text-[13px]","done"===e.status&&"text-muted-foreground line-through",o&&"font-medium text-foreground"),title:e.detail||e.title,children:e.title}),a&&i?(0,eb.jsxs)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:[GE[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GM,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(GO,{node:e,depth:t+1,activeId:n},e.id))]})}function GP({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState("");ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{let a=await sR(e,t);n&&(r(a.planState),void 0!==a.planDoc&&i(a.planDoc))};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let o=n?.activePath?.length?n.activePath[n.activePath.length-1]:void 0;return(0,eb.jsx)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:(0,eb.jsxs)(mu,{defaultValue:"doc",className:"flex min-h-0 flex-1 flex-col gap-0",children:[(0,eb.jsx)("div",{className:"shrink-0 border-b px-2 py-1.5",children:(0,eb.jsxs)(my,{children:[(0,eb.jsx)(mw,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mw,{value:"tree",children:"执行树"})]})}),(0,eb.jsx)(mj,{value:"doc",className:"min-h-0 flex-1",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:a.trim()?(0,eb.jsx)(VZ,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mj,{value:"tree",className:"min-h-0 flex-1",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:n?.tree?(0,eb.jsx)(GO,{node:n.tree,depth:0,activeId:o}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]})})}function Gz({conversationId:e,ownerMachineId:t,initialPath:n}){let[r,a]=ew.useState([]),[i,o]=ew.useState(n),[l,s]=ew.useState("");return ew.useEffect(()=>{if(!e)return;let n=!0,r=async()=>{let r=await s_(e,t);if(!n)return;let i=r.filter(e=>e.startsWith("plan/specs/"));a(i),o(e=>e??i[0])};r();let i=window.setInterval(r,1200);return()=>{n=!1,window.clearInterval(i)}},[e,t]),ew.useEffect(()=>{if(!e||!i)return void s("");let n=!0,r=async()=>{try{let r=await sD(e,i,t);n&&s(r.content)}catch{n&&s("")}};r();let a=window.setInterval(r,1200);return()=>{n=!1,window.clearInterval(a)}},[e,t,i]),(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsx)("div",{className:"flex shrink-0 flex-wrap gap-1 border-b px-2 py-1.5",children:0===r.length?(0,eb.jsx)("span",{className:"px-1 py-1 text-xs text-muted-foreground/70",children:"尚无规范文档"}):r.map(e=>(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors",e===i?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60"),onClick:()=>o(e),children:[(0,eb.jsx)(uC,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(VZ,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}let GI=(0,ek.default)("coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]),GA=(0,ek.default)("file-pen-line",[["path",{d:"m18.226 5.226-2.52-2.52A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.351",key:"1k2beg"}],["path",{d:"M21.378 12.626a1 1 0 0 0-3.004-3.004l-4.01 4.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"2t3380"}],["path",{d:"M8 18h1",key:"13wk12"}]]),GT=(0,ek.default)("list-checks",[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]]),GR=(0,ek.default)("loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]),GD=(0,ek.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);function G_(e,t){return e?eR(`/v1/remote/${e}${t}`):eR(t)}async function GL(e,t){let{signal:n,timeoutMs:r=8e3}=t??{},a=new AbortController,i=r>0?setTimeout(()=>a.abort(),r):void 0;n&&n.addEventListener("abort",()=>a.abort(),{once:!0});try{let t=await fetch(G_(e,"/v1/extensions"),{cache:"no-store",signal:a.signal});if(!t.ok)throw Error(`Extensions API error: ${t.status}`);return await t.json()}finally{i&&clearTimeout(i)}}async function G$(e,t,n){let r=await fetch(G_(e,t),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:void 0===n?void 0:JSON.stringify(n)});if(!r.ok)throw Error(`Extensions API error: ${r.status}`);let a=await r.text();return a?JSON.parse(a):{}}async function GF(e,t){return G$(e,"/v1/extensions/browser/install",{variant:t})}async function GB(e,t){return G$(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function GV(e){return G$(e,"/v1/extensions/browser/uninstall")}async function GH(e,t){return G$(e,"/v1/extensions/browser/enable",{enabled:t})}async function GU(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(G_(e,"/v1/browser/info"),{cache:"no-store",signal:r.signal});if(!t.ok)return null;let n=await t.text(),a=n?JSON.parse(n):{};return{running:!!a.running,monitoring:!!a.monitoring}}catch{return null}finally{a&&clearTimeout(a)}}async function Gq(e,t){return{monitoring:!!(await G$(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let GW={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function GK(e){if(!e.children||0===e.children.length)return"task"!==e.kind&&"subplan"!==e.kind?{done:0,total:0}:{done:+("done"===e.status),total:1};let t=0,n=0;for(let r of e.children){let e=GK(r);t+=e.done,n+=e.total}return{done:t,total:n}}function GG(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=GG(n,t);if(e)return e}}}function GX({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 flex-1 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${n}%`}})}),(0,eb.jsxs)("span",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground",children:[e,"/",t]})]})}function GY({state:e}){let{phase:t,task:n}=function(e){let t,n=e.activePath??[];if(!e.tree||0===n.length)return{};for(let r of n){let n=GG(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?GG(e.tree,r):void 0}}(e),r=e.tree?GK(e.tree):{done:0,total:0},a=t?GK(t):void 0,i=r.total>0?Math.round(r.done/r.total*100):0,o=n?.status==="in_progress";return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(GT,{}),label:"任务进度"}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2 px-3 pb-2 text-[13px]",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:"当前阶段"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate font-medium",children:t?.title??GW[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(GX,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}):null,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-muted-foreground",title:n.detail||n.title,children:n.title})]}):null,(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:"总体进度"}),(0,eb.jsxs)("span",{className:"ml-auto font-medium tabular-nums",children:[i,"%"]})]}),(0,eb.jsx)("div",{className:"h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-all",style:{width:`${i}%`}})})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"})]})}function GZ({icon:e,label:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pt-3 pb-1.5 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/70 [&_svg]:size-3.5",children:[e,(0,eb.jsx)("span",{children:t})]})}function GJ(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await GL(void 0,{signal:e,timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);n&&n.installed?n.running?t("running"):t(e=>"starting"===e?"starting":"stopped"):t("missing")}catch{t("missing")}},[]);ew.useEffect(()=>{let e=!0,t=new AbortController,n=()=>{e&&a(t.signal)};n();let r=window.setInterval(n,1e4);return()=>{e=!1,t.abort(),window.clearInterval(r)}},[a]);let i=ew.useCallback(async()=>{if(!n){r(!0),t("starting");try{await GH(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GL(void 0,{timeoutMs:6e3});if(e.extensions.find(e=>"browser"===e.id)?.running)return void t("running")}catch{}}}catch{}finally{r(!1),await a()}}},[n,a]);return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(Uh,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(GQ,{online:!0}):"starting"===e?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(GQ,{online:!1}),(0,eb.jsx)("span",{className:"truncate font-medium",children:"running"===e?"运行中":"starting"===e?"启动中":"stopped"===e?"已停止":"missing"===e?"未安装":"—"}),(0,eb.jsx)("span",{className:"ml-auto shrink-0",children:"stopped"===e?(0,eb.jsxs)("button",{type:"button",onClick:()=>void i(),className:"inline-flex items-center gap-1 rounded-md border border-border/70 px-1.5 py-0.5 text-[11px] font-medium text-foreground transition-colors hover:bg-muted",children:[(0,eb.jsx)(VN,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function GQ({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,eI.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function G0({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xk();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sz(e,t),sA(e,t).catch(()=>[]),sT(e,t).catch(()=>[])]);if(!n)return;r(a),i(o),l(s)}catch{}};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let c=ew.useMemo(()=>new Map(s.map(e=>[e.id,e])),[s]),d=e=>"local"===e||c.get(e)?.status==="online",u=e=>"local"===e?c.get("local")?.name??"本地":c.get(e)?.name??e,f=t??n?.conversation.ownerMachineId??"local",h=(n?.conversation.settings?.hosts??[]).filter(Boolean),m=n?.conversation.runUsage,p=n?.conversation.status==="working",g=(m?.cachedInputTokens??0)+(m?.cacheCreationInputTokens??0),{additions:x,deletions:v}=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=0,r=0;for(let a=Math.max(0,t);a<e.length;a+=1){let t=e[a],i=t?.additions??t?.meta?.additions,o=t?.deletions??t?.meta?.deletions;"number"==typeof i&&(n+=i),"number"==typeof o&&(r+=o)}return{additions:n,deletions:r}}(n?.events??[]),b=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=new Set;for(let r=Math.max(0,t);r<e.length;r+=1){let t=e[r];if(t?.kind==="subagent"&&Array.isArray(t.subagents))for(let e of t.subagents)e?.id&&n.add(e.id)}return n}(n?.events??[]),y=function e(t,n=0,r=[]){for(let a of t)r.push({node:a,depth:n}),a.children&&a.children.length>0&&e(a.children,n+1,r);return r}(a.filter(e=>b.has(e.id))),w=n?.conversation.planState;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col overflow-auto rounded-[inherit] bg-background text-sm",children:[(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(ub,{}),label:"环境信息"}),(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5 px-3 pb-2 text-[13px]",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-foreground/90",children:[(0,eb.jsx)(eP,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"运行于"}),(0,eb.jsx)(GQ,{online:d(f)}),(0,eb.jsx)("span",{className:"truncate font-medium",children:u(f)})]}),(0,eb.jsxs)("div",{className:"flex items-start gap-2",children:[(0,eb.jsx)(GD,{className:"mt-0.5 size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"mt-0.5 shrink-0 text-muted-foreground",children:"可访问"}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-wrap gap-x-3 gap-y-1",children:0===h.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"—"}):h.map(e=>(0,eb.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(GQ,{online:d(e)}),(0,eb.jsx)("span",{className:"truncate",children:u(e)})]},e))})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(GA,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"本轮变更"}),(0,eb.jsxs)("span",{className:"font-medium text-emerald-600 dark:text-emerald-400",children:["+",x]}),(0,eb.jsxs)("span",{className:"font-medium text-rose-600 dark:text-rose-400",children:["-",v]}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:"行"})]}),(0,eb.jsx)(GJ,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(GY,{state:w}):null,(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(uy,{}),label:"子智能体"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===y.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"本轮未释放子智能体"}):y.map(({node:e,depth:t})=>{let n="failed"===e.status;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",style:{paddingLeft:12*t},children:[e.running?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fg.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}),(0,eb.jsx)("span",{className:"truncate",children:e.subagentName||e.title||e.subagentType||"子智能体"}),(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-muted-foreground/70",children:e.running?"运行中":n?"失败":"已完成"})]},e.id)})}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(uO,{}),label:"后台任务"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===o.length?(0,eb.jsx)("span",{className:"text-muted-foreground/70",children:"本轮无后台任务"}):o.map(e=>{let t="failed"===e.status||"timeout"===e.status,n="unknown"===e.status;return(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[e.running?(0,eb.jsx)(GR,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hE,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fg.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(mJ,{className:"size-3.5 shrink-0 text-emerald-500"}),(0,eb.jsx)("span",{className:"truncate font-mono text-[12px]",title:e.command,children:e.command||"(命令)"}),e.orphaned?(0,eb.jsx)("span",{className:"shrink-0 rounded bg-amber-500/15 px-1 text-[10px] font-medium text-amber-600 dark:text-amber-400",title:"该后台进程脱离了本轮但仍在运行",children:"脱离"}):null,(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-muted-foreground/70",children:e.running?"运行中":n?"状态未知":t?"timeout"===e.status?"超时":"失败":"已完成"})]},e.id)})}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),(0,eb.jsx)(GZ,{icon:(0,eb.jsx)(GI,{}),label:p?"本轮消耗":"消耗额度"}),(0,eb.jsx)("div",{className:"grid grid-cols-3 gap-2 px-3 pb-3",children:[{label:"输入",value:m?.inputTokens},{label:"输出",value:m?.outputTokens},{label:"缓存",value:g}].map(e=>{let t;return(0,eb.jsxs)("div",{className:"rounded-lg border border-border/60 bg-muted/30 px-2 py-1.5",children:[(0,eb.jsx)("div",{className:"text-[11px] text-muted-foreground",children:e.label}),(0,eb.jsx)("div",{className:"font-mono text-sm font-medium tabular-nums",children:m?(t=e.value??0)>=1e6?`${(t/1e6).toFixed(2)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t):"—"})]},e.label)})})]})}let G1="application/vnd.vantaloom.canvas-node",G2="application/vnd.vantaloom.canvas-tab",G5="application/vnd.vantaloom.dashboard-widget",G4="application/vnd.vantaloom.workspace-card";var G3=e.i(78737);let G6=(0,ek.default)("earth",[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),G8=(0,ek.default)("smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]),G7=(0,ek.default)("tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]),G9=[{id:"phone",label:"Phone",width:390,userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"},{id:"tablet",label:"Tablet",width:820,userAgent:"Mozilla/5.0 (iPad; CPU OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"},{id:"desktop",label:"Desktop",width:1200,userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}],Xe=[{id:"adaptive",label:"自适应",adaptive:!0},{id:"16:9",label:"16:9",value:16/9},{id:"4:3",label:"4:3",value:4/3},{id:"3:2",label:"3:2",value:1.5},{id:"1:1",label:"1:1",value:1},{id:"9:16",label:"9:16",value:9/16}],Xt={urlLabel:"URL",urlPlaceholder:"https://example.com",navigate:"Navigate",actions:"Browser view options",devices:"User agent",ratios:"Viewport ratio",back:"Back",forward:"Forward",reload:"Reload preview",previewTitle:"Browser preview"};function Xn(e,t,n){return e.find(e=>e.id===t)??n}function Xr({id:e}){return"phone"===e?(0,eb.jsx)(G8,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(G7,{className:"size-4"}):(0,eb.jsx)(eP,{className:"size-4"})}function Xa({url:e,defaultUrl:t="https://vantaloom.local/workspace",onUrlChange:n,onNavigate:r,onBack:a,onForward:i,device:o,defaultDevice:l="desktop",onDeviceChange:s,ratio:c,defaultRatio:d="adaptive",onRatioChange:u,devices:f=G9,ratios:h=Xe,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...Xt,...x}),[x]),[k,N]=ew.useState(t),[S,C]=ew.useState(e??t),[M,E]=ew.useState(()=>[e??t]),[O,P]=ew.useState(0),[z,I]=ew.useState(l),[A,T]=ew.useState(d),[R,D]=ew.useState(!1),[_,L]=ew.useState(0),$=ew.useRef(null),F=ew.useId(),[B,V]=function(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useEffect(()=>{let t=e.current;if(!t)return;function r(e){t&&n(e??{width:t.clientWidth,height:t.clientHeight})}r();let a=new ResizeObserver(e=>{let t=e[0];t?r({width:t.contentRect.width,height:t.contentRect.height}):r()});return a.observe(t),()=>a.disconnect()},[]),[e,t]}(),H=e??k,U=Xn(f,o??z,f[0]??G9[0]),q=Xn(h,c??A,h[0]??Xe[0]),W=V.width>0&&V.height>0,K=q.adaptive||"adaptive"===q.id,G=q.value??16/9,X=K&&V.width||U.width,Y=K?V.height||U.width/G:X/G,Z=(W?V.width/V.height:1)<=G,J=Math.max(1,Math.round(W?K||Z?V.width:V.height*G:X)),Q=Math.max(1,Math.round(W?K?V.height:Z?V.width/G:V.height:Y)),ee=J/X,et=ew.useMemo(()=>({url:H,device:U,ratio:q,viewport:{width:J,height:Q,scale:ee}}),[U,q,H,ee,Q,J]);function en(t,a={history:"push"}){void 0===e&&N(t),"none"!==a.history&&E(e=>{let n=e.slice(0,O+1);return n[n.length-1]===t?n:(P(n.length),[...n,t])}),n?.(t),r?.(t)}return ew.useEffect(()=>{C(e??k)},[k,e]),ew.useEffect(()=>{if(R)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof Node&&$.current?.contains(t)||D(!1)}},[R]),(0,eb.jsxs)("div",{ref:$,"data-slot":"browser-tab-viewer","data-device":U.id,"data-ratio":q.id,className:(0,eI.cn)("vtl-surface-panel relative grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",g?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",v),...w,children:[g&&(0,eb.jsxs)("div",{"data-slot":"browser-tab-viewer-header",className:(0,eI.cn)("flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",b),children:[(0,eb.jsx)("span",{className:"grid size-5 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:(0,eb.jsx)(G6,{className:"size-3.5"})}),(0,eb.jsxs)("form",{onSubmit:function(e){let t;e.preventDefault();let n=(t=S.trim())?/^[a-z][a-z\d+\-.]*:\/\//i.test(t)?t:/^(localhost|127\.0\.0\.1|\[::1\])(?::\d+)?(?:\/|$)/i.test(t)?`http://${t}`:`https://${t}`:"";C(n),en(n)},className:"min-w-0 flex-1",children:[(0,eb.jsx)("label",{className:"sr-only",htmlFor:F,children:j.urlLabel}),(0,eb.jsx)(eA,{id:F,value:S,onChange:e=>C(e.target.value),placeholder:j.urlPlaceholder,className:"h-5 rounded-md border bg-background px-2 shadow-none ui-text-kbd",spellCheck:!1})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.back,disabled:O<=0,onClick:function(){if(O<=0)return;let e=O-1,t=M[e];t&&(P(e),C(t),en(t,{history:"none"}),a?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(G3.ArrowLeftIcon,{className:"size-3.5"})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.forward,disabled:O>=M.length-1,onClick:function(){if(O>=M.length-1)return;let e=O+1,t=M[e];t&&(P(e),C(t),en(t,{history:"none"}),i?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(ej.ArrowRightIcon,{className:"size-3.5"})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.reload,onClick:()=>L(e=>e+1),className:"size-5 rounded-md",children:(0,eb.jsx)(bi,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,eI.cn)("grid min-h-0 place-items-center overflow-hidden bg-muted/20",y),children:(0,eb.jsx)("div",{"data-slot":"browser-tab-viewer-viewport",className:"overflow-hidden rounded-lg border bg-background shadow-sm",style:{width:J,height:Q},children:p?p(et):(0,eb.jsx)("iframe",{title:j.previewTitle,src:m?void 0:H,srcDoc:m,sandbox:"allow-forms allow-modals allow-popups allow-same-origin allow-scripts",className:"size-full border-0 bg-background"},`${_}-${H}-${U.id}-${q.id}`)})}),(0,eb.jsxs)("div",{"data-slot":"browser-tab-floating-actions",className:"absolute right-3 bottom-3 z-20",children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-popover absolute right-0 bottom-10 grid w-56 gap-3 rounded-[var(--surface-popover-radius)] border p-3 transition-[opacity,transform] duration-150",R?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0"),children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"text-muted-foreground ui-text-kbd",children:j.devices}),(0,eb.jsx)("div",{className:"flex gap-1.5",children:f.map(e=>(0,eb.jsx)(ez.Button,{type:"button",variant:U.id===e.id?"default":"outline",size:"icon-sm","aria-label":e.label,title:e.label,className:"rounded-full",onClick:()=>{let t;return t=Xn(f,e.id,U),void(void 0===o&&I(t.id),s?.(t.id,t))},children:(0,eb.jsx)(Xr,{id:e.id})},e.id))})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"text-muted-foreground ui-text-kbd",children:j.ratios}),(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.map(e=>(0,eb.jsx)(ez.Button,{type:"button",variant:q.id===e.id?"default":"outline",size:"xs",className:"h-7 rounded-full px-2.5 ui-text-kbd",onClick:()=>{let t;return t=Xn(h,e.id,q),void(void 0===c&&T(t.id),u?.(t.id,t))},children:e.label},e.id))})]})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":j.actions,"aria-expanded":R,onClick:()=>D(e=>!e),className:"rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let Xi=(0,ek.default)("monitor-off",[["path",{d:"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2",key:"k0q8oc"}],["path",{d:"M22 15V5a2 2 0 0 0-2-2H9",key:"cp1ac0"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),Xo=(0,ek.default)("rotate-cw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);function Xl({frame:e,cursor:t,connection:n,takeover:r,onTakeoverChange:a,onInput:i,onReconnect:o,machines:l,selectedMachineId:s,onSelectMachine:c,onStartBrowser:d,starting:u,monitoring:f,onMonitoringChange:h,className:m}){let p=ew.useRef(null),g=ew.useRef(null),x=ew.useRef(null),v=ew.useRef(t??null),b=ew.useRef(0),y=ew.useRef(!1),[w,j]=ew.useState(!1),k=ew.useCallback(()=>{let e=p.current,t=x.current;if(!e||!t)return;let n=e.getContext("2d");if(!n)return;n.drawImage(t,0,0,e.width,e.height);let r=v.current;if(!r)return;let a=Math.max(9,e.width/110);n.save(),n.beginPath(),n.arc(r.x,r.y,a,0,2*Math.PI),n.fillStyle="rgba(255,45,85,0.35)",n.fill(),n.lineWidth=Math.max(2,a/4),n.strokeStyle="rgba(255,255,255,0.95)",n.stroke(),n.beginPath(),n.arc(r.x,r.y,Math.max(2.5,.32*a),0,2*Math.PI),n.fillStyle="rgba(255,45,85,0.95)",n.fill(),n.restore()},[]);function N(t){let n=p.current;if(!n)return null;let r=n.getBoundingClientRect();if(0===r.width||0===r.height)return null;let a=(e?.width||n.width)/r.width,i=(e?.height||n.height)/r.height;return{x:Math.round((t.clientX-r.left)*a),y:Math.round((t.clientY-r.top)*i)}}function S(e,t){r&&i&&(e.preventDefault(),i({kind:"key",type:t,key:e.key}),"keyDown"===t&&1===e.key.length&&i({kind:"key",type:"char",key:e.key,text:e.key}))}ew.useEffect(()=>{let t=p.current;if(!t||!e?.b64)return;let n=new Image;return g.current=n,n.onload=()=>{if(g.current!==n)return;let r=e.width||n.naturalWidth,a=e.height||n.naturalHeight;t.width!==r&&(t.width=r),t.height!==a&&(t.height=a),x.current=n,k()},n.src=`data:image/jpeg;base64,${e.b64}`,()=>{n.onload=null,g.current===n&&(g.current=null)}},[e,k]),ew.useEffect(()=>{v.current=t??null,k()},[t,k]);let C="streaming"===n||!!e;return(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-panel relative flex size-full min-h-0 flex-col overflow-hidden",m),"data-slot":"live-browser-view",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 border-b bg-muted/35 px-3 py-2",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd shrink-0",children:"浏览器"}),(0,eb.jsx)("div",{className:"min-w-0 flex-1",children:l.length>0?(0,eb.jsx)("select",{value:s??"",onChange:e=>c?.(e.target.value),className:"h-6 w-full max-w-[16rem] truncate rounded-md border bg-background px-2 ui-text-kbd",children:l.map(e=>(0,eb.jsxs)("option",{value:e.id,disabled:!e.running,children:[e.label,e.running?"":"(未运行)"]},e.id))}):(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"无可用浏览器"})}),h?(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:f?"default":"outline",className:"h-6 gap-1 rounded-md px-2 ui-text-kbd","aria-pressed":!!f,onClick:()=>h(!f),title:f?"浏览器监视:开启(有头实时画面,会打开一个真实浏览器窗口)。点击关闭后仅在 agent 每次操作后显示一帧。":"浏览器监视:关闭(仅在 agent 每次操作后显示一帧)。点击开启有头实时画面,会打开一个真实浏览器窗口。",children:[f?(0,eb.jsx)(eP,{className:"size-3.5"}):(0,eb.jsx)(Xi,{className:"size-3.5"}),"监视"]}):null,(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:r?"default":"outline",className:"h-6 gap-1 rounded-md px-2 ui-text-kbd","aria-pressed":r,onClick:()=>a(!r),disabled:"streaming"!==n,title:r?"切换到观看模式":"接管:在画面里直接操作",children:[r?(0,eb.jsx)(lW,{className:"size-3.5"}):(0,eb.jsx)(lZ,{className:"size-3.5"}),r?"接管中":"观看"]}),"error"===n&&o?(0,eb.jsx)(ez.Button,{type:"button",size:"icon-xs",variant:"ghost",className:"size-6 rounded-md","aria-label":"重新连接",onClick:o,children:(0,eb.jsx)(Xo,{className:"size-3.5"})}):null]}),(0,eb.jsxs)("div",{className:"relative grid min-h-0 flex-1 place-items-center overflow-hidden bg-black/85",children:[C?(0,eb.jsx)("canvas",{ref:p,tabIndex:r?0:-1,onPointerDown:function(e){if(!r||!i)return;let t=N(e);t&&(y.current=!0,e.currentTarget.setPointerCapture(e.pointerId),p.current?.focus(),i({kind:"mouse",type:"mousePressed",button:"left",...t}))},onPointerUp:function(e){if(!r||!i)return;let t=N(e);y.current=!1;try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}t&&i({kind:"mouse",type:"mouseReleased",button:"left",...t})},onPointerMove:function(e){if(!r||!i)return;let t=performance.now();if(t-b.current<33)return;b.current=t;let n=N(e);n&&i({kind:"mouse",type:"mouseMoved",button:y.current?"left":"none",...n})},onKeyDown:e=>S(e,"keyDown"),onKeyUp:e=>S(e,"keyUp"),onFocus:()=>j(!0),onBlur:()=>j(!1),className:(0,eI.cn)("max-h-full max-w-full object-contain outline-none",r?"cursor-crosshair":"cursor-default")}):(0,eb.jsx)("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:"connecting"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-5 animate-spin"}),(0,eb.jsx)("span",{children:"正在连接浏览器…"})]}):"error"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"连接浏览器失败"}),o?(0,eb.jsx)(ez.Button,{type:"button",size:"xs",variant:"outline",onClick:o,children:"重试"}):null]}):u?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-5 animate-spin"}),(0,eb.jsx)("span",{children:"正在启动浏览器…"})]}):0===l.length?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"未安装浏览器"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/70",children:"请在「官方扩展」页面安装 Vantaloom 浏览器"})]}):d?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器已停止"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:d,children:[(0,eb.jsx)(VN,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"等待 agent 操作后显示画面"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:()=>h(!0),children:[(0,eb.jsx)(eP,{className:"size-3.5"}),"开启浏览器监视以查看实时画面"]})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xi,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器未运行"})]})}),r&&C?(0,eb.jsxs)("div",{className:"pointer-events-none absolute inset-0",children:[(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-0 rounded-sm ring-2 ring-inset transition-colors",w?"ring-hot-pink":"ring-hot-pink/50")}),(0,eb.jsxs)("span",{className:"absolute left-2 top-2 rounded bg-hot-pink/90 px-1.5 py-0.5 text-[10px] font-medium text-white",children:["接管中",w?"":"(点击画面以捕获键盘)"]})]}):null]})]})}function Xs(e,t){return e?eR(`/v1/remote/${e}/browser${t}`):eR(`/v1/browser${t}`)}async function Xc(e,t){try{await fetch(Xs(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function Xd({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xk(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await GL(t,{timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);if(!r||!r.installed)return null;return{id:e,machineId:t,label:n,installed:r.installed,running:r.running}}catch{return null}}async function i(){let e=[{id:"",machineId:void 0,label:"本机"}];for(let t of n)t.isLocal||"online"===t.status&&e.push({id:t.id,machineId:t.id,label:t.name||t.id});let i=await Promise.all(e.map(e=>r(e.id,e.machineId,e.label)));t||a(i.filter(e=>null!==e))}i();let o=window.setInterval(i,1e4);return()=>{t=!0,window.clearInterval(o)}},[e,n,t]),r}(e,n),[i,o]=ew.useState(""),[l,s]=ew.useState(!1),[c,d]=ew.useState(!1),[u,f]=ew.useState(!1);ew.useEffect(()=>{0===a.length||a.some(e=>e.id===i)||o((a.find(e=>e.running)??a[0]).id)},[a,i]);let h=a.find(e=>e.id===i),m=!!h?.running;ew.useEffect(()=>{!m&&l&&s(!1)},[m,l]);let{frame:p,cursor:g,connection:x,reconnect:v}=function(e){let{machineId:t,enabled:n}=e,[r,a]=ew.useState(null),[i,o]=ew.useState(null),[l,s]=ew.useState("idle"),[c,d]=ew.useState(0),u=ew.useCallback(()=>{d(e=>e+1)},[]);return ew.useEffect(()=>{let e;if(!n){s("idle"),a(null),o(null);return}let r=!1,i=new AbortController;async function l(){s("connecting");try{let e=await fetch(Xs(t,"/screencast"),{cache:"no-store",headers:{Accept:"text/event-stream"},signal:i.signal});if(r)return;if(404===e.status||409===e.status){s("no-browser"),c();return}if(!e.ok||!e.body){s("error"),c();return}let n=e.body.getReader(),l=new TextDecoder,d="";for(s("streaming");;){let{value:e,done:t}=await n.read();if(r||t)break;let i=(d+=l.decode(e,{stream:!0})).indexOf("\n\n");for(;-1!==i;){let e=d.slice(0,i);d=d.slice(i+2),function(e){let t=e.split("\n").filter(e=>e.startsWith("data:")).map(e=>e.slice(5).trimStart());if(0===t.length)return;let n=t.join("\n");if(n&&"[DONE]"!==n)try{let e=JSON.parse(n);"frame"===e.type&&e.b64?a({b64:e.b64,width:e.meta?.width??0,height:e.meta?.height??0}):"cursor"===e.type&&"number"==typeof e.x&&"number"==typeof e.y&&o({x:e.x,y:e.y})}catch{}}(e),i=d.indexOf("\n\n")}}r||(s("connecting"),c())}catch{if(r||i.signal.aborted)return;s("error"),c()}}function c(){r||(e=setTimeout(()=>{r||l()},1500))}return l(),()=>{r=!0,i.abort(),e&&clearTimeout(e)}},[t,n,c]),{frame:r,cursor:i,connection:l,reconnect:u}}({machineId:h?.machineId,enabled:e&&m});ew.useEffect(()=>{if(!e||!m)return void f(!1);let t=!1;return GU(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{Gq(h?.machineId,e).then(e=>{f(e.monitoring),v()}).catch(()=>{})},[h,v]),y=a.map(e=>({id:e.id,machineId:e.machineId,label:e.label,running:e.running})),w=ew.useCallback(e=>{Xc(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await GH(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GL(h?.machineId,{timeoutMs:6e3});if(e.extensions.find(e=>"browser"===e.id)?.running)break}catch{}}}catch{}finally{d(!1),r(e=>e+1)}}},[h,c]);return(0,eb.jsx)(Xl,{cursor:g,className:t,frame:p,connection:m?x:"no-browser",takeover:l,onTakeoverChange:s,onInput:w,onReconnect:v,machines:y,selectedMachineId:i,onSelectMachine:o,onStartBrowser:h&&!m?()=>void j():void 0,starting:c,monitoring:u,onMonitoringChange:m?b:void 0})}function Xu({defaultUrl:e,className:t}){let{machines:n}=xk(),[r,a]=ew.useState(!1);return(ew.useEffect(()=>{let e=!1;async function t(){let t=[void 0];for(let e of n)e.isLocal||"online"===e.status&&t.push(e.id);let r=await Promise.all(t.map(async e=>{try{let t=await GL(e,{timeoutMs:6e3});return!!t.extensions.find(e=>"browser"===e.id)?.running}catch{return!1}}));e||a(r.some(Boolean))}t();let r=window.setInterval(t,12e3);return()=>{e=!0,window.clearInterval(r)}},[n]),r)?(0,eb.jsx)(Xd,{active:!0,className:t}):(0,eb.jsx)(Xa,{className:t,defaultUrl:e})}let Xf=[{policyNumber:3,name:"Allow HTTP Traffic",sourceZone:"Trust",sourceIPs:["192.168.1.0/24","10.0.0.0/8"],destinationZone:"Trust",destinationIPs:["192.168.2.0/24"],tags:["Web Access","Internal"],action:"allow",description:"Permits HTTP traffic from internal network"},{policyNumber:5,name:"Block Suspicious IPs",sourceZone:"Untrust",sourceIPs:["203.0.113.0/24","198.51.100.0/24"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Blocking","Security"],action:"deny",description:"Blocks known malicious IP ranges"},{policyNumber:9,name:"SSH Access Control",sourceZone:"Trust",sourceIPs:["172.16.0.0/12"],destinationZone:"Trust",destinationIPs:["10.50.0.0/16"],tags:["Admin Access","VPN"],action:"allow",description:"Restricted SSH access for admin network"},{policyNumber:12,name:"Database Port Protection",sourceZone:"Untrust",sourceIPs:["0.0.0.0/0"],destinationZone:"Trust",destinationIPs:["10.100.0.0/24"],tags:["Blocking","Database"],action:"deny",description:"Blocks external access to database ports"},{policyNumber:15,name:"API Gateway Access",sourceZone:"Trust",sourceIPs:["192.168.100.0/24","192.168.101.0/24"],destinationZone:"Trust",destinationIPs:["10.200.0.5"],tags:["API","VDI Env"],action:"allow",description:"Allows traffic to API gateway from specific subnets"},{policyNumber:18,name:"Drop Legacy SMB",sourceZone:"Trust",sourceIPs:["Any"],destinationZone:"Trust",destinationIPs:["10.20.0.0/16"],tags:["Legacy","Internal"],action:"drop",description:"Drops SMBv1 probes across workstation networks"},{policyNumber:22,name:"Agent Runtime Mesh",sourceZone:"Trust",sourceIPs:["10.10.4.0/24"],destinationZone:"Trust",destinationIPs:["10.10.8.0/24","10.10.12.0/24"],tags:["Agent","Runtime"],action:"allow",description:"Allows managed agent runtime channels between worker pools"},{policyNumber:27,name:"Block Public Admin Ports",sourceZone:"Untrust",sourceIPs:["0.0.0.0/0"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Blocking","Admin Access"],action:"deny",description:"Denies public access to SSH, RDP, and database admin ports"},{policyNumber:31,name:"Build Cache Access",sourceZone:"Trust",sourceIPs:["10.30.0.0/16"],destinationZone:"Trust",destinationIPs:["10.60.12.20"],tags:["Build","Internal"],action:"allow",description:"Allows build workers to reach shared cache storage"},{policyNumber:36,name:"Relay Egress",sourceZone:"Trust",sourceIPs:["10.40.0.0/16"],destinationZone:"Untrust",destinationIPs:["198.18.0.0/15"],tags:["Relay","Agent"],action:"allow",description:"Permits relay service egress to managed edge addresses"},{policyNumber:41,name:"Quarantine Subnet",sourceZone:"Quarantine",sourceIPs:["10.250.0.0/24"],destinationZone:"Trust",destinationIPs:["Any"],tags:["Security","Blocking"],action:"deny",description:"Blocks quarantined hosts from internal services"},{policyNumber:48,name:"Observability Intake",sourceZone:"Trust",sourceIPs:["10.0.0.0/8"],destinationZone:"Trust",destinationIPs:["10.80.4.10"],tags:["Telemetry","Internal"],action:"allow",description:"Allows metrics and logs to the observability intake"}],Xh=Array.from(new Set(Xf.flatMap(e=>e.tags))).sort(),Xm=[["10.10.4.0/24","Agent workers","Trust","18"],["10.20.0.0/16","Workstations","Trust","41"],["10.250.0.0/24","Quarantine","Quarantine","03"],["198.18.0.0/15","Relay edge","Untrust","12"]],Xp=[["Database Port Protection","2026-06-12","Security"],["Relay Egress","2026-06-28","Network"],["Build Cache Access","2026-07-04","Build"],["Observability Intake","2026-07-18","Ops"]];function Xg({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,eI.cn)("mx-auto flex w-full justify-center",e),...t})}function Xx({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,eI.cn)("flex flex-row items-center gap-1",e),...t})}function Xv({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function Xb({className:e,isActive:t,size:n="icon",...r}){return(0,eb.jsx)("a",{"aria-current":t?"page":void 0,"data-slot":"pagination-link","data-active":t,className:(0,eI.cn)((0,ez.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function Xy({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(Xb,{"aria-label":t,size:"default",className:(0,eI.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(mQ,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function Xw({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(Xb,{"aria-label":t,size:"default",className:(0,eI.cn)("gap-1 px-2.5 sm:pr-2",e),...n,children:[(0,eb.jsx)("span",{className:"hidden sm:block",children:t}),(0,eb.jsx)(m0,{})]})}function Xj({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,eI.cn)("flex size-8 items-center justify-center",e),...n,children:[(0,eb.jsx)(lY,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:t})]})}function Xk({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XN(){let[e,t]=ew.useState(""),[n,r]=ew.useState("all"),[a,i]=ew.useState({allow:!1,drop:!1,deny:!1}),[o,l]=ew.useState(1),s=ew.useMemo(()=>["allow","drop","deny"].filter(e=>a[e]),[a]),c=ew.useMemo(()=>[{id:"policyNumber",header:"策略 #",accessorKey:"policyNumber",align:"right",width:84},{id:"name",header:"名称",accessorKey:"name",width:180,className:"font-medium"},{id:"sourceZone",header:"源区域",accessorKey:"sourceZone",width:112,cell:({row:e})=>(0,eb.jsx)(XM,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(XM,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XC,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XE,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return Xf.filter(e=>{let r=0===t.length||e.name.toLowerCase().includes(t)||e.description.toLowerCase().includes(t)||e.sourceIPs.some(e=>e.toLowerCase().includes(t))||e.destinationIPs.some(e=>e.toLowerCase().includes(t)),i="all"===n||e.tags.includes(n),o=!(a.allow||a.drop||a.deny)||a.allow&&"allow"===e.action||a.drop&&"drop"===e.action||a.deny&&"deny"===e.action;return r&&i&&o})},[a,e,n]),u=Math.max(1,Math.ceil(d.length/8)),f=Math.min(o,u),h=d.slice((f-1)*8,8*f);return ew.useEffect(()=>{l(1)},[a,e,n]),(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col p-3",children:[(0,eb.jsxs)("div",{className:"mb-3 flex shrink-0 items-center justify-between gap-3",children:[(0,eb.jsx)(Xk,{title:"防火墙策略"}),(0,eb.jsxs)(ez.Button,{size:"sm",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"新增策略"]})]}),(0,eb.jsxs)("div",{className:"mb-3 grid shrink-0 grid-cols-1 items-end gap-3 sm:grid-cols-[minmax(12rem,1fr)_10rem_auto]",children:[(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"搜索"}),(0,eb.jsxs)("span",{className:"relative",children:[(0,eb.jsx)(xN,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(eA,{value:e,onChange:e=>t(e.target.value),placeholder:"搜索策略...",className:"pl-8"})]})]}),(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"标签"}),(0,eb.jsxs)(gR,{value:n,onValueChange:r,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"全部标签"})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"all",children:"全部标签"}),Xh.map(e=>(0,eb.jsx)(xv,{value:e,children:e},e))]})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"动作"}),(0,eb.jsxs)(mV,{type:"multiple",variant:"outline",value:s,onValueChange:function(e){e.includes("clear")?(t(""),r("all"),i({allow:!1,drop:!1,deny:!1}),l(1)):i({allow:e.includes("allow"),drop:e.includes("drop"),deny:e.includes("deny")})},children:[(0,eb.jsx)(mH,{value:"allow",children:"允许"}),(0,eb.jsx)(mH,{value:"drop",children:"丢弃"}),(0,eb.jsx)(mH,{value:"deny",children:"拒绝"}),(0,eb.jsx)(mH,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qm,{rows:h,columns:c,rowId:"policyNumber",showHeader:!1,showToolbar:!1,rowHeight:40,className:"min-h-0 flex-1 rounded-lg shadow-none",labels:{noRows:"没有匹配的策略。",selectAllRows:"选择当前页策略",selectRow:e=>`选择第 ${e+1} 条策略`,resizeColumn:"调整列宽",sortAsc:"升序",sortDesc:"降序",sortClear:"取消排序",copyCell:"复制单元格",copied:"已复制"}}),(0,eb.jsx)(XS,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XS({page:e,totalPages:t,onPageChange:n}){let r=ew.useMemo(()=>t<=3?Array.from({length:t},(e,t)=>t+1):e<=2?[1,2,3]:e>=t-1?[t-2,t-1,t]:[e-1,e,e+1],[e,t]),a=r[0]??1,i=r[r.length-1]??t;function o(e,t){e.preventDefault(),n(t)}return(0,eb.jsx)(Xg,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(Xx,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xy,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,eI.cn)(1===e&&"pointer-events-none opacity-40"),onClick:t=>o(t,e-1)})}),a>1?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xj,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",isActive:e===t,onClick:e=>o(e,t),children:t})},t)),i<t?(0,eb.jsxs)(eb.Fragment,{children:[i<t-1?(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xj,{moreLabel:"更多页"})}):null,(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xb,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(Xv,{children:(0,eb.jsx)(Xw,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,eI.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XC({items:e,variant:t}){return(0,eb.jsx)("div",{className:"flex min-w-48 flex-wrap gap-1",children:e.map(e=>(0,eb.jsx)(Bu,{variant:t,children:e},e))})}function XM({zone:e}){return(0,eb.jsx)(Bu,{variant:"Trust"===e?"secondary":"outline",children:e})}function XE({action:e}){return(0,eb.jsx)(Bu,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XO({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:(0,eb.jsx)("table",{"data-slot":"table",className:(0,eI.cn)("w-full caption-bottom text-sm",e),...t})})}function XP({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,eI.cn)("[&_tr]:border-b",e),...t})}function Xz({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,eI.cn)("[&_tr:last-child]:border-0",e),...t})}function XI({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,eI.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function XA({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,eI.cn)("h-9 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XT({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,eI.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XR({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XD({title:e,headers:t,rows:n}){return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col p-3",children:[(0,eb.jsx)(XR,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XO,{children:[(0,eb.jsx)(XP,{children:(0,eb.jsx)(XI,{children:t.map(e=>(0,eb.jsx)(XA,{children:e},e))})}),(0,eb.jsx)(Xz,{children:n.map(e=>(0,eb.jsx)(XI,{children:e.map((e,t)=>(0,eb.jsx)(XT,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function X_(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(XR,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(eA,{placeholder:"策略名称"}),(0,eb.jsx)(eA,{placeholder:"负责人"}),(0,eb.jsx)(eA,{placeholder:"源 CIDR"}),(0,eb.jsx)(eA,{placeholder:"目标 CIDR"})]}),(0,eb.jsx)("textarea",{placeholder:"用途",className:"min-h-32 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{size:"sm",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"提交申请"]})})]})}function XL(){return(0,eb.jsxs)(mu,{defaultValue:"policies",className:"vtl-firewall-workspace flex h-full min-h-0 flex-col",children:[(0,eb.jsx)("div",{className:"shrink-0 overflow-x-auto px-3 pt-3 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsxs)(my,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mw,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mw,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mw,{value:"renewals",children:"续期"}),(0,eb.jsx)(mw,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mw,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mj,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XN,{})}),(0,eb.jsx)(mj,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:Xm})}),(0,eb.jsx)(mj,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"续期",headers:["策略","续期时间","负责人"],rows:Xp})}),(0,eb.jsx)(mj,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X_,{})}),(0,eb.jsx)(mj,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XD,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function X$(e){return e.map(e=>{var t;return{id:e.id,name:e.name,path:e.path,kind:"folder"===(t=e.kind)?"folder":"image"===t?"image":"archive"===t?"archive":"text"===t?"text":"code"===t?"code":"executable"===t?"config":"unknown",hasChildren:"folder"===e.kind,readonly:e.readonly,disabled:e.disabled}})}async function XF(e,t){let n=t.machineId||"local";return X$((await uK(n,e.path)).items)}function XB({className:e,onOpenFile:t}){let[n,r]=ew.useState([]),[a,i]=ew.useState(!1),[o,l]=ew.useState(0),s=ew.useCallback(async()=>{i(!0);try{let e=await uW();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:X$(e.children)}))),l(e=>e+1)}catch{r([]),l(e=>e+1)}finally{i(!1)}},[]);return ew.useEffect(()=>{s()},[s]),ew.useEffect(()=>{function e(){s()}return window.addEventListener("vantaloom:file-system-changed",e),()=>window.removeEventListener("vantaloom:file-system-changed",e)},[s]),(0,eb.jsx)(HW,{className:e,compact:!0,openFilesOnSingleClick:!1,allowCreateFile:!1,allowCreateFolder:!1,allowRename:!1,allowDelete:!1,allowDragAndDrop:!1,allowBoxSelect:!1,defaultRoots:n,defaultExpandedIds:n.map(e=>e.id),loadingIds:a?n.map(e=>e.id):[],labels:{title:"Explorer",refresh:"刷新",collapseAll:"折叠",empty:"没有文件",noResults:"没有匹配文件",loading:"读取中..."},onLoadChildren:XF,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function XV({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dC,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fv,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fw,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fj,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(XB,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function XH(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useLayoutEffect(()=>{let t=e.current;if(!t)return;function r(){let e=t.getBoundingClientRect();n({width:e.width,height:e.height})}r();let a=new ResizeObserver(r);return a.observe(t),()=>a.disconnect()},[]),[e,t]}let XU=(0,ek.default)("shield-off",[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]]);function Xq({open:e,placement:t="viewport",movePermissionGranted:n,onOpenChange:r,onAdd:a,onMovePermissionGrantedChange:i}){let o=[{key:"move-permission",label:n?"取消放行权限":"放行权限",icon:n?(0,eb.jsx)(jD,{className:"size-4"}):(0,eb.jsx)(XU,{className:"size-4"}),pressed:n,onClick:()=>i(!n)},{key:"add",label:"新建文件窗口",icon:(0,eb.jsx)(lJ,{className:"size-4"}),pressed:void 0,onClick:a}];return(0,eb.jsx)("div",{className:(0,eI.cn)("right-5 z-50","viewport"===t?"fixed bottom-5 max-md:bottom-20":"absolute bottom-5"),children:(0,eb.jsxs)("div",{className:"relative size-8",children:[o.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,title:t.label,onClick:t.onClick,className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0",t.pressed&&"border-foreground bg-foreground text-background hover:bg-foreground/90 hover:text-background"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":"文件窗口操作","aria-expanded":e,onClick:()=>r(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let XW=[];function XK(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function XG(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?XG(n.children,t):void 0;if(e)return e}}function XX(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function XY(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function XZ(e){return e.map(e=>({...e,children:e.children?XZ(e.children):void 0}))}let XJ=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),XQ=(0,ek.default)("octagon-alert",[["path",{d:"M12 16h.01",key:"1drbdi"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z",key:"1fd625"}]]),X0=(0,ek.default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]),X1={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function X2({items:e,expanded:t,defaultExpanded:n=!1,expansionDirection:r="down-left",title:a,labels:i,maxCollapsedItems:o=10,maxExpandedHeight:l=360,acceptExternalDrops:s=!1,removeOnExternalDrop:c=!1,className:d,onExpandedChange:u,onItemDragStart:f,onItemDragEnd:h,onItemDuplicate:m,onItemsRemove:p,onItemsReorder:g,onExternalDrop:x,onMouseEnter:v,onMouseLeave:b,...y}){let w={...X1,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,O]=ew.useState(n),[P,z]=ew.useState(),[I,A]=ew.useState({canScrollDown:!1,canScrollUp:!1}),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),L=ew.useRef(0),$=ew.useRef(void 0),F=ew.useRef(!1),B=ew.useRef(null),V=ew.useRef(null),H=void 0!==t,U=(H?t:j)||void 0!==N,q=Math.min(o,10),W=U?e:e.slice(0,q),K=E?C:void 0,G=44*W.length+18,X=Math.min(G,l),Y=U&&G>X,Z=0===e.length?"h-24":U?`${X}px`:"h-28",J=U&&Y?14:0;ew.useEffect(()=>{if(!U){O(!1),A({canScrollDown:!1,canScrollUp:!1});return}O(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),A({canScrollUp:!1,canScrollDown:G>X});let e=window.setTimeout(()=>{O(!0)},260);return()=>window.clearTimeout(e)},[G,X,U]),ew.useEffect(()=>()=>{void 0!==$.current&&window.clearTimeout($.current)},[]);let Q=ew.useCallback(e=>{H||k(e),u?.(e)},[H,u]);function ee(e,t=0){let n=e.currentTarget.getBoundingClientRect();return e.clientX>=n.left-t&&e.clientX<=n.right+t&&e.clientY>=n.top-t&&e.clientY<=n.bottom+t}function et(e){if(!U||!V.current)return 0;let t=Array.from(V.current.querySelectorAll('[data-slot="clipboard-stack-card"]'));if(0===t.length)return 0;for(let[n,r]of t.entries()){let t=r.getBoundingClientRect();if(e.clientY<t.top+t.height/2)return n}return t.length}function en(e){return void 0!==N||Array.from(e.dataTransfer.types).includes("application/vnd.vantaloom.clip-id")}return ew.useEffect(()=>{if(0===e.length||U)return;let t=window.requestAnimationFrame(()=>{B.current?.matches(":hover")&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0))});return()=>window.cancelAnimationFrame(t)},[e.length,Q,U]),ew.useEffect(()=>{if(!U||!Y||!K||!V.current)return;let e=W.findIndex(e=>e.id===K);if(e<0)return;let t=V.current,n=44*e-8,r=44*e+(W[e]?.expandedHeight??220)+12,a=t.scrollTop,i=a+t.clientHeight;n<a?t.scrollTo({top:Math.max(0,n),behavior:"smooth"}):r>i&&t.scrollTo({top:r-t.clientHeight,behavior:"smooth"})},[K,Y,W,U]),(0,eb.jsxs)("div",{ref:B,"data-slot":"clipboard-stack","data-expanded":U,"data-closing":T,"data-external-dragging":D,"data-expansion-direction":r,className:(0,eI.cn)("group/clipboard relative w-80 max-w-full overflow-visible py-2",d),onMouseEnter:function(e){v?.(e),ee(e)&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0))},onMouseMove:function(e){if(!U){ee(e,12)&&(void 0!==$.current&&(window.clearTimeout($.current),$.current=void 0),R(!1),Q(!0));return}!U||N||ee(e,12)||(M(void 0),z(void 0),Q(!1),R(!0),void 0!==$.current&&window.clearTimeout($.current),$.current=window.setTimeout(()=>{R(!1),$.current=void 0},320))},onMouseLeave:function(e){b?.(e),N||(M(void 0),z(void 0),R(!0),Q(!1),void 0!==$.current&&window.clearTimeout($.current),$.current=window.setTimeout(()=>{R(!1),$.current=void 0},320))},onDragEnter:function(e){!s||en(e)||(L.current+=1,_(!0),R(!1))},onDragLeave:function(e){!s||en(e)||(L.current=Math.max(0,L.current-1),0===L.current&&(_(!1),z(void 0)))},onDragOver:function(e){!s||en(e)||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",_(!0),U?z(et(e)):z(0))},onDrop:function(t){if(!s||en(t))return;t.preventDefault(),t.stopPropagation();let n=P??et(t);L.current=0,_(!1),z(void 0),x?.({insertIndex:n,items:e,nativeEvent:t})},...y,children:[(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-header",className:(0,eI.cn)("mb-2 flex h-8 items-center gap-2 px-1 text-sm font-medium text-foreground transition-[opacity,transform] duration-200","down-left"===r&&"justify-end",U?"opacity-100":"translate-y-1 opacity-0"),children:[(0,eb.jsx)("span",{className:"inline-flex size-6 items-center justify-center rounded-lg border bg-background text-muted-foreground",children:(0,eb.jsx)(X0,{className:"size-3.5"})}),(0,eb.jsx)("span",{children:a??w.title}),(0,eb.jsx)("span",{className:"ml-auto tabular-nums text-muted-foreground",children:e.length})]}),(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-list",className:(0,eI.cn)("relative transition-[height] duration-300 ease-[cubic-bezier(.2,.8,.2,1)]"),style:{height:Z},children:[e.length>0&&"down-left"===r?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-pivot","aria-hidden":"true",className:(0,eI.cn)("pointer-events-none absolute top-3 right-[34px] z-50 size-2.5 rounded-full bg-foreground shadow-sm transition-[opacity,transform] duration-200 dark:bg-background",U?"scale-75 opacity-0":"opacity-100")}):null,s&&D?(0,eb.jsxs)("span",{"data-slot":"clipboard-stack-external-ghost","aria-hidden":"true",className:(0,eI.cn)("pointer-events-none absolute right-0 z-[70] h-14 w-[88%] rounded-xl border bg-background shadow-md shadow-black/10","clipboard-stack-external-ghost"),children:[(0,eb.jsx)("span",{className:"absolute top-3 right-[34px] size-2 rounded-full bg-foreground dark:bg-background"}),(0,eb.jsx)("span",{className:"absolute top-4 left-3 h-2 w-24 rounded-full bg-foreground/18"}),(0,eb.jsx)("span",{className:"absolute top-8 left-3 h-1.5 w-14 rounded-full bg-foreground/10"})]}):null,0===e.length?(0,eb.jsx)("div",{className:"flex h-24 items-center justify-center rounded-xl border border-dashed bg-muted/35 text-sm text-muted-foreground",children:w.empty}):(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-scroll-frame",className:"relative h-full",children:[(0,eb.jsx)("div",{"data-slot":"clipboard-stack-scroll",ref:V,className:(0,eI.cn)("relative h-full overflow-x-visible",U&&Y?"clipboard-stack-scrollbar-hidden overflow-y-auto pt-2 pr-1 pb-3":"overflow-visible"),onScroll:e=>{let t=e.currentTarget;A({canScrollUp:t.scrollTop>1,canScrollDown:t.scrollTop+t.clientHeight<t.scrollHeight-1})},onDragOver:function(e){U&&N&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move")},onDrop:function(t){if(!U||!N||void 0===P)return;t.preventDefault(),t.stopPropagation(),F.current=!0;let n=e.findIndex(e=>e.id===N),r=e[n];if(n<0||!r)return;let a=e.filter(e=>e.id!==N),i=Math.max(0,Math.min(P>n?P-1:P,a.length));a.splice(i,0,r),z(void 0),M(void 0),i!==n&&g?.(a,{item:r,fromIndex:n,toIndex:i,items:a})},children:(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-scroll-content",className:"relative",style:{width:U&&Y?`calc(100% - ${J}px)`:void 0,marginLeft:U&&Y?`${J}px`:void 0,height:U&&Y?G+28:U?G:"100%"},children:[void 0!==P?(0,eb.jsxs)("span",{"data-slot":"clipboard-stack-insert-line","aria-hidden":"true",className:"pointer-events-none absolute right-0 left-0 z-[80] flex items-center",style:{top:44*P-2},children:[(0,eb.jsx)("span",{className:"h-px flex-1 bg-foreground/70"}),(0,eb.jsx)("span",{className:"mx-1 size-1.5 rounded-full bg-foreground"}),(0,eb.jsx)("span",{className:"h-px flex-1 bg-foreground/70"})]}):null,W.map((t,n)=>(0,eb.jsx)(X5,{item:t,index:n,count:W.length,expanded:U,active:U&&t.id===K,top:U?44*n:void 0,expansionDirection:r,labels:w,onHover:()=>M(t.id),onDuplicate:()=>{let n=e.findIndex(e=>e.id===t.id);n<0||m?.(e,{item:t,index:n,items:e})},onDragOver:e=>{if(U&&N&&N!==t.id){let t=e.currentTarget.getBoundingClientRect();z(e.clientY<t.top+t.height/2?n:n+1)}},onDragStart:e=>{S(e.item.id),M(void 0),F.current=!1,f?.(e)},onDragEnd:t=>{let n=t.nativeEvent.dataTransfer.dropEffect,r=t.item.id,a=e.findIndex(e=>e.id===r),i=c&&!F.current&&"none"!==n&&a>=0;if(S(void 0),z(void 0),M(void 0),F.current?F.current=!1:Q(!1),i){let n=e.filter(e=>e.id!==r);p?.(n,{item:t.item,index:a,items:n})}h?.(t)}},t.id))]})}),Y&&I.canScrollUp?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-scroll-mask-top","aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 top-0 z-[90] h-8 bg-gradient-to-b from-background to-transparent"}):null,Y&&I.canScrollDown?(0,eb.jsx)("span",{"data-slot":"clipboard-stack-scroll-mask-bottom","aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 bottom-0 z-[90] h-8 bg-gradient-to-t from-background to-transparent"}):null]})]})]})}function X5({item:e,index:t,count:n,expanded:r,active:a,top:i,expansionDirection:o,labels:l,onHover:s,onDuplicate:c,onDragOver:d,onDragStart:u,onDragEnd:f}){let h=Math.min(t,9),m="down-left"===o?-(4.5*h):[-4,2,-1,4][h]??0,p=r?a?n+20:n-t:n+t;return(0,eb.jsx)("article",{"data-slot":"clipboard-stack-card",draggable:!e.disabled,"aria-disabled":e.disabled,className:(0,eI.cn)("absolute right-0 min-h-16 w-full cursor-grab select-none rounded-xl border bg-background p-2.5 text-foreground shadow-sm shadow-black/5 outline-none transition-[top,transform,opacity,box-shadow,border-color] duration-300 ease-[cubic-bezier(.2,.8,.2,1)] active:cursor-grabbing","hover:border-foreground/35 hover:shadow-md hover:shadow-black/10 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/40",r&&"min-h-0 overflow-hidden py-2 transition-[top,transform,max-height,opacity,box-shadow,border-color] duration-300",r&&!a&&"max-h-11",e.disabled&&"cursor-not-allowed opacity-50"),style:{top:r?i??44*t:"down-left"===o?0:9*h,zIndex:p,maxHeight:r&&a?e.expandedHeight??220:void 0,transformOrigin:"down-left"===o?"calc(100% - 34px) 14px":"100% 0",transform:r?a?"translate3d(-10px, -6px, 0) rotate(0deg)":"translate3d(0, 0, 0) rotate(0deg)":`translate3d(${"down-left"===o?0:4*h}px, 0, 0) rotate(${m}deg)`},tabIndex:e.disabled?-1:0,onMouseDown:function(t){1!==t.button||e.disabled||t.preventDefault()},onMouseEnter:s,onFocus:s,onAuxClick:function(t){1!==t.button||e.disabled||(t.preventDefault(),c?.())},onDragOver:d,onDragStart:function(t){for(let[n,r]of(t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setData("text/plain",e.title),t.dataTransfer.setData("application/vnd.vantaloom.clip-id",e.id),Object.entries(e.dragData??{})))t.dataTransfer.setData(n,r);u?.({item:e,nativeEvent:t})},onDragEnd:function(t){f?.({item:e,nativeEvent:t})},children:(0,eb.jsxs)("div",{className:"flex min-w-0 items-start gap-2",children:[(0,eb.jsx)("div",{"data-slot":"clipboard-stack-card-media",className:"flex size-8 shrink-0 items-center justify-center rounded-lg border bg-muted text-muted-foreground",children:e.icon??(0,eb.jsx)(X0,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:e.title}),e.meta?(0,eb.jsx)("span",{className:"ml-auto shrink-0 text-xs tabular-nums text-muted-foreground",children:e.meta}):null]}),e.description?(0,eb.jsx)("p",{className:(0,eI.cn)("mt-0.5 text-xs leading-5 text-muted-foreground transition-[max-height,opacity,transform] duration-200",a?"max-h-40 translate-y-0 opacity-100":"max-h-0 -translate-y-1 overflow-hidden opacity-0"),children:e.description}):null,e.content?(0,eb.jsx)("div",{className:(0,eI.cn)("mt-2 text-xs text-muted-foreground transition-[max-height,opacity,transform] duration-200",a?"max-h-80 translate-y-0 opacity-100":"max-h-0 -translate-y-1 overflow-hidden opacity-0"),children:e.content}):null]}),(0,eb.jsx)("span",{"aria-label":l.dragHandle,className:"mt-1 inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground",children:(0,eb.jsx)(fk,{className:"size-3.5"})})]})})}function X4({transfers:e}){let t=e.slice(0,10);if(0===t.length)return null;let n=t.map(e=>{var t,n,r;let a,i,o;return{id:e.id,title:(a="copy"===(t=e).mode?"复制":"移动",i=t.sources.length,o=t.sources[0],`${a} ${i>1?`${i} 项`:X6(o?.path??"")}`),description:(n=e).message?n.message:`${n.sources[0]?.machineId??"local"} -> ${n.target.machineId}`,meta:function(e){switch(e.status){case"completed":return"完成";case"failed":return"失败";case"queued":return"排队";default:return`${Math.round(e.progress?.percent??0)}%`}}(e),icon:"completed"===(r=e).status?(0,eb.jsx)(eO,{className:"size-4"}):"failed"===r.status?(0,eb.jsx)(XQ,{className:"size-4"}):"running"===r.status?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"copy"===r.mode?(0,eb.jsx)(lU,{className:"size-4"}):(0,eb.jsx)(XJ,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(X3,{transfer:e})}});return(0,eb.jsx)("div",{className:"pointer-events-auto fixed top-4 right-4 z-50 w-80 max-w-[calc(100vw-2rem)] max-md:left-4 max-md:right-auto max-md:w-auto max-md:max-w-[16rem]",children:(0,eb.jsx)(X2,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function X3({transfer:e}){let t=Math.max(0,Math.min(100,e.progress?.percent??0));return(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-border",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-foreground transition-[width] duration-300",style:{width:`${t}%`}})}),(0,eb.jsxs)("div",{className:"grid gap-1 tabular-nums",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"truncate",children:X6(e.target.path)}),(0,eb.jsxs)("span",{children:[Math.round(t),"%"]})]}),(0,eb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2 text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"truncate",children:[X8(e.progress.bytesDone)," /"," ",X8(e.progress.bytesTotal)]}),(0,eb.jsxs)("span",{children:[e.progress.entriesDone,"/",e.progress.entriesTotal]})]}),e.progress.currentPath?(0,eb.jsx)("div",{className:"truncate text-muted-foreground",children:X6(e.progress.currentPath)}):null]})]})}function X6(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function X8(e){if(!e)return"0 B";let t=["B","KB","MB","GB","TB"],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||0===r?Math.round(n):n.toFixed(1)} ${t[r]}`}let X7=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function X9({windowLayout:e,roots:t,active:n,zIndex:r,boardSize:a,onActivate:i,onClose:o,onMinimize:l,onWindowChange:s,onNavigate:c,onRootsChange:d,onCreateFolder:u,onRenameItem:f,onDeleteItems:h,onMoveItems:m}){return(0,eb.jsxs)("section",{className:(0,eI.cn)("absolute overflow-hidden rounded-xl border bg-card shadow-lg transition-[box-shadow,border-color] duration-150","vtl-file-manager-window",n&&"border-foreground shadow-xl"),style:{left:e.x,top:e.y,width:e.w,height:e.h,zIndex:r},onPointerDown:i,children:[(0,eb.jsxs)("div",{className:"grid h-9 cursor-grab grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 border-b bg-muted/35 px-2 active:cursor-grabbing",onPointerDown:function(t){t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),i();let n=t.clientX,r=t.clientY;function a(t){let a=Math.max(0,e.x+t.clientX-n),i=Math.max(0,e.y+t.clientY-r);s({...e,x:a,y:i})}window.addEventListener("pointermove",a),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",e)})},children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(ez.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"关闭窗口",onPointerDown:e=>e.stopPropagation(),onClick:o,children:(0,eb.jsx)(fg.XIcon,{})}),(0,eb.jsx)(ez.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"缩小到剪切板",onPointerDown:e=>e.stopPropagation(),onClick:l,children:(0,eb.jsx)(X7,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(wG,{roots:t,variant:"full",currentRootId:e.rootId,currentPath:e.path,draggableItems:!0,onNavigate:c,onRootsChange:e=>d(e),onCreateFolder:u,onRenameItem:f,onDeleteItems:h,onItemDrop:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>m({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r}),labels:{title:"文件管理",search:"搜索文件",newFolder:"新建",upload:"上传",refresh:"刷新",sort:"排序",view:"视图"},className:"vtl-file-window-explorer min-h-0 rounded-none border-0 shadow-none",contentClassName:"min-h-0",style:{height:"calc(100% - 2.25rem)",minHeight:0}}),(0,eb.jsx)("button",{type:"button","aria-label":"调整窗口大小",className:"absolute right-0 bottom-0 size-5 cursor-nwse-resize rounded-tl-md border-t border-l bg-background/80",onPointerDown:function(t){t.preventDefault(),t.stopPropagation(),t.currentTarget.setPointerCapture(t.pointerId),i();let n=t.clientX,r=t.clientY;function o(t){let i=Math.max(420,Math.min(Math.max(420,a.width-e.x),e.w+t.clientX-n)),o=Math.max(320,e.h+t.clientY-r);s({...e,w:i,h:o})}window.addEventListener("pointermove",o),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",e)})}})]})}function Ye({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=XH(),[l,s]=ew.useState([]),[c,d]=ew.useState(XW),[u,f]=ew.useState(XW[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(XW.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await uK(e,n);s(n=>{var a;return a={...r,root:{...r.root,id:t,machineId:e}},n.map(e=>e.id!==a.root.id?e:XX(e.path,a.path)?{...e,children:XZ(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=XY(e,n),a=XY(t,n);if(r===a)return[];let i=r.endsWith("/")?r:`${r}/`;return a.startsWith(i)?a.slice(i.length).split("/").filter(Boolean):[]}(t,n,r);if(0===i.length)return XZ(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return XZ(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>XX(e.path,s)),d=t[c],u={...d??{id:`synthetic-${s}`,name:l,kind:"folder",path:s,children:[]},kind:"folder",children:e(d?.children??[],s,r+1)};if(c<0)return[...t,u];let f=[...t];return f[c]=u,f}(e,t,0)}(e.children,e.path,a.path,e.platform,a.items)})})},[]),S=ew.useCallback(async()=>{let e=Yr((await u0()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>Yr([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{uQ({mode:"move",sources:e.sources.map(e=>({machineId:e.machineId,path:e.path})),target:{machineId:e.target.machineId,path:e.target.path}}).then(C).catch(()=>{})},[C]),E=ew.useCallback(()=>{for(let e of c)N(e.machineId,e.rootId,e.path)},[N,c]);function O(e,t){d(n=>n.map(n=>n.id===e?t(n):n))}function P(e){let t=l[0];if(!t&&!e?.rootId)return;w.current+=1;let n=`files-window-${w.current}`,r=i.current?.getBoundingClientRect(),a=r?.width??o.width,s=r?.height??o.height,c=e?.w??680,u=e?.h??460,h=Math.max(0,(a-c)/2),m=Math.max(0,(s-u)/2),p={id:n,title:e?.title??XK(t?.name??"local",t?.path??""),machineId:e?.machineId??t?.machineId??"local",rootId:e?.rootId??t?.id??"local",path:e?.path??t?.path??"",x:e?.x??h+12*w.current,y:e?.y??m+12*w.current,w:c,h:u};d(e=>[...e,p]),f(n),N(p.machineId,p.rootId,p.path)}ew.useEffect(()=>{let e=!0;return(async function(){let t=await uW();if(e&&(s(t.roots),!j.current&&t.roots[0])){j.current=!0;let e=function(e,t=0){return{id:`files-${e.id.replace(/[^a-z0-9_-]/gi,"-")}-${t}`,title:XK(e.name,e.path),machineId:e.machineId,rootId:e.id,path:e.path,x:28+24*t,y:28+24*t,w:720,h:480}}(t.roots[0]);d([e]),f(e.id),N(e.machineId,e.rootId,e.path)}})().catch(()=>{}),S().catch(()=>{}),()=>{e=!1}},[N,S]),ew.useEffect(()=>{if(!h.some(e=>"pending"===e.status||"running"===e.status||"queued"===e.status))return;let e=window.setInterval(async()=>{let e=(await S().catch(()=>h)).filter(e=>"completed"===e.status&&!k.current.has(e.id));if(e.length>0){for(let t of e)k.current.add(t.id);E()}},1e3);return()=>window.clearInterval(e)},[E,S,h]);let z=sy(),I=c.find(e=>e.id===u);function A(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;O(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:XK(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{uY({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{uZ({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{uJ({machineId:e.machineId,paths:t.map(e=>e.path)}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onMoveItems:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>{let a=l.find(t=>t.id===e);if(!a)return;let i=t.flatMap(e=>{let t=XG(a.children,e);return t?[{machineId:a.machineId,path:t.path,name:t.name}]:[]});if(0===i.length)return;let o={sources:i,target:{machineId:n.machineId,path:r.path,name:r.name}};x?M(o):y(o)}}}return z?(0,eb.jsxs)("div",{className:(0,eI.cn)("flex h-full min-h-0 w-full flex-col",n),children:[c.length>1?(0,eb.jsx)("div",{className:"flex shrink-0 items-center gap-1 overflow-x-auto border-b px-2 py-1.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:c.map(e=>(0,eb.jsx)("button",{type:"button",className:(0,eI.cn)("shrink-0 rounded-md px-2.5 py-1 text-xs transition-colors",e.id===u?"bg-foreground text-background":"text-muted-foreground hover:bg-muted"),onClick:()=>f(e.id),children:e.title},e.id))}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:I?(0,eb.jsx)(Yt,{windowLayout:I,roots:l,...A(I)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(X4,{transfers:h}),(0,eb.jsx)(Xq,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),P()}}),(0,eb.jsx)(Yn,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]}):(0,eb.jsxs)("div",{ref:i,className:(0,eI.cn)("relative h-full min-h-0 w-full overflow-hidden rounded-[inherit]",n),onDragOver:e=>{Array.from(e.dataTransfer.types).includes("application/vnd.vantaloom.file-window")&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},onDrop:function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.file-window");if(t)try{let n=JSON.parse(t),r=i.current?.getBoundingClientRect();e.preventDefault(),e.stopPropagation(),P({...n,x:r?e.clientX-r.left-160:n.x,y:r?e.clientY-r.top-24:n.y})}catch{return}},children:[(0,eb.jsx)("div",{className:"relative h-full min-h-0",style:{minHeight:Math.max(r,o.height-48)},children:c.map((n,r)=>(0,eb.jsx)(X9,{windowLayout:n,roots:l,active:u===n.id,zIndex:20+r+20*(u===n.id),boardSize:o,onActivate:()=>f(n.id),onClose:()=>d(e=>e.filter(e=>e.id!==n.id)),onMinimize:()=>{t?.([{id:`clip-${n.id}`,title:n.title,description:"文件管理窗口",meta:`${Math.round(n.w)}x${Math.round(n.h)}`,payloads:{"application/vnd.vantaloom.file-window":{...n}},dragData:{"application/vnd.vantaloom.clip-kind":"file-window","application/vnd.vantaloom.file-window":JSON.stringify(n)}},...e.filter(e=>e.id!==`clip-${n.id}`)]),d(e=>e.filter(e=>e.id!==n.id))},onWindowChange:e=>O(n.id,()=>e),...A(n),onNavigate:({rootId:e,path:t})=>{let r=l.find(t=>t.id===e),a=r?.machineId??n.machineId;O(n.id,n=>({...n,machineId:a,rootId:e,path:t,title:XK(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{uY({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{uZ({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{uJ({machineId:n.machineId,paths:e.map(e=>e.path)}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onMoveItems:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>{let a=l.find(t=>t.id===e);if(!a)return;let i=t.flatMap(e=>{let t=XG(a.children,e);return t?[{machineId:a.machineId,path:t.path,name:t.name}]:[]});if(0===i.length)return;let o={sources:i,target:{machineId:n.machineId,path:r.path,name:r.name}};x?M(o):y(o)}},n.id))}),(0,eb.jsx)(X4,{transfers:h}),(0,eb.jsx)(Xq,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),P()}}),(0,eb.jsx)(Yn,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]})}function Yt({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(wG,{roots:t,variant:"full",currentRootId:e.rootId,currentPath:e.path,onNavigate:n,onRootsChange:e=>r(e),onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onItemDrop:({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r})=>l({sourceRootId:e,sourceItemIds:t,targetRoot:n,target:r}),labels:{title:"文件管理",search:"搜索文件",newFolder:"新建",upload:"上传",refresh:"刷新",sort:"排序",view:"视图"},className:"h-full min-h-0 rounded-none border-0 shadow-none",contentClassName:"min-h-0"})}function Yn({move:e,onCancel:t,onConfirm:n}){var r;let a=e?.sources??[],i=Math.max(0,a.length-4);return(0,eb.jsx)(d4,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"确认移动"}),(0,eb.jsx)(ug,{children:e?`将 ${1===(r=a).length?r[0]?Ya(r[0]):"0 项":`${r.length} 项`} 移动到 ${Ya(e.target)}`:""})]}),e?(0,eb.jsxs)("div",{className:"grid gap-2 rounded-lg border bg-muted/20 p-3 ui-text-body",children:[(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"移动内容"}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[a.slice(0,4).map(e=>(0,eb.jsx)("span",{className:"truncate",children:Ya(e)},`${e.machineId}:${e.path}`)),i>0?(0,eb.jsxs)("span",{className:"text-muted-foreground",children:["另有 ",i," 项"]}):null]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-muted-foreground ui-text-kbd",children:"目标位置"}),(0,eb.jsx)("span",{className:"truncate",children:Ya(e.target)})]})]}):null,(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function Yr(e){return e.slice(0,10)}function Ya(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function Yi({className:e}){return(0,eb.jsx)(Ye,{className:(0,eI.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var Yo=ew;function Yl(){return(Yl=Object.assign.bind()).apply(null,arguments)}var Ys=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jB.clsx)("recharts-dot",a);return kv(t)&&kv(n)&&kv(r)?ew.createElement("circle",Yl({},IH(e),Am(e),{className:i,cx:t,cy:n,r:r})):null},Yc=["points"];function Yd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Yu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yd(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yd(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yf(){return(Yf=Object.assign.bind()).apply(null,arguments)}function Yh(e){var{option:t,dotProps:n,className:r}=e;if((0,ew.isValidElement)(t))return(0,ew.cloneElement)(t,n);if("function"==typeof t)return t(n);var a=(0,jB.clsx)(r,"boolean"!=typeof t?t.className:""),i=null!=n?n:{},{points:o}=i,l=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(i,Yc);return ew.createElement(Ys,Yf({},l,{className:a}))}function Ym(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=CJ.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Tn(n),u=null==n?null:(0,ew.isValidElement)(n)?Iq(n.props):"object"!=typeof n||Array.isArray(n)?null:Iq(n),f=t.map((e,r)=>{var l,s,c=Yu(Yu(Yu({r:3},o),u),{},{index:r,cx:null!=(l=e.x)?l:void 0,cy:null!=(s=e.y)?s:void 0,dataKey:i,value:e.value,payload:e.payload,points:t});return ew.createElement(Yh,{key:"dot-".concat(r),option:n,dotProps:c,className:a})}),h={};return l&&null!=s&&(h.clipPath="url(#clipPath-".concat(d?"":"dots-").concat(s,")")),ew.createElement(_q,{zIndex:c},ew.createElement(IG,Yf({className:r},h),f))}function Yp(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Yg(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yp(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yp(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Yx=e=>{var t,{point:n,childIndex:r,mainColor:a,activeDot:i,dataKey:o,clipPath:l}=e;if(!1===i||null==n.x||null==n.y)return null;var s=Yg(Yg(Yg({},{index:r,dataKey:o,cx:n.x,cy:n.y,r:4,fill:null!=a?a:"none",strokeWidth:2,stroke:"#fff",payload:n.payload,value:n.value}),IU(i)),Am(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(Ys,s),ew.createElement(IG,{className:"recharts-active-dot",clipPath:l},t)};function Yv(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=CJ.activeDot}=e,l=Nr(_t),s=Nr(_d);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_q,{zIndex:o},ew.createElement(Yx,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function Yb(e,t){var n,r,a=Nr(t=>PF(t,e)),i=Nr(e=>PH(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:PL.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:PB.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function Yy(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=Nr(F3),{needClipX:i,needClipY:o,needClip:l}=Yb(t,n);if(!l||!a)return null;var{x:s,y:c,width:d,height:u}=a;return ew.createElement("clipPath",{id:"clipPath-".concat(r)},ew.createElement("rect",{x:i?s:s-d/2,y:o?c:c-u/2,width:i?d:2*d,height:o?u:2*u}))}function Yw(e,t){var n,r;return null!=(n=null==(r=e.graphicalItems.cartesianItems.find(e=>e.id===t))?void 0:r.xAxisId)?n:0}function Yj(e,t){var n,r;return null!=(n=null==(r=e.graphicalItems.cartesianItems.find(e=>e.id===t))?void 0:r.yAxisId)?n:0}var Yk=(e,t,n)=>Im(e,"xAxis",Yw(e,t),n),YN=(e,t,n)=>Ih(e,"xAxis",Yw(e,t),n),YS=(e,t,n)=>Im(e,"yAxis",Yj(e,t),n),YC=(e,t,n)=>Ih(e,"yAxis",Yj(e,t),n),YM=j3([Ck,Yk,YS,YN,YC],(e,t,n,r,a)=>kR(e,"xAxis")?kU(t,r,!1):kU(n,a,!1)),YE=j3([PY,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YO=e=>kR(Ck(e),"xAxis")?"yAxis":"xAxis",YP=j3([YE,(e,t,n)=>zu(e,YO(e),"yAxis"===YO(e)?Yj(e,t):Yw(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=Ms(e);if(null!=r&&null!=a){var i=null==(n=t[r])?void 0:n.stackedData,o=null==i?void 0:i.find(e=>e.key===a);if(null!=o)return o.map(e=>[e[0],e[1]])}}}),Yz=j3([Ck,Yk,YS,YN,YC,YP,ke,YM,YE,e=>e.rootProps.baseValue],(e,t,n,r,a,i,o,l,s,c)=>{var d,{chartData:u,dataStartIndex:f,dataEndIndex:h}=o;if(null!=s&&("horizontal"===e||"vertical"===e)&&null!=t&&null!=n&&null!=r&&null!=a&&0!==r.length&&0!==a.length&&null!=l){var{data:m}=s;if(null!=(d=m&&m.length>0?m:null==u?void 0:u.slice(f,h+1)))return function(e){var t,{areaSettings:{connectNulls:n,baseValue:r,dataKey:a},stackedData:i,layout:o,chartBaseValue:l,xAxis:s,yAxis:c,displayedData:d,dataStartIndex:u,xAxisTicks:f,yAxisTicks:h,bandSize:m}=e,p=i&&i.length,g=((e,t,n,r,a)=>{var i=null!=n?n:t;if(kv(i))return i;var o="horizontal"===e?a:r,l=o.scale.domain();if("number"===o.type){var s=Math.max(l[0],l[1]),c=Math.min(l[0],l[1]);return"dataMin"===i?c:"dataMax"===i||s<0?s:Math.max(Math.min(l[0],l[1]),0)}return"dataMin"===i?l[0]:"dataMax"===i?l[1]:l[0]})(o,l,r,s,c),x="horizontal"===o,v=!1,b=d.map((e,t)=>{if(p)d=i[u+t];else{var r,o,l,d,b,y=kT(e,a);Array.isArray(y)?(d=y,v=!0):d=[g,y]}var w=null!=(r=null==(o=d)?void 0:o[1])?r:null,j=null==w||p&&!n&&null==kT(e,a);return x?{x:kF({axis:s,ticks:f,bandSize:m,entry:e,index:t}),y:j?null:null!=(b=c.scale.map(w))?b:null,value:d,payload:e}:{x:j?null:null!=(l=s.scale.map(w))?l:null,y:kF({axis:c,ticks:h,bandSize:m,entry:e,index:t}),value:d,payload:e}});return t=p||v?b.map(e=>{var t,n,r=Array.isArray(e.value)?e.value[0]:null;return x?{x:e.x,y:null!=r&&null!=e.y&&null!=(n=c.scale.map(r))?n:null,payload:e.payload}:{x:null!=r&&null!=(t=s.scale.map(r))?t:null,y:e.y,payload:e.payload}}):x?c.scale.map(g):s.scale.map(g),{points:b,baseLine:null!=t?t:0,isRange:v}}({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:a,dataStartIndex:f,areaSettings:s,stackedData:i,displayedData:d,chartBaseValue:c,bandSize:l})}});function YI(e){var t=IU(e);if(null!=t){var{r:n,strokeWidth:r}=t,a=Number(n),i=Number(r);return(Number.isNaN(a)||a<0)&&(a=3),(Number.isNaN(i)||i<0)&&(i=2),{r:a,strokeWidth:i}}return{r:3,strokeWidth:2}}var YA=["id"],YT=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function YR(){return(YR=Object.assign.bind()).apply(null,arguments)}function YD(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function Y_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function YL(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y_(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y_(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Y$(e,t){return e&&"none"!==e?e:t}var YF=Yo.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:a,fill:i,name:o,hide:l,unit:s,tooltipType:c,id:d}=e,u={dataDefinedOnItem:n,getPosition:kE,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kW(o,t),hide:l,type:c,color:Y$(r,i),unit:s,graphicalItemId:d}};return Yo.createElement(Dl,{tooltipEntrySettings:u})});function YB(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=IH(r);return Yo.createElement(Ym,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function YV(e){var{showLabels:t,children:n,points:r}=e,a=r.map(e=>{var t,n,r={x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,width:0,lowerWidth:0,upperWidth:0,height:0};return YL(YL({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return Yo.createElement(Li,{value:t?a:void 0},n)}function YH(e){var{points:t,baseLine:n,needClip:r,clipPathId:a,props:i}=e,{layout:o,type:l,stroke:s,connectNulls:c,isRange:d}=i,{id:u}=i,f=YD(i,YA),h=IH(f),m=Iq(f);return Yo.createElement(Yo.Fragment,null,(null==t?void 0:t.length)>1&&Yo.createElement(IG,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},Yo.createElement(AN,YR({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&Yo.createElement(AN,YR({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&Yo.createElement(AN,YR({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),Yo.createElement(YB,{points:t,props:f,clipPathId:a}))}function YU(e){var t,n,{alpha:r,baseLine:a,points:i,strokeWidth:o}=e,l=null==(t=i[0])?void 0:t.y,s=null==(n=i[i.length-1])?void 0:n.y;if(!kP(l)||!kP(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kv(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kv(d))?Yo.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function Yq(e){var t,n,{alpha:r,baseLine:a,points:i,strokeWidth:o}=e,l=null==(t=i[0])?void 0:t.x,s=null==(n=i[i.length-1])?void 0:n.x;if(!kP(l)||!kP(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kv(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kv(d))?Yo.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function YW(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?Yo.createElement(YU,{alpha:t,points:r,baseLine:a,strokeWidth:i}):Yo.createElement(Yq,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function YK(e){var{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i}=e,{points:o,baseLine:l,isAnimationActive:s,animationBegin:c,animationDuration:d,animationEasing:u,onAnimationStart:f,onAnimationEnd:h}=r,m=TC((0,Yo.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CN(),[g,x]=(0,Yo.useState)(!1),v=(0,Yo.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,Yo.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return Yo.createElement(YV,{showLabels:!g,points:o},r.children,Yo.createElement(TS,{animationId:m,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:v,onAnimationStart:b,key:m},e=>{if(y){var c,d=y.length/o.length,u=1===e?o:o.map((t,n)=>{var r=Math.floor(n*d);if(y[r]){var a=y[r];return YL(YL({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return t});if(kv(l))c=kN(w,l,e);else c=null==l||kg(l)?kN(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return YL(YL({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),Yo.createElement(YH,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),Yo.createElement(IG,null,s&&Yo.createElement("defs",null,Yo.createElement("clipPath",{id:"animationClipPath-".concat(n)},Yo.createElement(YW,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),Yo.createElement(IG,{clipPath:"url(#animationClipPath-".concat(n,")")},Yo.createElement(YH,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),Yo.createElement(Lc,{label:r.label}))}function YG(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,Yo.useRef)(null),i=(0,Yo.useRef)();return Yo.createElement(YK,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class YX extends Yo.PureComponent{render(){var{hide:e,dot:t,points:n,className:r,top:a,left:i,needClip:o,xAxisId:l,yAxisId:s,width:c,height:d,id:u,baseLine:f,zIndex:h}=this.props;if(e)return null;var m=(0,jB.clsx)("recharts-area",r),{r:p,strokeWidth:g}=YI(t),x=Tn(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return Yo.createElement(_q,{zIndex:h},Yo.createElement(IG,{className:m},o&&Yo.createElement("defs",null,Yo.createElement(Yy,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&Yo.createElement("clipPath",{id:"clipPath-dots-".concat(u)},Yo.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),Yo.createElement(YG,{needClip:o,clipPathId:u,props:this.props})),Yo.createElement(Yv,{points:n,mainColor:Y$(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&Yo.createElement(Yv,{points:f,mainColor:Y$(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var YY={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:"auto",legendType:"line",stroke:"#3182bd",strokeWidth:1,type:"linear",label:!1,xAxisId:0,yAxisId:0,zIndex:CJ.area};function YZ(e){var t,{activeDot:n,animationBegin:r,animationDuration:a,animationEasing:i,connectNulls:o,dot:l,fill:s,fillOpacity:c,hide:d,isAnimationActive:u,legendType:f,stroke:h,xAxisId:m,yAxisId:p}=e,g=YD(e,YT),x=Nr(Ck),v=Nr(CH),{needClip:b}=Yb(m,p),y=S7(),{points:w,isRange:j,baseLine:k}=null!=(t=Nr(t=>Yz(t,e.id,y)))?t:{},N=Nr(F3);if("horizontal"!==x&&"vertical"!==x||null==N||"AreaChart"!==v&&"ComposedChart"!==v)return null;var{height:S,width:C,x:M,y:E}=N;return w&&w.length?Yo.createElement(YX,YR({},g,{activeDot:n,animationBegin:r,animationDuration:a,animationEasing:i,baseLine:k,connectNulls:o,dot:l,fill:s,fillOpacity:c,height:S,hide:d,layout:x,isAnimationActive:u,isRange:j,legendType:f,needClip:b,points:w,stroke:h,width:C,left:M,top:E,xAxisId:m,yAxisId:p})):null}var YJ=Yo.memo(function(e){var t=AU(e,YY),n=S7();return Yo.createElement(_j,{id:t.id,type:"area"},e=>Yo.createElement(Yo.Fragment,null,Yo.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Y$(r,a),value:kW(n,t),payload:e}]})(t)}),Yo.createElement(YF,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),Yo.createElement(_z,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:k$(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),Yo.createElement(YZ,YR({},t,{id:e}))))},Fk);function YQ(){return(YQ=Object.assign.bind()).apply(null,arguments)}function Y0(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}YJ.displayName="Area";var Y1=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y0(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y0(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,layout:"horizontal",margin:{top:5,right:5,bottom:5,left:5},responsive:!1,reverseStackOrder:!1,stackOffset:"none",syncMethod:"index"},Fu),Y2=(0,ew.forwardRef)(function(e,t){var n,r=AU(e.categoricalChartProps,Y1),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fy,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(Fw,{chartData:s.data}),ew.createElement(FN,{layout:r.layout,margin:r.margin}),ew.createElement(FC,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(FS,{baseValue:r.baseValue,accessibilityLayer:r.accessibilityLayer,barCategoryGap:r.barCategoryGap,maxBarSize:r.maxBarSize,stackOffset:r.stackOffset,barGap:r.barGap,barSize:r.barSize,syncId:r.syncId,syncMethod:r.syncMethod,className:r.className,reverseStackOrder:r.reverseStackOrder}),ew.createElement(F9,YQ({},r,{ref:t})))}),Y5=["axis"],Y4=(0,ew.forwardRef)((e,t)=>ew.createElement(Y2,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Y5,tooltipPayloadSearcher:LO,categoricalChartProps:e,ref:t})),Y3=function(e){var{width:t,height:n}=e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(r%180+180)%180*Math.PI/180,i=Math.atan(n/t);return Math.abs(a>i&&a<Math.PI-i?n/Math.sin(a):t/Math.cos(a))};function Y6(e,t){if(t<1)return[];if(1===t)return e;for(var n=[],r=0;r<e.length;r+=t){var a=e[r];void 0!==a&&n.push(a)}return n}function Y8(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var i=n();return e*(t-e*i/2-r)>=0&&e*(t+e*i/2-a)<=0}function Y7(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Y9(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y7(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y7(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ze(e,t,n){var r,{tick:a,ticks:i,viewBox:o,minTickGap:l,orientation:s,interval:c,tickFormatter:d,unit:u,angle:f}=e;if(!i||!i.length||!a)return[];if(kv(c)||AS.isSsr)return null!=(r=Y6(i,(kv(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?AI(u,{fontSize:t,letterSpacing:n}):{width:0,height:0},p=(e,r)=>{var a,i="function"==typeof d?d(e.value,r):e.value;return"width"===h?(a=AI(i,{fontSize:t,letterSpacing:n}),Y3({width:a.width+m.width,height:a.height+m.height},f)):AI(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kp(x.coordinate-g.coordinate):1,b=function(e,t,n){var r="width"===n,{x:a,y:i,width:o,height:l}=e;return 1===t?{start:r?a:i,end:r?a+o:i+l}:{start:r?a+o:i+l,end:r?a:i}}(o,v,h);return"equidistantPreserveStart"===c?function(e,t,n,r,a){for(var i,o=(r||[]).slice(),{start:l,end:s}=t,c=0,d=1,u=l;d<=o.length;)if(i=function(){var t,i=null==r?void 0:r[c];if(void 0===i)return{v:Y6(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Y8(e,h,f,u,s);m||(c=0,u=l,d+=1),m&&(u=h+e*(f()/2+a),c+=d)}())return i.v;return[]}(v,b,p,i,l):"equidistantPreserveEnd"===c?function(e,t,n,r,a){var i=(r||[]).slice().length;if(0===i)return[];for(var{start:o,end:l}=t,s=1;s<=i;s++){for(var c,d=(i-1)%s,u=o,f=!0,h=d;h<i&&(0===(c=function(){var t,i=r[h];if(null==i)return 0;var o=h,s=()=>(void 0===t&&(t=n(i,o)),t),c=i.coordinate,m=h===d||Y8(e,c,s,u,l);if(!m)return f=!1,1;m&&(u=c+e*(s()/2+a))}())||1!==c);h+=s);if(f){for(var m=[],p=d;p<i;p+=s){var g=r[p];null!=g&&m.push(g)}return m}}return[]}(v,b,p,i,l):("preserveStart"===c||"preserveStartEnd"===c?function(e,t,n,r,a,i){var o=(r||[]).slice(),l=o.length,{start:s,end:c}=t;if(i){var d=r[l-1];if(null!=d){var u=n(d,l-1),f=e*(d.coordinate+e*u/2-c);o[l-1]=d=Y9(Y9({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Y8(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Y9(Y9({},d),{},{isShow:!0}))}}for(var h=i?l-1:l,m=function(t){var r,i=o[t];if(null==i)return 1;var l=i,d=()=>(void 0===r&&(r=n(i,t)),r);if(0===t){var u=e*(l.coordinate-e*d()/2-s);o[t]=l=Y9(Y9({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Y9(Y9({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Y8(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Y9(Y9({},l),{},{isShow:!0}))},p=0;p<h;p++)if(m(p))continue;return o}(v,b,p,i,l,"preserveStartEnd"===c):function(e,t,n,r,a){for(var i=(r||[]).slice(),o=i.length,{start:l}=t,{end:s}=t,c=function(t){var r,c=i[t];if(null==c)return 1;var d=c,u=()=>(void 0===r&&(r=n(c,t)),r);if(t===o-1){var f=e*(d.coordinate+e*u()/2-s);i[t]=d=Y9(Y9({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Y9(Y9({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Y8(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Y9(Y9({},d),{},{isShow:!0}))},d=o-1;d>=0;d--)if(c(d))continue;return i}(v,b,p,i,l)).filter(e=>e.isShow)}var Zt=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function Zn(){return(Zn=Object.assign.bind()).apply(null,arguments)}function Zr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Za(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zr(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Zi={x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd",zIndex:CJ.axis};function Zo(e){var{x:t,y:n,width:r,height:a,orientation:i,mirror:o,axisLine:l,otherSvgProps:s}=e;if(!l)return null;var c=Za(Za(Za({},s),IH(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=Za(Za({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=Za(Za({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",Zn({},c,{className:(0,jB.clsx)("recharts-cartesian-axis-line",(0,jF.default)(l,"className"))}))}function Zl(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jB.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,Za(Za({},r),{},{className:i}));else if("function"==typeof n)t=n(Za(Za({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jB.clsx)(o,Ld(n))),t=ew.createElement(A4,Zn({},r,{className:o}),a)}return t}function Zs(e){var{ticks:t,axisType:n,axisId:r}=e,a=k9();return(0,ew.useEffect)(()=>null==r||null==n?kE:(a(Fg({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(Fx({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zc=(0,ew.forwardRef)((e,t)=>{var{ticks:n=[],tick:r,tickLine:a,stroke:i,tickFormatter:o,unit:l,padding:s,tickTextProps:c,orientation:d,mirror:u,x:f,y:h,width:m,height:p,tickSize:g,tickMargin:x,fontSize:v,letterSpacing:b,getTicksConfig:y,events:w,axisType:j,axisId:k}=e,N=Ze(Za(Za({},y),{},{ticks:n}),v,b),S=IH(y),C=IU(r),M=AZ(S.textAnchor)?S.textAnchor:function(e,t){switch(e){case"left":return t?"start":"end";case"right":return t?"end":"start";default:return"middle"}}(d,u),E=function(e,t){switch(e){case"left":case"right":return"middle";case"top":return t?"start":"end";default:return t?"end":"start"}}(d,u),O={};"object"==typeof a&&(O=a);var P=Za(Za({},S),{},{fill:"none"},O),z=N.map(e=>Za({entry:e},function(e,t,n,r,a,i,o,l,s){var c,d,u,f,h,m,p=l?-1:1,g=e.tickSize||o,x=kv(e.tickCoord)?e.tickCoord:e.coordinate;switch(i){case"top":c=d=e.coordinate,m=(u=(f=n+!l*a)-p*g)-p*s,h=x;break;case"left":u=f=e.coordinate,h=(c=(d=t+!l*r)-p*g)-p*s,m=x;break;case"right":u=f=e.coordinate,h=(c=(d=t+l*r)+p*g)+p*s,m=x;break;default:c=d=e.coordinate,m=(u=(f=n+l*a)+p*g)+p*s,h=x}return{line:{x1:c,y1:u,x2:d,y2:f},tick:{x:h,y:m}}}(e,f,h,m,p,d,g,u,x))),I=z.map(e=>{var{entry:t,line:n}=e;return ew.createElement(IG,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(t.value,"-").concat(t.coordinate,"-").concat(t.tickCoord)},a&&ew.createElement("line",Zn({},P,n,{className:(0,jB.clsx)("recharts-cartesian-axis-tick-line",(0,jF.default)(a,"className"))})))}),A=z.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=Za(Za(Za(Za({verticalAnchor:E},S),{},{textAnchor:M,stroke:"none",fill:i},u),{},{index:t,payload:d,visibleTicksCount:N.length,tickFormatter:o,padding:s},c),{},{angle:null!=(n=null!=(a=null==c?void 0:c.angle)?a:S.angle)?n:0}),h=Za(Za({},f),C);return ew.createElement(IG,Zn({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},Ap(w,d,t)),r&&ew.createElement(Zl,{option:r,tickProps:h,value:"".concat("function"==typeof o?o(d.value,t):d.value).concat(l||"")}))});return ew.createElement("g",{className:"recharts-cartesian-axis-ticks recharts-".concat(j,"-ticks")},ew.createElement(Zs,{ticks:N,axisId:k,axisType:j}),A.length>0&&ew.createElement(_q,{zIndex:CJ.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},A)),I.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},I))}),Zd=(0,ew.forwardRef)((e,t)=>{var{axisLine:n,width:r,height:a,className:i,hide:o,ticks:l,axisType:s,axisId:c}=e,d=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,Zt),[u,f]=(0,ew.useState)(""),[h,m]=(0,ew.useState)(""),p=(0,ew.useRef)(null);(0,ew.useImperativeHandle)(t,()=>({getCalculatedWidth:()=>{var t;return(e=>{var{ticks:t,label:n,labelGapWithTick:r=5,tickSize:a=0,tickMargin:i=0}=e,o=0;if(t){Array.from(t).forEach(e=>{if(e){var t=e.getBoundingClientRect();t.width>o&&(o=t.width)}});var l=n?n.getBoundingClientRect().width:0;return Math.round(o+(a+i)+l+(n?r:0))}return 0})({ticks:p.current,label:null==(t=e.labelRef)?void 0:t.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}}));var g=(0,ew.useCallback)(e=>{if(e){var t=e.getElementsByClassName("recharts-cartesian-axis-tick-value");p.current=t;var n=t[0];if(n){var r=window.getComputedStyle(n),a=r.fontSize,i=r.letterSpacing;(a!==u||i!==h)&&(f(a),m(i))}}},[u,h]);return o||null!=r&&r<=0||null!=a&&a<=0?null:ew.createElement(_q,{zIndex:e.zIndex},ew.createElement(IG,{className:(0,jB.clsx)("recharts-cartesian-axis",i)},ew.createElement(Zo,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:IH(e)}),ew.createElement(Zc,{ref:g,axisType:s,events:d,fontSize:u,getTicksConfig:e,height:e.height,letterSpacing:h,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:l,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:c}),ew.createElement(_1,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(_7,{label:e.label,labelRef:e.labelRef}),e.children)))}),Zu=ew.forwardRef((e,t)=>{var n=AU(e,Zi);return ew.createElement(Zd,Zn({},n,{ref:t}))});Zu.displayName="CartesianAxis";var Zf=["x1","y1","x2","y2","key"],Zh=["offset"],Zm=["xAxisId","yAxisId"],Zp=["xAxisId","yAxisId"];function Zg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Zx(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zg(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zv(){return(Zv=Object.assign.bind()).apply(null,arguments)}function Zb(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Zy=e=>{var{fill:t}=e;if(!t||"none"===t)return null;var{fillOpacity:n,x:r,y:a,width:i,height:o,ry:l}=e;return ew.createElement("rect",{x:r,y:a,ry:l,width:i,height:o,stroke:"none",fill:t,fillOpacity:n,className:"recharts-cartesian-grid-bg"})};function Zw(e){var{option:t,lineItemProps:n}=e;if(ew.isValidElement(t))r=ew.cloneElement(t,n);else if("function"==typeof t)r=t(n);else{var r,a,{x1:i,y1:o,x2:l,y2:s,key:c}=n,d=null!=(a=IH(Zb(n,Zf)))?a:{},{offset:u}=d,f=Zb(d,Zh);r=ew.createElement("line",Zv({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function Zj(e){var{x:t,width:n,horizontal:r=!0,horizontalPoints:a}=e;if(!r||!a||!a.length)return null;var{xAxisId:i,yAxisId:o}=e,l=Zb(e,Zm),s=a.map((e,a)=>{var i=Zx(Zx({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(Zw,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function Zk(e){var{y:t,height:n,vertical:r=!0,verticalPoints:a}=e;if(!r||!a||!a.length)return null;var{xAxisId:i,yAxisId:o}=e,l=Zb(e,Zp),s=a.map((e,a)=>{var i=Zx(Zx({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(Zw,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZN(e){var{horizontalFill:t,fillOpacity:n,x:r,y:a,width:i,height:o,horizontalPoints:l,horizontal:s=!0}=e;if(!s||!t||!t.length||null==l)return null;var c=l.map(e=>Math.round(e+a-a)).sort((e,t)=>e-t);a!==c[0]&&c.unshift(0);var d=c.map((e,l)=>{var s=c[l+1],d=null==s?a+o-e:s-e;if(d<=0)return null;var u=l%t.length;return ew.createElement("rect",{key:"react-".concat(l),y:e,x:r,height:d,width:i,stroke:"none",fill:t[u],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return ew.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},d)}function ZS(e){var{vertical:t=!0,verticalFill:n,fillOpacity:r,x:a,y:i,width:o,height:l,verticalPoints:s}=e;if(!t||!n||!n.length)return null;var c=s.map(e=>Math.round(e+a-a)).sort((e,t)=>e-t);a!==c[0]&&c.unshift(0);var d=c.map((e,t)=>{var s=c[t+1],d=null==s?a+o-e:s-e;if(d<=0)return null;var u=t%n.length;return ew.createElement("rect",{key:"react-".concat(t),x:e,y:i,width:d,height:l,stroke:"none",fill:n[u],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return ew.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},d)}var ZC=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return kD(Ze(Zx(Zx(Zx({},Zi),n),{},{ticks:k_(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},ZM=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return kD(Ze(Zx(Zx(Zx({},Zi),n),{},{ticks:k_(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZE={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:CJ.grid};function ZO(e){var t=Nr(kK),n=Nr(kG),r=Cj(),a=Zx(Zx({},AU(e,ZE)),{},{x:kv(e.x)?e.x:r.left,y:kv(e.y)?e.y:r.top,width:kv(e.width)?e.width:r.width,height:kv(e.height)?e.height:r.height}),{xAxisId:i,yAxisId:o,x:l,y:s,width:c,height:d,syncWithTicks:u,horizontalValues:f,verticalValues:h}=a,m=S7(),p=Nr(e=>Iu(e,"xAxis",i,m)),g=Nr(e=>Iu(e,"yAxis",o,m));if(!kz(c)||!kz(d)||!kv(l)||!kv(s))return null;var x=a.verticalCoordinatesGenerator||ZC,v=a.horizontalCoordinatesGenerator||ZM,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?Zx(Zx({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Cn(Array.isArray(j),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof j,"]")),Array.isArray(j)&&(b=j)}if((!y||!y.length)&&"function"==typeof x){var k=h&&h.length,N=x({xAxis:p?Zx(Zx({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Cn(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_q,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(Zy,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZN,Zv({},a,{horizontalPoints:b})),ew.createElement(ZS,Zv({},a,{verticalPoints:y})),ew.createElement(Zj,Zv({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(Zk,Zv({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZO.displayName="CartesianGrid";var ZP=["domain","range"],Zz=["domain","range"];function ZI(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZA(e,t){return e===t||!!(Array.isArray(e)&&2===e.length&&Array.isArray(t))&&2===t.length&&e[0]===t[0]&&e[1]===t[1]}function ZT(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=ZI(e,ZP),{domain:i,range:o}=t,l=ZI(t,Zz);return!!ZA(n,i)&&!!ZA(r,o)&&Fk(a,l)}var ZR=["type"],ZD=["dangerouslySetInnerHTML","ticks","scale"],Z_=["id","scale"];function ZL(){return(ZL=Object.assign.bind()).apply(null,arguments)}function Z$(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z$(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z$(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZB(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZV(e){var t=k9(),n=(0,ew.useRef)(null),r=CN(),{type:a}=e,i=ZB(e,ZR),o=C2(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZF(ZF({},i),{},{type:o})},[i,o]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($h(l)):n.current!==l&&t($m({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($p(n.current)),n.current=null)},[t]),null}var ZH=e=>{var{xAxisId:t,className:n}=e,r=Nr(k3),a=S7(),i="xAxis",o=Nr(e=>If(e,i,t,a)),l=Nr(e=>In(e,t)),s=Nr(e=>Ii(e,t)),c=Nr(e=>P$(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=ZB(e,ZD),{id:m,scale:p}=c,g=ZB(c,Z_);return ew.createElement(Zu,ZL({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jB.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},ZU={allowDataOverflow:PL.allowDataOverflow,allowDecimals:PL.allowDecimals,allowDuplicatedCategory:PL.allowDuplicatedCategory,angle:PL.angle,axisLine:Zi.axisLine,height:PL.height,hide:!1,includeHidden:PL.includeHidden,interval:PL.interval,label:!1,minTickGap:PL.minTickGap,mirror:PL.mirror,orientation:PL.orientation,padding:PL.padding,reversed:PL.reversed,scale:PL.scale,tick:PL.tick,tickCount:PL.tickCount,tickLine:Zi.tickLine,tickSize:Zi.tickSize,type:PL.type,niceTicks:PL.niceTicks,xAxisId:0},Zq=ew.memo(e=>{var t=AU(e,ZU);return ew.createElement(ew.Fragment,null,ew.createElement(ZV,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),ew.createElement(ZH,t))},ZT);Zq.displayName="XAxis";var ZW=["type"],ZK=["dangerouslySetInnerHTML","ticks","scale"],ZG=["id","scale"];function ZX(){return(ZX=Object.assign.bind()).apply(null,arguments)}function ZY(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZZ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ZY(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ZY(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZJ(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}function ZQ(e){var t=k9(),n=(0,ew.useRef)(null),r=CN(),{type:a}=e,i=ZJ(e,ZW),o=C2(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZZ(ZZ({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($g(l)):n.current!==l&&t($x({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($v(n.current)),n.current=null)},[t]),null}function Z0(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=Nr(k3),s=S7(),c=k9(),d="yAxis",u=Nr(e=>Il(e,t)),f=Nr(e=>Io(e,t)),h=Nr(e=>If(e,d,t,s)),m=Nr(e=>PV(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||_4(a)||(0,ew.isValidElement)(a))&&null!=m){var e=i.current;if(e){var n=e.getCalculatedWidth();Math.round(u.width)!==Math.round(n)&&c($j({id:t,width:n}))}}},[h,u,c,a,t,r,m]),null==u||null==f||null==m)return null;var{dangerouslySetInnerHTML:p,ticks:g,scale:x}=e,v=ZJ(e,ZK),{id:b,scale:y}=m,w=ZJ(m,ZG);return ew.createElement(Zu,ZX({},v,w,{ref:i,labelRef:o,x:f.x,y:f.y,tickTextProps:"auto"===r?{width:void 0}:{width:r},width:u.width,height:u.height,className:(0,jB.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Z1={allowDataOverflow:PB.allowDataOverflow,allowDecimals:PB.allowDecimals,allowDuplicatedCategory:PB.allowDuplicatedCategory,angle:PB.angle,axisLine:Zi.axisLine,hide:!1,includeHidden:PB.includeHidden,interval:PB.interval,label:!1,minTickGap:PB.minTickGap,mirror:PB.mirror,orientation:PB.orientation,padding:PB.padding,reversed:PB.reversed,scale:PB.scale,tick:PB.tick,tickCount:PB.tickCount,tickLine:Zi.tickLine,tickSize:Zi.tickSize,type:PB.type,niceTicks:PB.niceTicks,width:PB.width,yAxisId:0},Z2=ew.memo(e=>{var t=AU(e,Z1);return ew.createElement(ew.Fragment,null,ew.createElement(ZQ,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),ew.createElement(Z0,t))},ZT);function Z5({machines:e,defaultMachineId:t,className:n,...r}){let[a,i]=ew.useState(t??e[0]?.id),o=e.find(e=>e.id===a)??e[0],[l,s]=ew.useState({});if(!o)return null;let c=l[o.id]??o.selectedMetricId??o.metrics[0]?.id,d=o.metrics.find(e=>e.id===c)??o.metrics[0];return(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-card flex h-full min-h-0 flex-col rounded-[var(--surface-card-radius)] border","vtl-performance-monitor",n),...r,children:[(0,eb.jsx)(mu,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(my,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mw,{value:e.id,children:e.name},e.id))})}),(0,eb.jsxs)("div",{className:"mt-3 grid min-h-0 flex-1 grid-cols-[14rem_minmax(0,1fr)] border-t",children:[(0,eb.jsx)("div",{className:"min-h-0 overflow-auto border-r p-2",children:o.metrics.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>s(t=>({...t,[o.id]:e.id})),className:(0,eI.cn)("grid w-full grid-cols-[3.75rem_minmax(0,1fr)] gap-3 px-2 py-2 text-left transition-colors",e.id===c&&"bg-muted"),children:[(0,eb.jsx)(Z9,{data:e.data,color:e.color}),(0,eb.jsxs)("span",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"block truncate text-base leading-tight",children:e.label}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.value}),e.detail?(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.detail}):null]})]},e.id))}),(0,eb.jsxs)("div",{className:"min-h-0 overflow-auto p-5",children:[(0,eb.jsxs)("div",{className:"grid grid-cols-[minmax(0,1fr)_auto] items-start gap-5",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("h2",{className:"text-4xl leading-none font-semibold tracking-normal",children:d?.title}),d?.subtitle?(0,eb.jsx)("p",{className:"mt-1 text-base text-muted-foreground",children:d.subtitle}):null]}),(0,eb.jsx)("div",{className:"text-right text-sm text-muted-foreground",children:d?.detail})]}),d?(0,eb.jsx)(Z4,{metric:d}):null]})]})]})}function Z4({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z8,{segments:e.composition}),(0,eb.jsx)(Z7,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z3,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Z3,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Z6,{}),(0,eb.jsx)(Z7,{details:e.details,columns:2})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mt-5 grid grid-cols-2 gap-3",children:(e.panels??[]).map(e=>(0,eb.jsx)(Z3,{panel:e},e.id))}),(0,eb.jsx)(Z7,{details:e.details,columns:3})]})}function Z3({panel:e,size:t="normal"}){let n={short:"h-[4rem]",normal:"full"===e.span?"h-20":"h-24",large:"h-[17.5rem]",tall:"h-[21.5rem]"}[t];return(0,eb.jsxs)("div",{className:(0,eI.cn)("mt-5","full"===e.span&&"col-span-2"),children:[(0,eb.jsxs)("div",{className:"mb-1 flex items-center justify-between text-sm",children:[(0,eb.jsx)("span",{className:"text-muted-foreground",children:e.title}),e.value?(0,eb.jsx)("span",{className:"text-muted-foreground tabular-nums",children:e.value}):null]}),(0,eb.jsx)(Je,{data:e.data,color:e.color,className:(0,eI.cn)("w-full",n)})]})}function Z6(){return(0,eb.jsxs)("div",{className:"mt-1 flex justify-between text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{children:"60 秒"}),(0,eb.jsx)("span",{children:"0"})]})}function Z8({segments:e}){let t=e&&e.length>0?e:[{label:"used",value:64},{label:"available",value:36}];return(0,eb.jsxs)("div",{className:"mt-5",children:[(0,eb.jsx)("div",{className:"mb-1 text-sm text-muted-foreground",children:"内存组合"}),(0,eb.jsx)("div",{className:"flex h-[3.25rem] w-full overflow-hidden border border-primary/75 bg-background",children:t.map((e,n)=>(0,eb.jsx)("div",{className:(0,eI.cn)("h-full border-r border-primary/75 last:border-r-0",0===n?"bg-primary/20":n===t.length-1?"bg-background":"bg-primary/8"),style:{width:`${Math.max(0,e.value)}%`}},`${e.label}-${n}`))})]})}function Z7({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,eI.cn)("mt-5 grid gap-x-10 gap-y-4",2===t&&"grid-cols-2",3===t&&"grid-cols-3",4===t&&"grid-cols-4"),children:e.map(([e,t])=>(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"text-xs text-muted-foreground",children:e}),(0,eb.jsx)("div",{className:"truncate text-2xl leading-tight tabular-nums",children:t})]},e))}):null}function Z9({data:e,color:t}){return(0,eb.jsx)(Je,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Je({data:e,color:t="default",className:n,strokeWidth:r=1.6,compact:a=!1}){let i=ew.useMemo(()=>(e.length>1?e:[0,0]).map((e,t)=>({index:t,value:Math.max(0,Math.min(100,e))})),[e]),o=ew.useMemo(()=>({value:{label:"Value",color:"danger"===t?"var(--destructive)":"var(--foreground)"}}),[t]);return(0,eb.jsx)(Vr,{config:o,className:(0,eI.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Y4,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZO,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(Zq,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Z2,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(BK,{cursor:!1,content:(0,eb.jsx)(Vi,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(YJ,{dataKey:"value",type:"monotone",fill:"var(--color-value)",fillOpacity:"danger"===t?.16:.12,stroke:"var(--color-value)",strokeWidth:r,isAnimationActive:!1,dot:!1,activeDot:!1})]})})}Z2.displayName="YAxis";let Jt=(0,ek.default)("badge-alert",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]),Jn=(0,ek.default)("circle-pause",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9",key:"c1nkhi"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9",key:"h65svq"}]]),Jr={name:"名称",cpu:"CPU",memoryMb:"内存",diskMbps:"磁盘",networkMbps:"网络"};function Ja({machines:e,defaultMachineId:t,className:n,...r}){let[a,i]=ew.useState(t??e[0]?.id),[o,l]=ew.useState("cpu"),[s,c]=ew.useState("desc"),[d,u]=ew.useState({}),f=e.find(e=>e.id===a)??e[0],h=ew.useMemo(()=>{if(!f)return[];let e=[...function(e){let t=new Map,n=new Map;for(let t of e)void 0!==t.pid&&n.set(t.pid,t);for(let a of e){var r;let e=function e(t,n,r=new Set){void 0!==t.pid&&r.add(t.pid);let a=void 0!==t.parentPid?n.get(t.parentPid):void 0;return!a||void 0===a.pid||r.has(a.pid)||["bash","containerd","dockerd","explorer","init","kernel_task","launchd","services","sh","smss","svchost","system","systemd","wininit","winlogon","zsh"].includes(Jd(a))?t:e(a,n,r)}(a,n),i=Jd(e),o=t.get(i)??{kind:"group",id:i,name:(r=e,r.appName?.trim()||r.name.trim().replace(/\.(exe|com)$/i,"")||r.id),children:[],status:[],cpu:0,memoryMb:0,diskMbps:0,networkMbps:0};o.children.push(a),o.cpu+=a.cpu,o.memoryMb+=a.memoryMb,o.diskMbps+=a.diskMbps,o.networkMbps+=a.networkMbps,o.status=function(e,t){let n=new Set(e??[]);for(let e of t??[])n.add(e);return Array.from(n)}(o.status,a.status),t.set(i,o)}return Array.from(t.values()).map(e=>({...e,cpu:Jf(Math.min(100,e.cpu)),memoryMb:Jf(e.memoryMb),diskMbps:Jf(e.diskMbps),networkMbps:Jf(e.networkMbps)}))}(f.processes)].sort((e,t)=>Ju(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jc(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>Ju(e,t,o,s)))t.push(Jc(e,1))}return t},[f,d,s,o]),m=ew.useMemo(()=>h.map(e=>({memoryMb:e.memoryMb,diskMbps:e.diskMbps,networkMbps:e.networkMbps})),[h]);function p(e){e===o?c(e=>"asc"===e?"desc":"asc"):(l(e),c("name"===e?"asc":"desc"))}return f?(0,eb.jsxs)("div",{className:(0,eI.cn)("vtl-surface-card flex h-full min-h-0 flex-col rounded-[var(--surface-card-radius)] border","vtl-process-monitor",n),...r,children:[(0,eb.jsx)(mu,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(my,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mw,{value:e.id,children:e.name},e.id))})}),(0,eb.jsxs)("div",{className:"mt-3 grid h-14 shrink-0 grid-cols-[minmax(12rem,1fr)_6.25rem_repeat(4,minmax(5rem,7rem))] border-y text-sm",children:[(0,eb.jsxs)("button",{type:"button",onClick:()=>p("name"),className:"flex items-end px-3 pb-2 text-left text-muted-foreground",children:["名称",(0,eb.jsx)(Ji,{active:"name"===o,direction:s})]}),(0,eb.jsx)("div",{className:"flex items-end px-3 pb-2 text-muted-foreground",children:"状态"}),["cpu","memoryMb","diskMbps","networkMbps"].map(e=>{var t,n;return(0,eb.jsxs)("button",{type:"button",onClick:()=>p(e),className:"grid content-end border-l px-3 pb-2 text-right",children:[(0,eb.jsx)("span",{className:"text-lg leading-none text-foreground",children:(t=f.totals,"cpu"===(n=e)?`${Math.round(t.cpu)}%`:"memoryMb"===n?`${Math.round(t.memory)}%`:"diskMbps"===n?`${Math.round(t.disk)}%`:"networkMbps"===n?`${Math.round(t.network)}%`:"")}),(0,eb.jsxs)("span",{className:"mt-1 text-xs text-muted-foreground",children:[Jr[e],(0,eb.jsx)(Ji,{active:o===e,direction:s,className:"ml-1 inline-flex"})]})]},e)})]}),(0,eb.jsx)("div",{className:"vtl-scrollbar-hidden min-h-0 flex-1 overflow-auto",children:h.map(e=>{var t;return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-9 grid-cols-[minmax(12rem,1fr)_6.25rem_repeat(4,minmax(5rem,7rem))] items-center text-sm","group"===e.kind&&"bg-muted/35"),children:[(0,eb.jsx)(Jo,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(Jl,{platform:f.platform,status:e.status}),(0,eb.jsx)(Js,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(Js,{value:e.memoryMb,max:Jh(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${Jm(t/1024)} GB`:`${Jm(t)} MB`}),(0,eb.jsx)(Js,{value:e.diskMbps,max:Math.max(1,Jh(m,"diskMbps")),label:`${Jm(e.diskMbps)} MB/秒`}),(0,eb.jsx)(Js,{value:e.networkMbps,max:Math.max(1,Jh(m,"networkMbps")),label:`${Jm(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function Ji({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jA:jI,{className:(0,eI.cn)("ml-1 size-3",n)}):null}function Jo({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xf:m0;return(0,eb.jsxs)("button",{type:"button","aria-expanded":t,onClick:n,className:"flex h-full min-w-0 items-center gap-2 px-3 text-left outline-none transition-colors hover:bg-muted/55 focus-visible:ring-[3px] focus-visible:ring-ring/20",children:[(0,eb.jsx)(r,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"size-2 rounded-sm bg-foreground/65"}),(0,eb.jsxs)("span",{className:"min-w-0 truncate font-medium",children:[e.name," (",e.children.length,")"]})]})}return(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 px-3",style:{paddingLeft:e.depth>0?34:void 0},children:[e.depth>0?(0,eb.jsx)("span",{className:"size-1.5 rounded-full bg-muted-foreground/70"}):(0,eb.jsx)("span",{className:"size-1.5 rounded-full bg-foreground/65"}),(0,eb.jsx)("span",{className:(0,eI.cn)("truncate",0===e.depth&&"font-medium"),children:e.name}),e.process.pid?(0,eb.jsx)("span",{className:"shrink-0 ui-text-kbd text-muted-foreground",children:e.process.pid}):null]})}function Jl({platform:e,status:t}){return t?.length?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 px-3 text-muted-foreground",children:[t.includes("suspended")?(0,eb.jsx)(Jn,{"aria-label":"linux"===e?"挂起进程":"挂起",className:"size-4"}):null,t.includes("auto-restart")?(0,eb.jsx)(lQ,{"aria-label":"linux"===e?"自动重启进程":"自动重启",className:"size-4"}):null,t.includes("running")?(0,eb.jsx)(Jt,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function Js({value:e,max:t,label:n}){let r=Math.min(1,Math.max(0,e/Math.max(1,t))),a=r>.78,i=a?`color-mix(in oklch, var(--destructive) ${Math.round(18+42*r)}%, var(--background))`:`color-mix(in oklch, var(--foreground) ${Math.round(5+20*r)}%, var(--background))`;return(0,eb.jsx)("div",{className:"vtl-process-heat-cell h-full border-l px-3 text-right tabular-nums","data-hot":a?"":void 0,style:{background:i},children:(0,eb.jsx)("span",{className:(0,eI.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jc(e,t){return{kind:"process",id:e.id,process:e,depth:t,name:e.appName&&0===t?e.appName:e.name,status:e.status,cpu:e.cpu,memoryMb:e.memoryMb,diskMbps:e.diskMbps,networkMbps:e.networkMbps}}function Jd(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function Ju(e,t,n,r){let a="asc"===r?1:-1;return"name"===n?e.name.localeCompare(t.name)*a:(e[n]-t[n])*a}function Jf(e){return Math.round(10*e)/10}function Jh(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function Jm(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function Jp({className:e}){let t=Jx("/api/local/machines/processes"),n=Jv("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Ja,{machines:r,className:(0,eI.cn)("h-full min-h-0 w-full",e)})}function Jg({className:e}){let t=Jx("/api/local/machines/performance"),n=Jv("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Z5,{machines:r,className:(0,eI.cn)("h-full min-h-0 w-full",e)})}function Jx(e){let[t,n]=ew.useState([]);return ew.useEffect(()=>{let t=!0,r=!1;async function a(){if(!r){r=!0;try{let r=await fetch(eR(e),{cache:"no-store"});if(!r.ok)return;let a=await r.json();t&&n(a.machines)}catch{t&&n([])}finally{r=!1}}}a();let i=window.setInterval(a,2e3);return()=>{t=!1,window.clearInterval(i)}},[e]),t}function Jv(e){let{machines:t}=xk(),[n,r]=ew.useState([]),a=ew.useMemo(()=>t.filter(e=>!e.isLocal&&"online"===e.status).map(e=>e.id),[t]);return ew.useEffect(()=>{if(0===a.length)return void r([]);let t=!0,n=!1;async function i(){if(!n){n=!0;try{let n=await Promise.all(a.map(async t=>{try{return(await sj(t,e)).machines??[]}catch{return[]}}));t&&r(n.flat())}finally{n=!1}}}i();let o=window.setInterval(i,5e3);return()=>{t=!1,window.clearInterval(o)}},[a,e]),n}let Jb=(0,ek.default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]),Jy=(0,ek.default)("radio",[["path",{d:"M16.247 7.761a6 6 0 0 1 0 8.478",key:"1fwjs5"}],["path",{d:"M19.075 4.933a10 10 0 0 1 0 14.134",key:"ehdyv1"}],["path",{d:"M4.925 19.067a10 10 0 0 1 0-14.134",key:"1q22gi"}],["path",{d:"M7.753 16.239a6 6 0 0 1 0-8.478",key:"r2q7qm"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]),Jw={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},Jj=[{id:"powershell",title:"PowerShell",shell:"PowerShell",cwd:"D:\\Projects\\Vantaloom-ui",status:"idle",initialOutput:"PowerShell 7.6.1\r\nPS D:\\Projects\\Vantaloom-ui> "}];function Jk(e,t,n){return e.getPropertyValue(t).trim()||n}function JN(e,t=!1){let n=getComputedStyle(e),r=Jk(n,"--foreground","#18181b"),a=Jk(n,"--terminal-background",Jk(n,"--background","#ffffff")),i="transparent"===a?Jk(n,"--background","#ffffff"):a,o=Jk(n,"--muted-foreground","#71717a"),l=Jk(n,"--border","#e4e4e7"),s=Jk(n,"--selection","#18181b");return{background:a,foreground:r,cursor:t?"transparent":r,cursorAccent:t?"transparent":i,selectionBackground:`color-mix(in oklch, ${s} 18%, transparent)`,selectionForeground:Jk(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:Jk(n,"--terminal-red","#bf616a"),green:Jk(n,"--terminal-green","#5e8c61"),yellow:Jk(n,"--terminal-yellow","#b06f3c"),blue:Jk(n,"--terminal-blue","#5e81ac"),magenta:Jk(n,"--terminal-magenta","#b48ead"),cyan:Jk(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:Jk(n,"--terminal-bright-red","#d06f79"),brightGreen:Jk(n,"--terminal-bright-green","#6b9a70"),brightYellow:Jk(n,"--terminal-bright-yellow","#c2824b"),brightBlue:Jk(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:Jk(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:Jk(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JS(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JC({initialOutput:t,data:n,dataKey:r,options:a,readOnly:i=!1,autoFocus:o=!1,localEcho:l=!1,onData:s,onResize:c,onReady:d,labels:u,className:f,terminalClassName:h,...m}){let p=ew.useMemo(()=>({loading:Jw.loading,...u}),[u]),g=ew.useRef(null),x=ew.useRef(null),v=ew.useRef(void 0),b=ew.useRef(s),y=ew.useRef(c),w=ew.useRef(d),j=ew.useRef(a),k=ew.useRef(i),N=ew.useRef(l),S=ew.useRef(!1),C=ew.useRef(void 0),M=ew.useRef(!1),[E,O]=ew.useState(!1);return ew.useEffect(()=>{b.current=s,y.current=c,w.current=d,j.current=a,k.current=i,N.current=l},[l,s,d,c,a,i]),ew.useEffect(()=>{let n,r=!1,a=[];!async function(){var i;let l,s,c,d,u;if(!g.current||M.current)return;M.current=!0;let[{Terminal:f},{FitAddon:h},{SearchAddon:m},{WebLinksAddon:p}]=await Promise.all([e.A(93626),e.A(16118),e.A(24306),e.A(46866)]);if(r||!g.current)return;let C=new f({convertEol:!1,cursorBlink:!0,cursorStyle:"block",drawBoldTextInBrightColors:!1,fontFamily:(l=getComputedStyle(i=g.current),u=(c=Jk(l,"--font-family-mono",s='"Cascadia Mono", "Cascadia Code", Consolas, "SFMono-Regular", "Liberation Mono", monospace'),d=getComputedStyle(i),c.replace(/var\((--[a-zA-Z0-9-_]+)(?:,[^)]+)?\)/g,(e,t)=>d.getPropertyValue(t).trim()||"")).trim(),`"Cascadia Mono", "Cascadia Code", Consolas, ${u||s}`),fontSize:13,letterSpacing:0,lineHeight:1.25,macOptionIsMeta:!0,minimumContrastRatio:4.5,scrollback:5e3,theme:JN(g.current),...j.current,allowTransparency:!0}),E=new h,P=new m,z=new p;function I(){try{E.fit(),y.current?.({cols:C.cols,rows:C.rows})}catch{}}for(let e of(C.loadAddon(E),C.loadAddon(P),C.loadAddon(z),C.open(g.current),x.current=C,v.current=E,O(!0),requestAnimationFrame(I),(n=new ResizeObserver(I)).observe(g.current),a.push(C.onData(e=>{k.current||(N.current&&("\r"===e?C.write("\r\n"):""===e?C.write("\b \b"):C.write(e)),b.current?.(e))})),JS(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:P,webLinksAddon:z,fit:I,focus:()=>C.focus(),clear:()=>C.clear(),setCursorSuppressed:function(e){let t=g.current;t&&(S.current=e,t.toggleAttribute("data-vtl-terminal-cursor-suppressed",e),C.options.theme=JN(t,e))},write:(e,t)=>C.write(e,t),writeln:e=>C.writeln(e)}),o&&C.focus()}();let i=new MutationObserver(()=>{let e=x.current,t=g.current;e&&t&&(e.options.theme=JN(t,S.current))});return i.observe(document.documentElement,{attributeFilter:["class","style"],attributes:!0}),()=>{for(let e of(r=!0,i.disconnect(),n?.disconnect(),a))e.dispose();x.current?.dispose(),x.current=null,v.current=void 0,S.current=!1,M.current=!1,O(!1)}},[o,t]),ew.useEffect(()=>{let e=x.current;if(e&&C.current!==r)for(let t of(C.current=r,JS(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,eI.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,eI.cn)("vtl-terminal-xterm size-full overflow-hidden p-1.5 font-mono","[&_.xterm]:h-full [&_.xterm]:p-0 [&_.xterm-viewport]:!bg-transparent","[&_.xterm-screen]:!bg-transparent [&_.xterm-helper-textarea]:!outline-none","[&[data-vtl-terminal-cursor-suppressed]_.xterm-cursor]:!opacity-0","[&_.xterm-viewport::-webkit-scrollbar]:w-2.5 [&_.xterm-viewport::-webkit-scrollbar-track]:bg-transparent","[&_.xterm-viewport::-webkit-scrollbar-thumb]:rounded-full [&_.xterm-viewport::-webkit-scrollbar-thumb]:border-[3px]","[&_.xterm-viewport::-webkit-scrollbar-thumb]:border-transparent [&_.xterm-viewport::-webkit-scrollbar-thumb]:bg-border [&_.xterm-viewport::-webkit-scrollbar-thumb]:bg-clip-content",h)}),!E&&(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 grid place-items-center text-muted-foreground ui-text-code",children:p.loading})]})}function JM({status:e="idle"}){return"running"===e?(0,eb.jsx)(Jb,{className:"size-3.5 text-foreground"}):"success"===e?(0,eb.jsx)(eO,{className:"size-3.5 text-foreground"}):"error"===e?(0,eb.jsx)(eE,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(yM,{className:"size-3.5 text-muted-foreground"})}function JE({session:e}){return e.aiControlled?(0,eb.jsx)(Jy,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(JM,{status:e.status})}function JO({sessions:e,defaultSessions:t=Jj,activeSessionId:n,defaultActiveSessionId:r,onActiveSessionChange:a,onSessionsChange:i,onCreateSession:o,onCloseSession:l,onSessionData:s,onSessionResize:c,onSessionReady:d,showTabs:u=!0,allowCreateSession:f=!0,readOnly:h=!1,localEcho:m=!1,terminalOptions:p,labels:g,className:x,tabListClassName:v,terminalClassName:b,...y}){let w=ew.useMemo(()=>({...Jw,...g,status:{...Jw.status,...g?.status}}),[g]),[j,k]=ew.useState(t),N=e??j,S=N[0],[C,M]=ew.useState(r??S?.id),E=n??(N.some(e=>e.id===C)?C:S?.id),O=N.find(e=>e.id===E)??S;function P(t){void 0===e&&k(t),i?.(t)}function z(e){e.disabled||(void 0===n&&M(e.id),a?.(e.id,e))}return(0,eb.jsxs)("div",{"data-slot":"terminal-tab-group",className:(0,eI.cn)("vtl-surface-panel grid min-h-0 overflow-hidden rounded-[var(--surface-panel-radius)] border",u?"grid-rows-[auto_minmax(0,1fr)]":"grid-rows-[minmax(0,1fr)]",x),...y,children:[u&&(0,eb.jsxs)("div",{"data-slot":"terminal-tab-list",role:"tablist","aria-label":w.terminalList,className:(0,eI.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uO,{className:"ml-1 size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto",children:N.map(e=>{let t=e.id===O?.id;return(0,eb.jsxs)("div",{className:(0,eI.cn)("group flex h-7 min-w-0 shrink-0 items-center rounded-md border border-transparent ui-text-control","transition-colors hover:bg-background/80",t?"bg-background text-foreground shadow-xs":"text-muted-foreground",e.disabled&&"pointer-events-none opacity-50"),children:[(0,eb.jsxs)("button",{type:"button",role:"tab","aria-selected":t,"aria-controls":`terminal-panel-${e.id}`,disabled:e.disabled,onClick:()=>z(e),className:"flex h-full min-w-0 items-center gap-1.5 rounded-md px-2 text-left outline-none focus-visible:ring-[3px] focus-visible:ring-ring/20",children:[(0,eb.jsx)(JE,{session:e}),(0,eb.jsx)("span",{className:"max-w-36 truncate",children:e.title}),e.shell&&(0,eb.jsx)("span",{className:"hidden text-muted-foreground ui-text-kbd sm:inline",children:e.shell})]}),e.closable&&(0,eb.jsx)("button",{type:"button","aria-label":w.closeTerminal(e.title),onClick:t=>{t.stopPropagation();l?.(e.id,e);let n=N.filter(t=>t.id!==e.id);if(P(n),e.id===E){let e=n.at(-1);e&&z(e)}},className:"mr-1 grid size-4 place-items-center rounded-sm text-muted-foreground opacity-0 outline-none transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/20 group-hover:opacity-100",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e.id)})}),f&&(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":w.newTerminal,onClick:function(){let e=o?.()??{id:`terminal-${Date.now()}`,title:`Terminal ${N.length+1}`,status:"idle",initialOutput:"",closable:!0};P([...N,e]),z(e)},className:"size-7 shrink-0",children:(0,eb.jsx)(lJ,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{"data-slot":"terminal-tab-panels",className:"relative min-h-0 overflow-hidden",children:N.map(e=>{let t=e.id===O?.id;return(0,eb.jsx)(JP,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JP({session:e,selected:t,terminalOptions:n,readOnly:r,localEcho:a,onSessionData:i,onSessionResize:o,onSessionReady:l,labels:s,terminalClassName:c}){let d=ew.useRef(null),u=ew.useRef(t);return ew.useEffect(()=>{if(t&&!u.current&&d.current){let e=d.current;requestAnimationFrame(()=>{e&&(e.fit(),e.terminal.refresh(0,e.terminal.rows-1),e.terminal.focus())})}u.current=t},[t]),(0,eb.jsx)("div",{id:`terminal-panel-${e.id}`,role:"tabpanel","aria-hidden":!t,"data-active":t,className:"absolute inset-0 min-h-0",style:{display:t?"block":"none"},children:(0,eb.jsx)(JC,{initialOutput:e.initialOutput,options:{...n,...e.options},readOnly:r||e.disabled,localEcho:a,autoFocus:t,onData:t=>i?.(e.id,t),onResize:t=>o?.(e.id,t),onReady:t=>{d.current=t,l?.(e.id,t)},labels:s,terminalClassName:c})})}function Jz({className:e,scopeId:t,state:n,onStateChange:r}){let[a,i]=ew.useState([]),[o,l]=ew.useState([]),[s,c]=ew.useState(),[d,u]=ew.useState("local"),[f,h]=ew.useState(),[m,p]=ew.useState(!1),[g,x]=ew.useState(!1),v=ew.useRef(new Map),b=ew.useRef(new Map),y=ew.useRef(new Map),w=ew.useRef(new Map),j=ew.useRef(new Map),k=ew.useRef(new Map),N=ew.useRef(new Map),S=ew.useRef(new Map),C=ew.useRef(!1),M=ew.useRef(n?.autoStart===!1),E=ew.useRef(n),O=ew.useRef(r),P=Array.isArray(n?.sessionIds)?n.sessionIds.join("\0"):"__all__",z=t?.trim()||void 0,I=z??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{O.current=r},[r]);let A=a.find(e=>e.id===d)??a[0],T=A?.shells?.find(e=>e.id===f)??A?.shells?.[0],R=ew.useMemo(()=>o.map(e=>e.id),[o]),D=ew.useMemo(()=>o.filter(e=>e.aiControlled).map(e=>e.id),[o]),_=R.join("\0"),L=D.join("\0"),$=ew.useCallback((e,t)=>{let n=b.current.get(e);if(t){let t=j.current.get(e);void 0!==t&&(window.clearTimeout(t),j.current.delete(e))}n?.setCursorSuppressed(t)},[]),F=ew.useCallback(e=>{let t=j.current.get(e);void 0!==t&&window.clearTimeout(t);let n=window.setTimeout(()=>{j.current.delete(e),$(e,!1)},90);j.current.set(e,n)},[$]),B=ew.useCallback(e=>{let t=w.current.get(e),n=b.current.get(e);if(!t||!n||t.writing)return;if(!t.buffer){w.current.delete(e),F(e);return}void 0!==t.drainTimer&&(window.clearTimeout(t.drainTimer),t.drainTimer=void 0);let r=t.buffer.slice(0,65536);t.buffer=t.buffer.slice(r.length),t.writing=!0,$(e,!0);try{n.write(r,()=>{(t.writing=!1,b.current.has(e))?t.buffer?t.drainTimer=window.setTimeout(()=>B(e),0):(w.current.delete(e),F(e)):w.current.delete(e)})}catch{t.writing=!1,w.current.delete(e),F(e)}},[F,$]),V=ew.useCallback((e,t)=>{if(!t)return;if(!b.current.get(e))return void y.current.set(e,`${y.current.get(e)??""}${t}`);let n=w.current.get(e);(n||(n={buffer:"",writing:!1},w.current.set(e,n)),n.buffer+=t,$(e,!0),n.buffer.length>=65536)?B(e):n.writing||void 0!==n.drainTimer||(n.drainTimer=window.setTimeout(()=>B(e),8))},[B,$]),H=ew.useCallback((e,t)=>{(k.current.set(e,t.sequence),"output"===t.type&&t.data)?V(e,t.data):"status"===t.type&&t.status&&l(n=>n.map(n=>n.id===e?{...n,status:t.status??n.status,updatedAt:t.createdAt}:n))},[V]),U=ew.useCallback(e=>{if(v.current.has(e))return;let t=new EventSource(function(e,t=0){let n=new URLSearchParams;t>0&&n.set("after",String(t));let r=n.toString();return eR(`/api/local/terminals/sessions/${encodeURIComponent(e)}/events${r?`?${r}`:""}`)}(e,k.current.get(e)??0));t.onmessage=t=>{try{H(e,JSON.parse(t.data))}catch{return}},v.current.set(e,t)},[H]),q=ew.useCallback(async()=>{if(A&&!m){M.current=!1,p(!0);try{let e=await fu({machineId:A.id,scopeId:z,shell:T?.id,cwd:A.defaultCwd,cols:100,rows:30});l(t=>t.some(t=>t.id===e.id)?t:[...t,e]),c(e.id),U(e.id)}catch{return}finally{p(!1)}}},[m,U,A,T,z]);function W(e){let t=N.current.get(e);return t||(t={buffer:"",inFlight:!1},N.current.set(e,t)),t}return ew.useEffect(()=>{let e=!0;return x(!1),async function(){try{let t=E.current,n=t?.sessionIds,r=Array.isArray(n)?new Set(n):void 0,[a,o]=await Promise.all([fc(),fd(z)]);if(!e)return;let s=r?o.sessions.filter(e=>r.has(e.id)):o.sessions;C.current=!1,M.current=t?.autoStart===!1,i(a.machines),l(s),c(e=>{let n=t?.activeSessionId??e;return n&&s.some(e=>e.id===n)?n:s[0]?.id});let d=a.machines[0];if(d){let e=a.machines.find(e=>e.id===t?.selectedMachineId)??d;u(e.id),h(n=>t?.selectedShellId&&e.shells?.some(e=>e.id===t.selectedShellId)?t.selectedShellId:n&&e.shells?.some(e=>e.id===n)?n:e.shells?.[0]?.id)}}finally{e&&x(!0)}}(),()=>{e=!1}},[P,z,I]),ew.useEffect(()=>{g&&O.current?.({sessionIds:R,activeSessionId:s,selectedMachineId:d,selectedShellId:f,autoStart:!M.current,aiControlledSessionIds:D})},[s,D,L,g,d,f,R,_]),ew.useEffect(()=>{let e=new Set(R);for(let e of o)U(e.id);for(let[t,n]of v.current)e.has(t)||(n.close(),v.current.delete(t))},[U,R,o]),ew.useEffect(()=>{!g||C.current||M.current||o.length>0||0===a.length||(C.current=!0,q())},[q,g,a.length,o.length]),ew.useEffect(()=>()=>{for(let e of v.current.values())e.close();for(let e of N.current.values())void 0!==e.timer&&window.clearTimeout(e.timer);for(let e of w.current.values())void 0!==e.drainTimer&&window.clearTimeout(e.drainTimer);for(let[e,t]of j.current)window.clearTimeout(t),$(e,!1);N.current.clear(),w.current.clear(),j.current.clear()},[$]),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid h-full min-h-0 w-full grid-rows-[auto_minmax(0,1fr)] overflow-hidden rounded-[inherit] border bg-card",e),children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5 border-b bg-muted/35 px-2 py-1.5",children:[(0,eb.jsxs)(gR,{value:A?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xm,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bn,{className:"size-3.5"}),(0,eb.jsx)(g$,{placeholder:"机器"})]}),(0,eb.jsx)(xx,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gR,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xm,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(g$,{placeholder:"Shell"})}),(0,eb.jsx)(xx,{align:"start",children:A?.shells?.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!A||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lJ,{className:"size-4"})})]}),(0,eb.jsx)(JO,{sessions:o.map(JI),activeSessionId:s,allowCreateSession:!1,localEcho:!1,labels:{loading:"启动终端...",terminalList:"终端会话",closeTerminal:e=>`关闭 ${e}`},onActiveSessionChange:e=>c(e),onCloseSession:e=>{let t,n,r;return v.current.get(e)?.close(),v.current.delete(e),b.current.delete(e),y.current.delete(e),t=w.current.get(e),t?.drainTimer!==void 0&&window.clearTimeout(t.drainTimer),w.current.delete(e),k.current.delete(e),void 0!==(n=j.current.get(e))&&(window.clearTimeout(n),j.current.delete(e)),r=N.current.get(e),void(r?.timer!==void 0&&window.clearTimeout(r.timer),N.current.delete(e),S.current.delete(e),l(t=>{let n=t.filter(t=>t.id!==e);return 0===n.length&&(M.current=!0),c(t=>t&&t!==e&&n.some(e=>e.id===t)?t:n[0]?.id),n}),ff(e).catch(()=>{}))},onSessionData:function(e,t){let n=W(e);n.buffer+=t,function e(t){let n=W(t);n.inFlight||void 0!==n.timer||(n.timer=window.setTimeout(()=>{n.timer=void 0,function(t){let n=N.current.get(t);if(!n||n.inFlight)return;let r=n.buffer;if(n.buffer="",!r){void 0===n.timer&&N.current.delete(t);return}n.inFlight=!0,fh(t,r).catch(()=>{}).finally(()=>{let n=N.current.get(t);n&&(n.inFlight=!1,n.buffer?e(t):void 0===n.timer&&N.current.delete(t))})}(t)},6))}(e)},onSessionResize:function(e,t){let n=`${t.cols}x${t.rows}`;S.current.get(e)!==n&&(S.current.set(e,n),fm(e,t).then(e=>{l(t=>t.map(t=>t.id===e.id?{...t,...e}:t))}).catch(()=>{}))},onSessionReady:function(e,t){b.current.set(e,t);let n=y.current.get(e);n&&(y.current.delete(e),V(e,n))},className:"min-h-0 rounded-none border-0"})]})}function JI(e){return{id:e.id,title:e.title,shell:e.ordinal?`T${e.ordinal}`:"",cwd:e.cwd,status:function(e){switch(e){case"running":return"running";case"exited":case"closed":return"success";case"failed":return"error";default:return"idle"}}(e.status),closable:!0,initialOutput:"",aiControlled:e.aiControlled,controller:e.controller}}function JA(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=uH("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(H8,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(Gy,{className:`${n} border-0`,file:a??r.file,value:e.defaultValue??r.defaultValue??"",defaultValue:e.defaultValue??r.defaultValue,view:e.defaultView,mode:e.defaultMode,modified:e.modified,onValueChange:n=>t.onTabChange?.({...e,defaultValue:n,modified:!0}),onViewChange:n=>t.onTabChange?.({...e,defaultView:n}),onModeChange:n=>t.onTabChange?.({...e,defaultMode:n}),onSave:t.onSaveFileTab?n=>t.onSaveFileTab?.(e,n):void 0,onHistory:()=>t.onOpenFileHistory?.(e),labels:{review:"审阅",edit:"编辑",view:"视图",code:"代码",preview:"预览",hex:"十六进制",actions:"文件菜单",save:"保存",saving:"保存中",history:"历史版本"}})}case"browser-tab-viewer":return(0,eb.jsx)(Xu,{className:`${n} border-0`,defaultUrl:e.defaultUrl??uH("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=uH("diff-tab-viewer");return(0,eb.jsx)(qS,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=uH("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(H8,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qm,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:JT(e)},source:void 0!==e.defaultValue?{type:JT(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(Jz,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function JT(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function JR(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e){case"multi-tab-system":{let e=t.nodeId,r=void 0!==t.tabs?t.tabs:[];return(0,eb.jsx)(GN,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:uV(n.kind),content:JA(n,{terminalScopeId:e?`${t.terminalScopeId??`canvas:node:${e}`}:tab:${n.id}`:t.terminalScopeId,terminalState:n.terminal,onTerminalStateChange:r=>e?t.onTabChange?.(e,{...n,terminal:r}):void 0,onRequestFileTab:()=>t.onRequestFileTab?.({nodeId:e,insertIndex:r.length}),onTabChange:n=>{e&&t.onTabChange?.(e,n)},onSaveFileTab:(n,r)=>e?t.onSaveFileTab?.(e,n,r):void 0,onOpenFileHistory:n=>e?t.onOpenFileHistory?.(e,n):void 0})})),activeTabId:t.activeTabId,detachable:!0,externalDropTypes:[G2],createLabel:"打开文件",emptyContent:(0,eb.jsx)(H8,{onChooseFile:()=>t.onRequestFileTab?.({nodeId:e,insertIndex:r.length})}),onCreateTab:()=>{t.onRequestFileTab?.({nodeId:e,insertIndex:r.length})},onActiveTabChange:n=>{e&&t.onActiveTabChange?.(e,n)},onTabsChange:n=>{if(!e)return;let a=n.map(e=>r.find(t=>t.id===e.id)).filter(e=>!!e);t.onTabsChange?.(e,a)},onTabDetach:(n,a)=>{if(!e)return!1;let i=r.find(e=>e.id===n.id);return!!i&&t.onTabDetach?.(e,i,{clientX:a.clientX,clientY:a.clientY})},onExternalTabDrop:({insertIndex:n,nativeEvent:r})=>{e&&t.onExternalTabDrop?.(e,n,r)}})}case"file-tree-panel":if(t.workspaceFolders)return(0,eb.jsx)(H3,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(XB,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(Jp,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(Jg,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(XL,{})});case"machine-file-management":return(0,eb.jsx)(Yi,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HE,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(G0,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GP,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(Gz,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"file-tab-viewer":case"browser-tab-viewer":case"diff-tab-viewer":case"data-table-tab-viewer":case"terminal-tab-group":return JA(t.tab??uH(e,`${e}-tab`),{terminalState:t.terminalState,terminalScopeId:t.terminalScopeId,onTerminalStateChange:t.onTerminalStateChange,onRequestFileTab:()=>t.onRequestFileTab?.({nodeId:t.nodeId}),onTabChange:e=>{t.nodeId&&t.onTabChange?.(t.nodeId,e)},onSaveFileTab:(e,n)=>t.nodeId?t.onSaveFileTab?.(t.nodeId,e,n):void 0,onOpenFileHistory:e=>t.nodeId?t.onOpenFileHistory?.(t.nodeId,e):void 0})}}function JD({kind:e,...t}){return JR(e,t)}let J_="application/vnd.vantaloom.agent-pane-shredder",JL="application/vnd.vantaloom.agent-pane-cutter";function J$(e,t){return(e?.activeSessionId??"")===(t.activeSessionId??"")&&(e?.selectedMachineId??"")===(t.selectedMachineId??"")&&(e?.selectedShellId??"")===(t.selectedShellId??"")&&(e?.autoStart??!0)===(t.autoStart??!0)&&(e?.sessionIds??[]).join("\0")===t.sessionIds.join("\0")&&(e?.aiControlledSessionIds??[]).join("\0")===(t.aiControlledSessionIds??[]).join("\0")}let JF=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(bt,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(Ug,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(Uc,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(s8,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(s9,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(Ug,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(Up,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Um,{})}];function JB(e,t,n=[50,50]){let r=e?.[t],a=r?.[0],i=r?.[1];return["number"==typeof a&&a>0?a:n[0],"number"==typeof i&&i>0?i:n[1]]}function JV(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function JH(e,t){return[e[t[0]]??50,e[t[1]]??50]}function JU({mode:e,sizes:t,onSizeGroupChange:n,children:r}){if("single"===e)return(0,eb.jsx)("div",{className:"size-full min-h-0",children:r[0]});if("horizontal-split"===e){let e=JB(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(a,e),onLayoutChanged:e=>n?.("outer",JH(e,a)),children:[(0,eb.jsx)(hN,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=JB(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(a,e),onLayoutChanged:e=>n?.("outer",JH(e,a)),children:[(0,eb.jsx)(hN,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=JB(t,"outer",[58,42]),a=JB(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("left",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=JB(t,"outer",[42,58]),a=JB(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("right",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=JB(t,"outer",[58,42]),a=JB(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("top",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=JB(t,"outer",[42,58]),a=JB(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(i,e),onLayoutChanged:e=>n?.("outer",JH(e,i)),children:[(0,eb.jsx)(hN,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(o,a),onLayoutChanged:e=>n?.("bottom",JH(e,o)),children:[(0,eb.jsx)(hN,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=JB(t,"outer"),i=JB(t,"left"),o=JB(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:JV(l,a),onLayoutChanged:e=>n?.("outer",JH(e,l)),children:[(0,eb.jsx)(hN,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(s,i),onLayoutChanged:e=>n?.("left",JH(e,s)),children:[(0,eb.jsx)(hN,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hk,{direction:"vertical",defaultLayout:JV(c,o),onLayoutChanged:e=>n?.("right",JH(e,c)),children:[(0,eb.jsx)(hN,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hS,{withHandle:!0}),(0,eb.jsx)(hN,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function Jq({conversationId:e,ownerMachineId:t,index:n,content:r,clipboardItems:a,clipboardDraggingId:i,onAdd:o,onPanelDrop:l,onContentChange:s,onClear:c,onCut:d,workspaceFolders:u,onRequestFileTab:f,onOpenWorkspaceFile:h,onSaveFileTab:m,onOpenFileHistory:p}){let[g,x]=ew.useState();return(0,eb.jsx)("div",{"data-agent-pane":n,className:(0,eI.cn)("relative size-full min-h-0 min-w-0 overflow-hidden",r?.kind!=="subagent-conversation-panel"&&"bg-background","vtl-agent-workspace-pane",r?.kind==="subagent-conversation-panel"&&"vtl-agent-workspace-conversation-pane bg-transparent","panel"===g&&"ring-2 ring-foreground/60 ring-inset","shredder"===g&&"ring-2 ring-destructive/70 ring-inset","cutter"===g&&"ring-2 ring-amber-500/70 ring-inset"),onDragOver:e=>{let t=Array.from(e.dataTransfer.types);if(t.includes(JL)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(J_)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jP)&&(e.preventDefault(),e.dataTransfer.dropEffect="move",x("panel"))},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||x(void 0)},onDrop:e=>{if(Array.from(e.dataTransfer.types).includes(JL)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(J_)){e.preventDefault(),e.stopPropagation(),x(void 0),c(n);return}let t=function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id"),n=a.find(e=>e.id===t),r=n?n.payloads?.[jP]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jP);if(i)try{let e=JSON.parse(i);return n&&e.content?{item:n,content:e.content}:void 0}catch{return}}(e);t&&(e.preventDefault(),e.stopPropagation(),x(void 0),l(n,t.item,t.content))},children:r?(0,eb.jsx)("div",{className:(0,eI.cn)("size-full min-h-0 min-w-0 overflow-hidden rounded-none","vtl-agent-pane-content","subagent-conversation-panel"===r.kind&&"vtl-agent-pane-conversation-content",i&&"pointer-events-none"),children:jO(r)?JR(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{J$(r.terminal,e)||s(n,{...r,terminal:e})},workspaceFolders:u,nodeId:r.id,tabs:r.tabs,activeTabId:r.activeTabId,onRequestFileTab:({insertIndex:e})=>f?.(n,e),onOpenWorkspaceFile:h,onTabsChange:(e,t)=>{s(n,{...r,tabs:t,activeTabId:t.some(e=>e.id===r.activeTabId)?r.activeTabId:t[0]?.id})},onTabChange:(e,t)=>{"multi-tab-system"===r.kind?s(n,{...r,tabs:(r.tabs??[]).map(e=>e.id===t.id?t:e),activeTabId:t.id}):s(n,{...r,title:t.title,tab:t})},onSaveFileTab:(e,t,r)=>m?.(n,t,r),onOpenFileHistory:(e,t)=>p?.(n,t),onActiveTabChange:(e,t)=>{s(n,{...r,activeTabId:t})}}):(0,eb.jsx)(HE,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:r.events},r.id)},r.id):(0,eb.jsx)("div",{className:"vtl-agent-pane-empty grid size-full place-items-center p-4",children:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"rounded-full bg-background/90",onClick:o,"data-tour":"pane-add",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加"]})})})}function JW({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vx,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vb,{children:[(0,eb.jsx)(vy,{children:"没有匹配组件。"}),(0,eb.jsx)(vw,{heading:"可放入窗口",children:jC.map(e=>(0,eb.jsxs)(vj,{"data-tour":`pane-template-${e.id}`,value:`${e.title} ${e.description} ${e.keywords}`,onSelect:()=>n(e.id),children:[(0,eb.jsx)("span",{className:"grid size-8 shrink-0 place-items-center rounded-lg border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsx)(vk,{children:"添加"})]},e.id))})]})]})})}function JK({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jO(e)?JR(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{J$(e.terminal,n)||i(t,{...e,terminal:n})},workspaceFolders:a,nodeId:e.id,tabs:e.tabs,activeTabId:e.activeTabId,onRequestFileTab:({insertIndex:e})=>c?.(t,e),onOpenWorkspaceFile:o,onTabsChange:(n,r)=>{i(t,{...e,tabs:r,activeTabId:r.some(t=>t.id===e.activeTabId)?e.activeTabId:r[0]?.id})},onTabChange:(n,r)=>{"multi-tab-system"===e.kind?i(t,{...e,tabs:(e.tabs??[]).map(e=>e.id===r.id?r:e),activeTabId:r.id}):i(t,{...e,title:r.title,tab:r})},onSaveFileTab:(e,n,r)=>l?.(t,n,r),onOpenFileHistory:(e,n)=>s?.(t,n),onActiveTabChange:(n,r)=>{i(t,{...e,activeTabId:r})}}):(0,eb.jsx)(HE,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let JG=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(ub,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uj,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(Uu,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(Uh,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(Ud,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uO,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(Uf,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uC,{})}];function JX(e,t,n){return Math.min(n,Math.max(t,e))}function JY({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加窗口",(0,eb.jsx)(xf,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(yJ,{align:t,sideOffset:6,className:"min-w-40",children:JG.map(t=>(0,eb.jsxs)(yQ,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function JZ({conversationId:e,ownerMachineId:t,panes:n,agentSide:r,columns:a,heights:i,onColumnsChange:o,onHeightsChange:l,onAddCard:s,onContentChange:c,onClear:d,workspaceFolders:u,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p}){let g=n.map((e,t)=>({content:e,index:t})).filter(e=>!!e.content),x=new Map(g.map(e=>[e.content.id,e])),v=g.map(e=>e.content.id).join("|"),b="left"===r,y=ew.useRef(0);0===y.current&&a.length>0&&(y.current=a.reduce((e,t)=>{let n=/^col-(\d+)/.exec(t.key);return n?Math.max(e,Number(n[1])):e},0));let w=ew.useCallback(()=>`col-${y.current+=1}`,[]),j=e=>o("function"==typeof e?e(a):e),k=e=>l("function"==typeof e?e(i):e),[N,S]=ew.useState(null),[C,M]=ew.useState(null),[E,O]=ew.useState(null),P=ew.useRef(null),z=ew.useRef(null),I=ew.useRef(null),A=ew.useRef(null);ew.useEffect(()=>{let e={};j(t=>{let n=new Set(g.map(e=>e.content.id)),r=t.map(e=>({...e,cardIds:e.cardIds.filter(e=>n.has(e))})).filter(e=>e.cardIds.length>0),a=new Set(r.flatMap(e=>e.cardIds)),o=g.map(e=>e.content.id).filter(e=>!a.has(e));if(o.length>0){r=r.map(e=>({...e,cardIds:[...e.cardIds]}));let t=P.current?.clientHeight??0,n=t=>t.cardIds.reduce((t,n,r)=>t+(e[n]??i[n]??320)+12*(r>0),0);for(let a of o){let i=!1;if(t>0)for(let o of r){let r=12*(o.cardIds.length>0),l=t-n(o)-r;if(l>=320){o.cardIds.push(a),i=!0;break}if(l>=140){o.cardIds.push(a),e[a]=Math.floor(l),i=!0;break}}i||(0===r.length||t>0?r.push({key:w(),width:360,cardIds:[a]}):r[0].cardIds.push(a))}}return!function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],a=t[n];if(!r||!a||r.key!==a.key||r.width!==a.width||r.cardIds.length!==a.cardIds.length)return!1;for(let e=0;e<r.cardIds.length;e+=1)if(r.cardIds[e]!==a.cardIds[e])return!1}return!0}(t,r)?r:t}),Object.keys(e).length>0&&k(t=>({...t,...e}))},[v,w]);let T=e=>i[e]??320;ew.useEffect(()=>{if(!N)return;let e=e=>{z.current?function(e,t){let n=P.current,r=z.current;if(!n||!r)return;let a=Array.from(n.querySelectorAll("[data-card-id]")),i=null,o=null,l=1/0;for(let n of a){let a=n.dataset.cardId;if(!a||a===r)continue;let s=n.getBoundingClientRect(),c=Math.max(s.left-e,0,e-s.right),d=Math.max(s.top-t,0,t-s.bottom),u=c*c+d*d;u<l&&(l=u,i=a,o=s)}if(!i||!o){I.current=null,O(null);return}let s=e-o.left,c=o.right-e,d=t-o.top,u=o.bottom-t,f=Math.min(s,c,d,u),h=f===d?"top":f===u?"bottom":f===s?"left":"right";I.current={id:i,edge:h};let m=n.getBoundingClientRect();O(function(e,t){switch(t){case"top":return{left:e.left,top:e.top-6-2,width:e.width,height:4};case"bottom":return{left:e.left,top:e.top+e.height+6-2,width:e.width,height:4};case"left":return{left:e.left-6-2,top:e.top,width:4,height:e.height};case"right":return{left:e.left+e.width+6-2,top:e.top,width:4,height:e.height}}}({left:o.left-m.left,top:o.top-m.top,width:o.width,height:o.height},h))}(e.clientX,e.clientY):A.current&&function(e,t){let n=A.current;if(!n)return;if("width"===n.kind){let t=JX(n.startWidth+(e-n.startX)*n.factor,240,760);j(e=>e.map(e=>e.key===n.columnKey?{...e,width:t}:e));return}if("growHeight"===n.kind){let e=Math.max(140,n.h0+(t-n.startY));k(t=>({...t,[n.cardId]:e}));return}let r=n.hA+n.hB,a=JX(n.hA+(t-n.startY),140,r-140);k(e=>({...e,[n.aboveId]:a,[n.belowId]:r-a}))}(e.clientX,e.clientY)},t=()=>(function(){let e=z.current;if(e){var t,n;let r=I.current;z.current=null,I.current=null,M(null),O(null),S(null),r&&(t=r.id,n=r.edge,e&&e!==t&&j(r=>{let a=r.map(e=>({...e,cardIds:[...e.cardIds]}));for(let t of a){let n=t.cardIds.indexOf(e);n>=0&&t.cardIds.splice(n,1)}let i=-1,o=-1;a.forEach((e,n)=>{let r=e.cardIds.indexOf(t);r>=0&&(i=n,o=r)});let l=a[i];if(!l)return r;if("top"===n||"bottom"===n)l.cardIds.splice("top"===n?o:o+1,0,e);else{let t=(b?"right"===n:"left"===n)?i:i+1;a.splice(t,0,{key:w(),width:a[i]?.width??360,cardIds:[e]})}return a.filter(e=>e.cardIds.length>0)}));return}A.current&&(A.current=null,S(null))})();return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t),window.addEventListener("pointercancel",t),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t),window.removeEventListener("pointercancel",t)}},[N]);let R=a.map((e,t)=>({column:e,realIndex:t}));b&&R.reverse();let D=(0,eb.jsx)("div",{className:(0,eI.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(JY,{onAddCard:s,align:b?"end":"start"})});return 0===g.length?null:(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0 flex-col",children:[D,(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto px-3 pb-3",children:(0,eb.jsxs)("div",{ref:P,className:"relative flex min-h-full items-start gap-3",children:[R.map(({column:n})=>{let r=[],i=0;for(let e=0;e<n.cardIds.length;e+=1)i+=T(n.cardIds[e]),e<n.cardIds.length-1&&(r.push(i+6),i+=12);let o=i,l=n.cardIds[n.cardIds.length-1],s=1===n.cardIds.length&&x.get(n.cardIds[0])?.content.kind==="status-monitor";return(0,eb.jsxs)("div",{className:(0,eI.cn)("relative flex shrink-0 flex-col gap-3",s&&"h-full"),style:{width:n.width},children:[n.cardIds.map(n=>{let r=x.get(n);if(!r)return null;let{content:a,index:i}=r;return(0,eb.jsxs)("div",{"data-card-id":a.id,style:s?void 0:{height:T(a.id)},className:(0,eI.cn)("group/card relative flex w-full flex-col overflow-hidden rounded-xl border border-border bg-background shadow-sm",s?"min-h-0 flex-1":"shrink-0",C===a.id?"opacity-40":"opacity-100"),children:[(0,eb.jsxs)("div",{onPointerDown:e=>{var t;return t=a.id,void(0===e.button&&(e.preventDefault(),e.stopPropagation(),z.current=t,I.current=null,M(t),O(null),S("drag")))},className:"flex shrink-0 cursor-grab touch-none select-none items-center justify-between gap-2 border-b border-border/60 px-2.5 py-1.5 active:cursor-grabbing",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:[(0,eb.jsx)(fk,{className:"size-3.5 shrink-0 text-muted-foreground/60"}),(0,eb.jsx)("span",{className:"truncate text-xs text-muted-foreground",children:a.title})]}),(0,eb.jsx)("button",{type:"button",onPointerDown:e=>e.stopPropagation(),onClick:()=>d(i),"aria-label":"关闭窗口",title:"关闭窗口",className:"grid size-5 shrink-0 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-3.5",children:(0,eb.jsx)(fg.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(JK,{content:a,index:i,conversationId:e,ownerMachineId:t,workspaceFolders:u,onContentChange:c,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p})})]},a.id)}),n.cardIds.slice(0,-1).map((e,t)=>(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:r=>{var a;return a=n.cardIds[t+1],void(0===r.button&&(r.preventDefault(),r.stopPropagation(),A.current={kind:"height",aboveId:e,belowId:a,startY:r.clientY,hA:T(e),hB:T(a)},S("resize")))},style:{top:r[t]??0},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})},`hbar-${e}`)),l&&!s?(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>{0===e.button&&(e.preventDefault(),e.stopPropagation(),A.current={kind:"growHeight",cardId:l,startY:e.clientY,h0:T(l)},S("resize"))},style:{top:o+6},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})}):null,(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>(function(e,t){if(0!==t.button)return;t.preventDefault(),t.stopPropagation();let n=a.find(t=>t.key===e)?.width??360;A.current={kind:"width",columnKey:e,startX:t.clientX,startWidth:n,factor:b?-1:1},S("resize")})(n.key,e),style:b?{left:-6}:{right:-6},className:(0,eI.cn)("group/wbar absolute inset-y-0 z-10 flex w-3 cursor-ew-resize items-center justify-center",b?"-translate-x-1/2":"translate-x-1/2"),children:(0,eb.jsx)("span",{className:"h-12 w-1 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/wbar:opacity-100"})})]},n.key)}),E?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute z-40 rounded-full bg-muted-foreground/70",style:{left:E.left,top:E.top,width:E.width,height:E.height}}):null]})}),N?(0,eb.jsx)("div",{"aria-hidden":!0,className:"absolute inset-0 z-50",style:{cursor:"drag"===N?"grabbing":A.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let JJ="vtl:workspace-layout-mode",JQ="vtl:workspace-agent-side",J0="vtl:workspace-layout-changed",J1={mode:"pane",agentSide:"left"};function J2(){let e=J1.mode,t=J1.agentSide;try{let n=window.localStorage.getItem(JJ);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(JQ);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function J5(e){try{e.mode&&window.localStorage.setItem(JJ,e.mode),e.agentSide&&window.localStorage.setItem(JQ,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(J0))}function J4({stack:e,rootTitle:t,rootOwnerMachineId:n,onNavigateRoot:r,onNavigateIndex:a,onOpenSubagent:i}){let o=e[e.length-1],[l,s]=ew.useState(null);if(ew.useEffect(()=>{let e;if(!o)return;let t=!1;async function r(){try{let a=await sz(o.id,n);if(t)return;s(a);let i="working"===a.conversation.status||!!a.conversation.running;e=window.setTimeout(r,i?900:5e3)}catch{if(t)return;e=window.setTimeout(r,3e3)}}return s(null),r(),()=>{t=!0,e&&window.clearTimeout(e)}},[o,n]),!o)return null;let c=l?.conversation.status??"working",d="working"===c||!!l?.conversation.running;return(0,eb.jsxs)("div",{className:"absolute inset-0 z-30 flex flex-col bg-background",children:[(0,eb.jsxs)("div",{className:"flex h-9 shrink-0 items-center gap-1 overflow-x-auto border-b px-2 text-xs",children:[(0,eb.jsx)("button",{type:"button",className:"shrink-0 rounded px-1.5 py-0.5 text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground",onClick:r,children:t||"主对话"}),e.map((t,n)=>{let r=Hl(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(m0,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex shrink-0 items-center gap-1 rounded px-1.5 py-0.5 transition-colors hover:bg-accent/50",i?"font-medium text-foreground":"text-muted-foreground hover:text-foreground"),onClick:()=>a(n),children:[(0,eb.jsx)(o,{className:(0,eI.cn)("size-3",r.color)}),(0,eb.jsx)("span",{className:"max-w-[10rem] truncate",children:t.name||`${r.label}子代理`})]})]},t.id)}),(0,eb.jsx)("span",{className:"ml-auto shrink-0 pl-2",children:d?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-3 animate-spin"}),"运行中"]}):"paused"===c?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-destructive",children:[(0,eb.jsx)(hE,{className:"size-3"}),"已暂停"]}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-emerald-600 dark:text-emerald-500",children:[(0,eb.jsx)(eO,{className:"size-3"}),"完成"]})})]}),(0,eb.jsx)("div",{className:"relative min-h-0 flex-1",children:l?(0,eb.jsx)(V1,{events:l.events,bottomInset:16,contentClassName:"max-w-[42.5rem]",onOpenSubagent:e=>i(e),labels:{recall:"召回",branch:"分支",expand:"展开",collapse:"收起",completed:"完成",thinking:"运行中"}}):(0,eb.jsxs)("div",{className:"flex h-full items-center justify-center text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"mr-2 size-4 animate-spin"}),"正在打开子代理对话…"]})})]})}let J3=[],J6="vantaloom:file-system-changed";function J8(e,t){let n;if(0===t.length)return e;let r=new Map;for(let t=0;t<e.length;t+=1){let n=e[t]?.id;n&&r.set(n,t)}for(let a of t){let t=a?.id,i=t?r.get(t):void 0;if(void 0!==i){if(e[i]===a)continue;n||(n=e.slice()),n[i]=a}else n||(n=e.slice()),t&&r.set(t,n.length),n.push(a)}return n??e}function J7(e,t){if(0===e.length)return t;let n=new Set;for(let e of t)e?.id&&n.add(e.id);let r=e.filter(e=>e?.id&&!n.has(e.id));return 0===r.length?t:[...r,...t]}function J9(e){var t;let n=(t=e?.layoutMode,JF.some(e=>e.id===t)?t:"quad"),r="right"===e?.agentPosition?"right":"left",a=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};let t=e.shell&&"object"==typeof e.shell&&!Array.isArray(e.shell)?e.shell:void 0,n={};for(let e of["agent","panes"]){let r=t?.[e];"number"==typeof r&&Number.isFinite(r)&&r>0&&(n[e]=r)}return{...Object.keys(n).length?{shell:n}:{},outer:Qe(e.outer),left:Qe(e.left),right:Qe(e.right),top:Qe(e.top),bottom:Qe(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,JF.find(e=>e.id===n)?.slots??4)},()=>void 0);for(let[t,n]of(e?.panes??[]).entries()){let e=Number.isInteger(n.slot)?n.slot:t;e<0||e>=i.length||(i[e]=function(e,t){var n,r;let a=e.paneId||`${e.kind}-${t+1}`,i=!(n=e.props)||"object"!=typeof n||Array.isArray(n)?{}:n;if("subagent-conversation-panel"===e.kind)return{id:a,kind:"subagent-conversation-panel",title:Qn(i.title)??"Subagent",subagentId:Qn(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jM(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>uB(e?.kind)):void 0,s=jM(e.kind);return{id:a,kind:e.kind,title:Qn(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:Qn(i.activeTabId),terminal:"terminal-tab-group"===e.kind?!(r=i.terminal)||"object"!=typeof r||Array.isArray(r)?{sessionIds:[]}:{sessionIds:Array.isArray(r.sessionIds)?r.sessionIds.filter(e=>"string"==typeof e):[],activeSessionId:Qn(r.activeSessionId),selectedMachineId:Qn(r.selectedMachineId),selectedShellId:Qn(r.selectedShellId),autoStart:"boolean"==typeof r.autoStart?r.autoStart:void 0,aiControlledSessionIds:Array.isArray(r.aiControlledSessionIds)?r.aiControlledSessionIds.filter(e=>"string"==typeof e):void 0}:void 0}}(n,t))}return{layoutMode:n,agentPosition:r,layoutSizes:a,panes:i,cardColumns:Array.isArray(e?.cardLayout?.columns)?e.cardLayout.columns.filter(e=>e&&"string"==typeof e.key&&Array.isArray(e.cardIds)).map(e=>({key:e.key,width:"number"==typeof e.width&&e.width>0?e.width:360,cardIds:e.cardIds.filter(e=>"string"==typeof e)})):[],cardHeights:e?.cardLayout?.heights&&"object"==typeof e.cardLayout.heights?e.cardLayout.heights:{}}}function Qe(e){if(!Array.isArray(e))return;let t=e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0);return t.length?t:void 0}function Qt(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function Qn(e){return"string"==typeof e&&e.trim()?e:void 0}function Qr(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function Qa(e){return e.reduce((e,t)=>Math.max(e,Qr(t)),0)}function Qi({conversation:e,clipboardItems:t,clipboardDraggingId:n,onClipboardItemsChange:r,onClipboardDraggingChange:a,onOverlayOpenChange:i,onConversationCreated:o,onCancelDraft:l,subagentStack:s=[],onSubagentStackChange:c,subagentTree:d=[],mobileView:u="conversation",onMobilePaneCountChange:f}){let h=sy(),m=ew.useRef(null),p=ew.useRef(void 0),g=J9(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(J1);return ew.useEffect(()=>{t(J2());let e=()=>t(J2());return window.addEventListener(J0,e),window.addEventListener("storage",e),()=>{window.removeEventListener(J0,e),window.removeEventListener("storage",e)}},[]),e}(),j="card"===w.mode,[k,N]=ew.useState(!1),[S,C]=ew.useState(!1);ew.useEffect(()=>{try{C("1"===window.localStorage.getItem("vtl:agent-panes-collapsed"))}catch{}},[]);let M=ew.useCallback(()=>{C(e=>{let t=!e;try{window.localStorage.setItem("vtl:agent-panes-collapsed",t?"1":"0")}catch{}return t})},[]),[E,O]=ew.useState(g.layoutSizes),[P,z]=ew.useState(()=>g.panes),[I,A]=ew.useState(()=>g.cardColumns),[T,R]=ew.useState(()=>g.cardHeights),[D,_]=ew.useState(()=>e?.events??[]),[L,$]=ew.useState(()=>e?.eventsStart??0),[F,B]=ew.useState(()=>e?.eventsTotal??e?.events?.length??0),[V,H]=ew.useState(!1),U=L>0,[q,W]=ew.useState(null),[K,G]=ew.useState(new Set),[X,Y]=ew.useState(void 0),[Z,J]=ew.useState(()=>Ui(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Ua(e));window.localStorage.setItem(Ua(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>Ul(e?.conversation.id)),[en,er]=ew.useState([]),[ea,ei]=ew.useState(void 0),[eo,el]=ew.useState(!1),[es,ec]=ew.useState(!1),[ed,eu]=ew.useState(""),[ef,eh]=ew.useState(e?.conversation.status==="working"),[em,ep]=ew.useState(e?.conversation.status??"idle"),[eg,ex]=ew.useState(e?.conversation.settings?.permissionMode??"acceptEdits"),[ev,ey]=ew.useState([]),[ej,ek]=ew.useState(e?.conversation.tokens??0),[eN,eS]=ew.useState(e?.conversation.runUsage),[eC,eM]=ew.useState(e?.conversation.contextTokens??0),[eE,eO]=ew.useState(!1),eP=ew.useRef(em),[eA,eT]=ew.useState(),[e_,eL]=ew.useState(),[e$,eF]=ew.useState(),eB=ew.useRef(Qa(g.panes)),eV=ew.useRef(0),eH=ew.useRef(""),eU=JF.find(e=>e.id===x)?.slots??4,eq=e?.conversation.settings.folders??J3,{models:eW}=xK(),eK=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?eW.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[eW,e?.conversation.settings.mainModels]),eG=ji(e?.conversation.settings.engine),eX=ew.useMemo(()=>{if(eG){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jo(t),disabled:!0}]}return eK},[eG,e?.conversation.settings.ccModel,eK]),eY=!eG&&0===eK.length,[eZ,eJ]=ew.useState(!1),eQ=ef||"working"===em||eZ,e0=ew.useCallback(async t=>{if(!e||eE)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(eG){if(eQ)return void await s2(n,"请执行 /compact 压缩上下文。",r);eh(!0),ep("working");try{let e=await sG(n,{message:"/compact",modelRef:"",mode:"agent"},r);ep(e.conversation.status)}catch(e){eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"压缩请求失败")}return}if(eQ)return void await s2(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eO(!0);try{let e=await s5(n,t,void 0,r),a=await sz(n,r);a&&(_(a.events),$(a.eventsStart??0),B(a.eventsTotal??a.events.length),ek(a.conversation.tokens??0),eS(a.conversation.runUsage),eM(a.conversation.contextTokens??0));let i=Math.max(0,Math.round((e?.tokensSaved??0)/1e3));hF.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hF.error(e instanceof Error?e.message:"压缩失败")}finally{eO(!1)}},[e,eE,eQ,eG]),e1=ew.useMemo(()=>{if(!e)return;let t=eW.find(e=>e.value===ed),n=t?.contextLength||200,r=eC>0?eC:e.conversation.contextTokens??0;return{used:r,total:1e3*n,toolCalls:r,userMessages:0,other:void 0,onCompressPrecise:()=>e0("precise"),onCompressExtreme:()=>e0("extreme"),compressing:eE}},[e,eW,ed,eC,e0,eE]),e2=ew.useMemo(()=>{let t=e?.conversation.rounds;if(t?.length)return t;let n=[];for(let e of D){if("user"!==e.kind)continue;let t=n.length,r=(e.title??"").replace(/\s+/g," ").trim(),a=(r?r.slice(0,28):"")||`第 ${t+1} 轮`;n.push({runId:e.id,index:t,anchorEventId:e.id,title:a,summary:a,createdAt:""})}return n},[e?.conversation.rounds,D]),e5=ew.useCallback(async t=>{let n=e?.conversation.id,r=t.anchorEventId??D.find(e=>e.id.startsWith(`${t.runId}-`))?.id??D.find(e=>e.id===t.runId)?.id;if(r){if(D.some(e=>e.id===r))return void m.current?.scrollToEvent(r);if(n&&L>0)try{let t=await sI(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>J7(t.events,e)),$(t.start),t.total>0&&B(t.total))}catch{}window.setTimeout(()=>{m.current?.scrollToEvent(r)},60)}},[e?.conversation.id,e?.conversation.ownerMachineId,D,L]),e4=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Us(e));window.localStorage.setItem(Us(e),t)}catch{}}(e?.conversation.id,t),!t)return void Y(void 0);let r=D.findIndex(e=>e.id===t);if(r>=0)for(let e of e2){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=e2.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,e2]),e3=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await u9(e);return(t=e,n=r,t.defaultValue!==n.defaultValue||t.title!==n.title||t.file?.size!==n.file?.size||t.file?.mimeType!==n.file?.mimeType||t.file?.previewContent!==n.file?.previewContent||t.file?.src!==n.file?.src||t.file?.truncated!==n.file?.truncated)?r:e}catch{return e}},[]),e6=ew.useCallback(async e=>{if(!e||!jO(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(e3));return(t=r,n=a,t.length!==n.length||t.some((e,t)=>e!==n[t]))?{...e,tabs:a}:e}if("file-tab-viewer"===e.kind&&e.tab){let t=await e3(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[e3]),e8=ew.useCallback(async()=>{var e,t;let n=await Promise.all(P.map(async e=>e6(e)));e=P,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&z(n)},[P,e6]);ew.useEffect(()=>{i?.(void 0!==eA||void 0!==e_||void 0!==e$)},[e_,e$,i,eA]);let e7=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(e7.current!==t){e7.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>J8(e,n))},[e?.conversation.id,e?.events]);let e9=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sI(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>J7(n.events,e)),$(e=>n.events.length>0?n.start:Math.max(0,e-200)),n.total>0&&B(n.total)}finally{H(!1)}}},[e?.conversation.id,e?.conversation.ownerMachineId,L,V]);function te(e){if(!e.length)return;let t=e.map(jz);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function tt(e,t,n){if(!e||!jO(e))return e;if("multi-tab-system"===e.kind){var r;let a,i;return{...e,tabs:(r=e.tabs??[],a=r.filter(e=>e.id!==t.id),i=void 0===n?a.length:Math.min(Math.max(n,0),a.length),a.splice(i,0,t),a),activeTabId:t.id}}return"file-tab-viewer"===e.kind?{...e,title:t.title,tab:t}:e}function tn(e,t){return e&&jO(e)?"multi-tab-system"===e.kind?{...e,tabs:(e.tabs??[]).map(e=>e.id===t.id?t:e),activeTabId:t.id}:"file-tab-viewer"===e.kind?{...e,title:t.title,tab:t}:e:e}function tr(e){z(t=>{let n=t.findIndex(e=>void 0===e);return n>=0?t.map((t,r)=>r===n?e:t):[...t,e]})}function ta(e){eB.current+=1;let t=jE(e,`${e}-${eB.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;eD().then(n=>{tr(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tr(t)}ew.useEffect(()=>{let t=e?.conversation.id;if(!t||0===D.length||p.current===t)return;p.current=t;let n=function(e){if(e)try{return window.localStorage.getItem(Us(e))??void 0}catch{return}}(t),r=D[D.length-1]?.id;if(!n||n===r||!D.some(e=>e.id===n))return;let a=window.setTimeout(()=>{m.current?.scrollToEvent(n)},80);return()=>window.clearTimeout(a)},[e?.conversation.id,D.length]),ew.useEffect(()=>{J(Ui(e?.conversation.id)),et(Ul(e?.conversation.id)),er([]),ei(void 0),G(new Set)},[e?.conversation.id]),ew.useEffect(()=>{eh(e?.conversation.status==="working"),ep(e?.conversation.status??"idle")},[e?.conversation.id,e?.conversation.status]),ew.useEffect(()=>{ek(e?.conversation.tokens??0),eS(e?.conversation.runUsage),eM(e?.conversation.contextTokens??0)},[e?.conversation.id,e?.conversation.tokens,e?.conversation.runUsage,e?.conversation.contextTokens]),ew.useEffect(()=>{ex(e?.conversation.settings?.permissionMode??"acceptEdits")},[e?.conversation.id,e?.conversation.settings?.permissionMode]),ew.useEffect(()=>{let e=eK[0]?.id??"";eu(t=>eK.some(e=>e.id===t)?t:e)},[eK]),ew.useEffect(()=>{let t=J9(e?.panes);v(t.layoutMode),y(t.agentPosition),O(t.layoutSizes),z(t.panes),A(t.cardColumns),R(t.cardHeights),eB.current=Qa(t.panes)},[e?.conversation.id,e?.panes]),ew.useEffect(()=>{let t,n=e?.conversation.id,r=e?.conversation.ownerMachineId;if(!n)return;let a=!1,i=e=>{_(t=>J8(t,e.events)),ep(e.conversation.status),ek(e.conversation.tokens??0),eS(e.conversation.runUsage),eM(e.conversation.contextTokens??0)},o=e=>{void 0===t&&(t=window.setInterval(async()=>{try{let e=await sz(n,r);if(a)return;i(e),eh("working"===e.conversation.status)}catch{return}},e))};if(r&&"local"!==r)return o(600),()=>{a=!0,void 0!==t&&window.clearInterval(t)};let l=e?.conversation.lastSeq??0,s=new EventSource(eR(`/api/local/agent/conversations/${encodeURIComponent(n)}/events/stream?after=${l}`));return s.addEventListener("detail",e=>{try{let t=s4(JSON.parse(e.data));i(t),eh("working"===t.conversation.status)}catch{return}}),s.onerror=()=>{s.close(),o(350)},()=>{a=!0,s.close(),void 0!==t&&window.clearInterval(t)}},[e?.conversation.id,e?.conversation.ownerMachineId]),ew.useEffect(()=>{if(!e?.conversation.id)return;let t=window.setInterval(()=>{e8()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,e8]),ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t)return;let r=!1;sV(t,n);let a=window.setInterval(()=>{r||sV(t,n)},3e4);return()=>{r=!0,window.clearInterval(a),sH(t,n)}},[e?.conversation.id,e?.conversation.ownerMachineId]),ew.useEffect(()=>{let e=D.filter(e=>"change"===e.kind).map(e=>`${e.id}:${e.status??""}:${e.isStreaming?"1":"0"}`).join("|");e&&e!==eH.current&&(eH.current=e,window.dispatchEvent(new CustomEvent(J6)),e8())},[D,e8]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:I,heights:T},r=[],P.forEach((e,t)=>{if(e){if(jO(e))return void r.push({paneId:e.id,slot:t,kind:e.kind,machineId:e.terminal?.selectedMachineId,resourceId:e.terminal?.activeSessionId,props:{title:e.title,tab:e.tab,tabs:e.tabs,activeTabId:e.activeTabId,terminal:e.terminal}});r.push({paneId:e.id,slot:t,kind:e.kind,props:{title:e.title,subagentId:e.subagentId,events:e.events}})}}),{layoutMode:x,agentPosition:b,sizes:E,cardLayout:n,panes:r}),e?.conversation.ownerMachineId)},300);return()=>window.clearTimeout(n)},[b,I,T,e?.conversation.id,x,E,P]);let ti=ew.useCallback(e=>{z(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jO(r)&&r.tab&&(!r.tab.defaultUrl||r.tab.defaultUrl.startsWith("https://vantaloom.local"))?t.map((t,a)=>a===n&&r.tab?{...r,tab:{...r.tab,defaultUrl:e}}:t):t}eB.current+=1;let r=jE("browser-tab-viewer",`browser-tab-viewer-${eB.current}`),a=void 0!==r.tab?{...r,tab:{...r.tab,defaultUrl:e}}:r,i=t.findIndex(e=>void 0===e);return i>=0?t.map((e,t)=>t===i?a:e):j?[...t,a]:t})},[j]),to=ew.useRef(!1);function tl(e){z(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;eB.current+=1;let n=jE(e,`${e}-${eB.current}`),r=t.findIndex(e=>void 0===e);return r>=0?t.map((e,t)=>t===r?n:e):j?[...t,n]:t})}ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;to.current=!1;let r=!1,a=async()=>{if(!r&&!to.current)try{let e=(await eD())[0];if(r||to.current||!e)return;to.current=!0,ti(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,ti]);let ts=ew.useCallback((e,t)=>{z(n=>{if(n.some(n=>void 0!==n&&jO(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jE("terminal-tab-group",t),terminal:{sessionIds:[e.id],activeSessionId:e.id,autoStart:!1,aiControlledSessionIds:[e.id],selectedMachineId:e.machineId}},a=n.findIndex(e=>void 0===e);return a>=0?n.map((e,t)=>t===a?r:e):j?[...n,r]:n})},[j]),tc=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;tc.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fd();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||tc.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(tc.current.add(t.id),ts(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,ts]);let tf=ew.useCallback(()=>{tl("plan-doc-viewer")},[j]),th=ew.useCallback(()=>{tl("spec-doc-viewer")},[j]);ew.useEffect(()=>{let t=e?.conversation.id;if(W(null),!t)return;let n=e?.conversation.ownerMachineId,r=!0,a=async()=>{let e=await sR(t,n);r&&W(e.planState)};a();let i=window.setInterval(a,1500);return()=>{r=!1,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId]);let tm=q??e?.conversation.planState??null,tp=ew.useRef(void 0);function tg(e,t){z(n=>{let r=n.findIndex(t=>t?.kind===e);if(r>=0)return n.map((n,a)=>a===r&&n?{id:n.id,kind:e,title:t.title,tab:t}:n);eB.current+=1;let a={id:`${e}-${eB.current}`,kind:e,title:t.title,tab:t},i=n.findIndex(e=>void 0===e);return i>=0?n.map((e,t)=>t===i?a:e):[...n,a]})}async function tx(e,t,n){try{let r=await u8(e);if(j)return void tg("file-tab-viewer",r);z(e=>e.map((e,a)=>a===t?tt(e,r,n):e))}catch{hF.error("文件预览打开失败")}}function tv(e){if(j)return void tx(e,-1);let t=P.slice(0,eU).findIndex(e=>e?.kind==="multi-tab-system");t<0?hF.warning("请先放入一个多标签页组件"):tx(e,t)}function tb(e){let t=e.path?.trim()||e.name.trim();("diff"===e.kind||"diff"===e.meta)&&e.diff?function(e){let t=e.path?.trim()||e.name.trim(),n={id:function(e,t){let n=0x811c9dc5;for(let e=0;e<t.length;e+=1)n^=t.charCodeAt(e),n=Math.imul(n,0x1000193);return`${e}-${(n>>>0).toString(36)}`}("diff",`${e.mutationId??""}|${e.machineId??"local"}|${t}|${e.diff??""}`),kind:"diff-tab-viewer",title:`Diff ${e.name}`,file:{name:e.name,path:t,machineId:e.machineId??"local",kind:"code"},diff:e.diff};if(j)return tg("diff-tab-viewer",n);let r=P.slice(0,eU).findIndex(e=>e?.kind==="multi-tab-system");r<0?hF.warning("请先放入一个多标签页组件"):z(e=>e.map((e,t)=>t===r?tt(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||tv({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let e=tm?.approvals?.find(e=>!e.decision);e&&tp.current!==e.id&&(tp.current=e.id,tf())},[tm,tf]);let ty=e?.conversation.ownerMachineId??"local",tw=ew.useMemo(()=>{let e=e=>/^https?:\/\//i.test(e)||e.startsWith("data:"),t=async e=>{let{target:t,kind:n,label:r}=e;try{if("url"===n)return void window.open(t,"_blank","noopener,noreferrer");if("local-file"===n){let e=await fetch(eR(`/v1/files/reveal?path=${encodeURIComponent(t)}`),{cache:"no-store"});if(!e.ok){let t=await e.json().catch(()=>null);throw Error(t?.error??`reveal failed: ${e.status}`)}return}let e=await uG(ty,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void tv({machineId:ty,path:t});let a=eR(`/v1/remote/${encodeURIComponent(ty)}/files/raw?path=${encodeURIComponent(t)}`);await mK({url:a,label:r}),hF.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hF.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===ty?eR(`/v1/files/raw?${n}`):eR(`/v1/remote/${encodeURIComponent(ty)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===ty?"local-file":"remote-file",onOpen:e=>void t(e)}},[ty]);async function tj(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hF.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uX({machineId:a,path:r,content:n}),o={...await u7(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};z(t=>t.map((t,n)=>n===e?tn(t,o):t)),window.dispatchEvent(new CustomEvent(J6)),hF.success("文件已保存")}catch(e){throw hF.error("文件保存失败"),e}}async function tk(t){let n=e?.conversation.id,r=e$?.tab.file?.path,a=e$?.tab.file?.machineId??"local";if(e$&&n&&r)try{let i=await sQ(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await u7(i,{id:e$.tab.id,title:`${i.name} @ ${Ql(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:e$.tab.defaultView,defaultMode:"review"});z(e=>e.map((e,t)=>t===e$.paneIndex?tn(e,o):e)),eF(void 0)}catch{hF.error("历史版本打开失败")}}function tN(e,t,n){let i=P[e];eB.current=Math.max(eB.current,Qr(n)),z(t=>t.map((t,r)=>r===e?n:t)),r(e=>{let n=e.filter(e=>e.id!==t.id);if(!i)return n;let r=jz(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tS(e,t){z(n=>n.map((n,r)=>r===e?t:n))}function tC(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tM(e){var t=P[e];if(t&&jO(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])ff(e).catch(()=>{});z(t=>t.map((t,n)=>n===e?void 0:t))}function tE(e){let t=P[e];t&&te([t]),z(t=>t.map((t,n)=>n===e?void 0:t))}async function tO(t,n="chat",r=[]){let a=e?.conversation.id,i=eG?"":ed||eK[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return Ul(e);let r=n.slice(0,1e5),a=Ul(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(Uo(e),JSON.stringify(i))}catch{}return i}(a,t)),ef||"working"===em))return;if(!eG&&!i)return void hF.error("请先在代理模型配置里选择模型");G(function e(t,n=new Set){for(let r of t)n.add(r.id),e(r.children??[],n);return n}(d));let o=r.map(e=>"image"===e.kind?{kind:"image",name:e.name,mimeType:e.mimeType,data:e.dataUrl?.split(",")[1]??""}:{kind:"file",name:e.name,mimeType:e.mimeType,text:e.text??""}).filter(e=>"image"===e.kind?""!==e.data:(e.text??"")!=="");eh(!0),ep("working");try{let r=await sG(a,{message:t,modelRef:i,mode:n,attachments:o.length>0?o:void 0},e?.conversation.ownerMachineId);ep(r.conversation.status)}catch(e){eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"对话请求失败")}}async function tP(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=eG?"":r||ed||eK[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!eG&&!a)return void hF.error("请先在代理模型配置里选择模型");eh(!0),ep("working"),_(e=>e.map(e=>e.id===t.id?{...e,status:"retried"}:e));try{let r=await sX(n,{modelRef:a,mode:i,retryEventId:t.id},e?.conversation.ownerMachineId);ep(r.conversation.status)}catch(e){_(e=>e.map(e=>e.id===t.id?t:e)),eh(!1),ep("idle"),hF.error(e instanceof Error?e.message:"对话重试失败")}}}function tz(e){eQ?hF.error("对话正在运行,请先停止后再回退"):ei(e)}async function tI(){let t=e?.conversation.id;if(!ea||!t)return void ei(void 0);el(!0);try{let n=await sY(t,ea.id,e?.conversation.ownerMachineId);_(n.detail.events),$(0),B(n.detail.events.length),ep(n.detail.conversation.status),eh(!1),Q(n.prompt),c?.([]);let r=[];n.revertedFiles>0&&r.push(`恢复 ${n.revertedFiles} 个文件`),n.deletedFiles>0&&r.push(`删除 ${n.deletedFiles} 个新增文件`),n.archivedSubagents>0&&r.push(`归档 ${n.archivedSubagents} 个子代理`),hF.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hF.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hF.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tA(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await sZ(n,t.id,e?.conversation.ownerMachineId);o?.(r),hF.success("已创建分支对话")}catch(e){hF.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}async function tT(t){let n=e?.conversation.id;if(n)try{let r=e?.conversation.settings??{};await sq(n,{settings:{...r,...t}},e?.conversation.ownerMachineId)}catch(e){hF.error(e instanceof Error?e.message:"设置更新失败")}}async function tR(t,n){let r=e?.conversation.id;if(r)try{await s0(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hF.error(e instanceof Error?e.message:"审批操作失败")}}async function tD(){let t=e?.conversation.id;if(t){eJ(!0);try{await s1(t,e?.conversation.ownerMachineId)}catch{}}}function t_(){tO("继续","agent")}async function tL(t){let n=e?.conversation.id;if(!n)return;let r=ev.find(e=>e.id===t);if(!r)return;let a="string"==typeof r.content?r.content:String(r.content??"");if(a.trim()){ey(e=>e.filter(e=>e.id!==t));try{await s2(n,a.trim(),e?.conversation.ownerMachineId)}catch{}}}ew.useEffect(()=>{"idle"===em&&eZ&&eJ(!1)},[em,eZ]),ew.useEffect(()=>{let e=eP.current;if(eP.current=em,"working"===e&&"idle"===em&&ev.length>0){let e=ev[0];if(e){ey(ev.slice(1));let t="string"==typeof e.content?e.content:String(e.content??"");t.trim()&&tO(t.trim(),"agent")}}},[em]);let t$=Array.from({length:eU},(r,a)=>(0,eb.jsx)(Jq,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:P[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eT(a),onPanelDrop:tN,onContentChange:tS,onClear:tM,onCut:tE,workspaceFolders:eq,onRequestFileTab:(e,t)=>eL({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:tv,onSaveFileTab:tj,onOpenFileHistory:(e,t)=>eF({paneIndex:e,tab:t})},a)),tF=P.slice(0,eU).some(e=>e?.kind==="subagent-conversation-panel"),tB=E.shell?.agent??42,tV=E.shell?.panes??58,tH=w.agentSide,tU="control-room"===w.mode||k,tq=(0,eb.jsxs)(mV,{type:"single",value:tU?"hidden":tH,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),J5({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),J5({mode:"control-room"}))},children:[(0,eb.jsx)(mH,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s8,{})}),(0,eb.jsx)(mH,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(ct,{})}),(0,eb.jsx)(mH,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s9,{})})]}),tW=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HP,{ownerMachineId:e.conversation.ownerMachineId,title:e.conversation.title,className:"pr-12"}):null,e?(0,eb.jsx)("div",{className:"pointer-events-none absolute left-1 top-9 z-30 flex justify-start pt-1.5",children:(0,eb.jsx)("div",{className:"pointer-events-auto",children:(0,eb.jsx)(Hz,{rounds:e2,onJumpToRound:e5,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HE,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e9:void 0,models:e?eX:void 0,modelId:eG?eX[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tT({permissionMode:t})},running:eQ,disabled:!!e&&eY,onModelChange:eu,onSubmit:e?e=>{tO(e.value,"agent",e.attachments??[])}:void 0,onStop:tD,onOpenFile:tb,deliverable:tw,onOpenSubagent:function(e){e.id&&c?.([tC(e)])},onOpenPlan:tf,onOpenSpec:()=>th(),planPromptBar:e?(0,eb.jsx)(H9,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tm,modelRef:ed||eK[0]?.id||"",onOpenPlan:tf,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0,onRetry:tP,onApprovalDecision:tR,onContinue:t_,onRecallUserMessage:tz,onBranchAssistantMessage:tA,onActiveEventChange:e4,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tL,contextUsage:e1})}),s.length>0&&e?(0,eb.jsx)(J4,{stack:s,rootTitle:e.conversation.title,rootOwnerMachineId:e.conversation.ownerMachineId,onNavigateRoot:()=>c?.([]),onNavigateIndex:e=>c?.(s.slice(0,e+1)),onOpenSubagent:function(e){e.id&&c?.([...s,tC(e)])}}):null]}),tK=(0,eb.jsx)(hN,{id:"agent",defaultSize:tB,minSize:28,children:tW},"agent-conversation"),tG=(0,eb.jsx)(hN,{id:"panes",defaultSize:tV,minSize:32,children:(0,eb.jsxs)("section",{className:"vtl-agent-workspace-panel flex size-full min-h-0 min-w-0 flex-col bg-transparent","data-has-conversation-pane":tF?"true":void 0,children:[(0,eb.jsx)("div",{className:"flex h-11 shrink-0 items-center border-b px-3","data-tour":"pane-toolbar",children:(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)(mu,{value:x,onValueChange:e=>{let t,n;return t=JF.find(t=>t.id===e)?.slots??4,void((n=P.slice(t).filter(e=>!!e)).length&&te(n),z(Array.from({length:Math.max(4,t)},(e,n)=>n<t?P[n]:void 0)),v(e))},children:(0,eb.jsx)(my,{children:JF.map(e=>(0,eb.jsx)(mw,{value:e.id,"aria-label":e.label,title:e.label,className:"h-7 w-10 px-0 [&_svg]:size-4",children:e.icon},e.id))})}),tq,(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",draggable:!0,"aria-label":"剪切窗口内容",title:"拖拽到窗口以剪切到剪切板",className:"h-7 w-10 cursor-grab rounded-md text-muted-foreground active:cursor-grabbing [&_svg]:size-4",onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(JL,"cut")},children:(0,eb.jsx)(l0,{})}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",draggable:!0,"aria-label":"粉碎窗口内容",title:"拖拽到窗口以清空",className:"h-7 w-10 cursor-grab rounded-md text-muted-foreground active:cursor-grabbing [&_svg]:size-4",onDragStart:e=>{e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(J_,"clear")},children:(0,eb.jsx)(cn,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(JU,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=Qt(t);O(t=>{var r;return(r=t[e],(r?.length??0)===(n?.length??0)&&(r??[]).every((e,t)=>.01>Math.abs(e-(n?.[t]??0))))?t:{...t,[e]:n}})},children:t$},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),tX=(0,eb.jsx)(JZ,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:P,agentSide:tH,columns:I,heights:T,onColumnsChange:A,onHeightsChange:R,onAddCard:ta,onContentChange:tS,onClear:tM,workspaceFolders:eq,onOpenWorkspaceFile:tv,onSaveFileTab:tj,onOpenFileHistory:(e,t)=>eF({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>eL({paneIndex:e,insertIndex:t})}),tY=(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===tH?"right-0 justify-end pr-1":"left-0 justify-start pl-1"),children:(0,eb.jsx)("button",{type:"button",onClick:M,"aria-label":S?"展开工作区":"收起工作区",title:S?"展开工作区":"收起工作区",className:"grid size-7 place-items-center rounded-md border bg-background/85 text-muted-foreground opacity-0 shadow-sm backdrop-blur transition-opacity hover:bg-muted hover:text-foreground focus-visible:opacity-100 group-hover/panes:opacity-100 [&_svg]:size-4",children:"left"===tH?S?(0,eb.jsx)(ce,{}):(0,eb.jsx)(s7,{}):S?(0,eb.jsx)(tu,{}):(0,eb.jsx)(td,{})})}),tZ=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(JW,{open:void 0!==eA,onOpenChange:e=>{e||eT(void 0)},onAdd:function(e){if(void 0===eA)return;eB.current+=1;let t=jE(e,`${e}-${eB.current}`),n=P[eA];n&&te([n]),z(e=>e.map((e,n)=>n===eA?t:e)),eT(void 0)}}),(0,eb.jsx)(H6,{open:void 0!==e_,folders:eq,onOpenChange:e=>{e||eL(void 0)},onSelectFile:e=>{e_&&tx(e,e_.paneIndex,e_.insertIndex),eL(void 0)}}),(0,eb.jsx)(Qo,{open:void 0!==e$,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:e$?.tab,onOpenChange:e=>{e||eF(void 0)},onSelectVersion:e=>{tk(e)}}),(0,eb.jsx)(d4,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"回退对话到此处?"}),(0,eb.jsx)(ug,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{disabled:eo,children:"取消"}),(0,eb.jsx)(ux,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tI()},children:eo?"回退中…":"确认回退"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(jN,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HE,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e9:void 0,models:e?eX:void 0,modelId:eG?eX[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tT({permissionMode:t})},running:eQ,disabled:!!e&&eY,onModelChange:eu,onSubmit:e?e=>{tO(e.value,"agent",e.attachments??[])}:void 0,onStop:tD,onOpenFile:tb,deliverable:tw,onOpenSubagent:function(e){var t;let n=P.slice(0,eU),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hF.warning("请释放一个窗口再选中浏览");eV.current+=1;let o={id:t=`subagent-${e.id}-${eV.current}`,kind:"subagent-conversation-panel",title:e.title,subagentId:e.id,events:e.events?.length?e.events:[{id:`${t}-status`,kind:"done",title:e.detail??e.status??e.activity??e.title}]};z(e=>e.map((e,t)=>t===i?o:e))},onRetry:tP,onApprovalDecision:tR,onContinue:t_,onRecallUserMessage:tz,onBranchAssistantMessage:tA,onActiveEventChange:e4,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tL,contextUsage:e1}),paneElements:t$,panes:P,activeSlotCount:eU,onOpenPalette:eT,timeline:(0,eb.jsx)(Hz,{rounds:e2,onJumpToRound:e5,activeRunId:X})}),tZ,(0,eb.jsx)(hW,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[tU?(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 -z-10 opacity-0","aria-hidden":!0,children:(0,eb.jsx)(hk,{direction:"horizontal",children:tG})}),(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0 min-w-0 basis-[58%] shrink-0 flex-col",children:[(0,eb.jsx)(hk,{direction:"horizontal",children:tK}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:tq})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Ur,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:eQ,subagentTree:d,baselineSubagentIds:K,activeSubagentPath:s,onSelectMain:()=>c?.([]),onSelectSubagent:e=>c?.([e])})})]}):j&&!P.some(Boolean)?(0,eb.jsxs)("div",{className:"relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tW}),(0,eb.jsx)("div",{className:(0,eI.cn)("absolute top-2 z-20","left"===tH?"right-3":"left-3"),children:(0,eb.jsx)(JY,{onAddCard:ta,align:"left"===tH?"end":"start"})})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===tH?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tW}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tX})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tX}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tW})]})}):S?(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-0 -z-10 opacity-0","aria-hidden":!0,children:(0,eb.jsx)(hk,{direction:"horizontal",children:tG})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tW}),tY]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hk,{direction:"horizontal",defaultLayout:{agent:tB,panes:tV},onLayoutChanged:e=>{let t=e.agent??tB,n=e.panes??tV;!function(e){let t=Qt(e),n=t[0],r=t[1];if(void 0===n||void 0===r)return;let a="left"===b?{agent:n,panes:r}:{agent:r,panes:n};O(e=>{let t=e.shell?.agent,n=e.shell?.panes;return .01>Math.abs((t??0)-a.agent)&&.01>Math.abs((n??0)-a.panes)?e:{...e,shell:{...e.shell,...a}}})}("left"===tH?[t,n]:[n,t])},children:["left"===tH?tK:tG,(0,eb.jsx)(hS,{withHandle:!0}),"left"===tH?tG:tK]},`${e?.conversation.id??"empty"}-${tH}`),tY]}),tZ,(0,eb.jsx)(hW,{position:"top-right"})]}):(0,eb.jsx)(jb,{onCreated:e=>o?.(e),onCancel:l})}function Qo({open:e,conversationId:t,ownerMachineId:n,tab:r,onOpenChange:a,onSelectVersion:i}){let[o,l]=ew.useState([]),[s,c]=ew.useState(!1),d=r?.file?.path,u=r?.file?.machineId??"local";return ew.useEffect(()=>{if(!e||!t||!d)return void l([]);let r=!1;return c(!0),sJ(t,{machineId:u,path:d},n).then(e=>{r||l(e.versions)}).catch(()=>{r||l([])}).finally(()=>{r||c(!1)}),()=>{r=!0}},[t,n,u,e,d]),(0,eb.jsx)(dC,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fv,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fw,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fj,{className:"sr-only",children:"浏览当前文件在此 Agent 会话中的修改历史。"}),(0,eb.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:r?.file?.name??r?.title??"文件"}),d?(0,eb.jsxs)("div",{className:"mt-0.5 truncate ui-text-kbd text-muted-foreground",children:[u,":",d]}):null]}),(0,eb.jsx)("div",{className:"max-h-[28rem] overflow-auto p-2",children:s?(0,eb.jsx)("div",{className:"px-3 py-8 text-center text-xs text-muted-foreground",children:"正在读取历史版本"}):0===o.length?(0,eb.jsx)("div",{className:"px-3 py-8 text-center text-xs text-muted-foreground",children:"还没有记录到这个文件的修改历史"}):(0,eb.jsx)("div",{className:"grid gap-1",children:o.map(e=>{var t;let n;return(0,eb.jsxs)("button",{type:"button",className:"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-md px-3 py-2 text-left transition-colors hover:bg-muted/70",onClick:()=>i(e),children:[(0,eb.jsxs)("span",{className:"min-w-0",children:[(0,eb.jsxs)("span",{className:"block truncate text-sm font-medium",children:[Ql(e.mutationId)," ·"," ","before"===e.state?"修改前":"修改后"]}),(0,eb.jsx)("span",{className:"mt-0.5 block truncate ui-text-kbd text-muted-foreground",children:Number.isFinite(n=Date.parse(t=e.createdAt))?new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(n):t})]}),(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,eb.jsxs)("b",{className:"font-medium text-emerald-600",children:["+",e.additions??0]}),(0,eb.jsxs)("b",{className:"font-medium text-rose-600",children:["-",e.deletions??0]})]})]},e.id)})})})]})})}function Ql(e){return e.replace(/^mut-/,"").slice(0,16)}var Qs=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{let n=(0,l1.createSlot)(`Primitive.${t}`),r=ew.forwardRef((e,r)=>{let{asChild:a,...i}=e;return"u">typeof window&&(window[Symbol.for("radix-ui")]=!0),(0,eb.jsx)(a?n:t,{...i,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{}),Qc=ew.forwardRef((e,t)=>(0,eb.jsx)(Qs.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function Qd({className:e,...t}){return(0,eb.jsx)(Qc,{"data-slot":"label",className:(0,eI.cn)("flex w-fit items-center gap-2 text-sm font-medium leading-snug peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]/field:opacity-50",e),...t})}function Qu({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,eI.cn)("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:self-stretch",e),...n})}function Qf(e){let t=new URLSearchParams;e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return n?`?${n}`:""}async function Qh(e){return(await Qk(`/api/local/skills${Qf(e)}`)).skills??[]}async function Qm(e,t){return Qk(`/api/local/skills/${encodeURIComponent(e)}${Qf(t)}`)}async function Qp(e){await Qk(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function Qg(e,t){return Qk("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function Qx(e,t){return Qk("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function Qv(){return(await Qk("/api/local/skills/sources")).sources??[]}async function Qb(e){let t=new URLSearchParams;e?.scope&&t.set("scope",e.scope),e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return(await Qk(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function Qy(e,t,n){return Qk(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qf(n)}`)}async function Qw(e){return Qk("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function Qj(e,t,n){await Qk(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qf(n)}`,{method:"DELETE"})}async function Qk(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"skill/memory api failed");return r}Qc.displayName="Label";let QN={global:"全局",project:"项目",conversation:"对话"},QS=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QC({conversationId:e,workspace:t,scopes:n,className:r}){let a=n??["global","project","conversation"],[i,o]=ew.useState([]),[l,s]=ew.useState(!0),[c,d]=ew.useState(""),[u,f]=ew.useState(""),[h,m]=ew.useState(null),[p,g]=ew.useState(!1),[x,v]=ew.useState(a[0]??"global"),b=ew.useMemo(()=>({conversationId:e,workspace:t}),[e,t]),y=ew.useCallback(async()=>{s(!0),d("");try{let e=await Qb(b);o(e)}catch(e){d(e instanceof Error?e.message:"读取记忆失败")}finally{s(!1)}},[b]);async function w(e){f(e.name);try{let t=await Qy(e.scope,e.name,b);m({editing:!0,scope:t.scope,name:t.name,description:t.description,type:t.type,body:t.body})}catch(e){d(e instanceof Error?e.message:"读取记忆正文失败")}finally{f("")}}async function j(){if(h&&h.name.trim()){g(!0),d("");try{await Qw({scope:h.scope,name:h.name.trim(),description:h.description.trim(),type:h.type,body:h.body,conversationId:e,workspace:t}),m(null),await y()}catch(e){d(e instanceof Error?e.message:"保存记忆失败")}finally{g(!1)}}}async function k(e){f(e.name),d("");try{await Qj(e.scope,e.name,b),await y()}catch(e){d(e instanceof Error?e.message:"删除记忆失败")}finally{f("")}}return ew.useEffect(()=>{y()},[y]),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3",r),children:[(0,eb.jsx)("div",{className:"flex items-center justify-end",children:(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-8",onClick:()=>void y(),"aria-label":"刷新记忆",children:(0,eb.jsx)(bi,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mu,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(my,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mw,{value:e,className:"flex-1",children:QN[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mj,{value:e,className:"mt-3 grid gap-2",children:[(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-8",onClick:()=>{m({editing:!1,scope:e,name:"",description:"",type:"pattern",body:""})},children:[(0,eb.jsx)(lJ,{className:"size-4"}),"新增",QN[e],"记忆"]})}),l?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取记忆"}):0===t.length?(0,eb.jsxs)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:["暂无",QN[e],"记忆。"]}):(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:t.map(e=>{var t;return(0,eb.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"mt-0.5 line-clamp-2 text-xs text-muted-foreground",children:e.description||"(无描述)"})]}),(0,eb.jsx)(Bu,{variant:"secondary",className:"shrink-0",children:(t=e.type,QS.find(e=>e.value===t)?.label??t)})]}),e.paths&&e.paths.length>0?(0,eb.jsx)("p",{className:"line-clamp-1 text-[11px] text-muted-foreground/80",children:e.paths.join(",")}):null,(0,eb.jsxs)("div",{className:"mt-auto flex gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void w(e),disabled:u===e.name,children:"查看 / 编辑"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs text-destructive hover:text-destructive",onClick:()=>void k(e),disabled:u===e.name,children:[(0,eb.jsx)(bo,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dC,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fv,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fb,{children:(0,eb.jsxs)(fw,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QN[h.scope]:"",")"]})}),h?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(eA,{value:h.name,disabled:h.editing,onChange:e=>m({...h,name:e.currentTarget.value}),placeholder:"例如 api-error-handling"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"描述"}),(0,eb.jsx)(eA,{value:h.description,onChange:e=>m({...h,description:e.currentTarget.value}),placeholder:"一行用于相关性匹配的描述"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gR,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:QS.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"正文"}),(0,eb.jsx)(y6,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fy,{children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",onClick:()=>m(null),disabled:p,children:"取消"}),(0,eb.jsxs)(ez.Button,{type:"button",onClick:()=>void j(),disabled:p||!h?.name.trim(),children:[(0,eb.jsx)(Gr,{className:"size-4"}),p?"保存中":"保存"]})]})]})})]})}let QM=(0,ek.default)("cloud-download",[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]]),QE=(0,ek.default)("package-plus",[["path",{d:"M16 16h6",key:"100bgy"}],["path",{d:"M19 13v6",key:"85cyf1"}],["path",{d:"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14",key:"e7tb2h"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["line",{x1:"12",x2:"12",y1:"22",y2:"12",key:"a4e8g8"}]]);function QO({conversationId:e,workspace:t,className:n}){let[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState(!0),[c,d]=ew.useState(""),[u,f]=ew.useState(""),[h,m]=ew.useState(null),[p,g]=ew.useState(!1),[x,v]=ew.useState(""),[b,y]=ew.useState(""),w=ew.useMemo(()=>({conversationId:e,workspace:t}),[e,t]),j=ew.useCallback(async()=>{s(!0),d("");try{let[e,t]=await Promise.all([Qh(w),Qv()]);a(e),o(t)}catch(e){d(e instanceof Error?e.message:"读取技能失败")}finally{s(!1)}},[w]);async function k(e){g(!0);try{let t=await Qm(e.name,w);m(t)}catch(e){d(e instanceof Error?e.message:"读取技能正文失败")}finally{g(!1)}}async function N(e){f(e.name),d("");try{await Qp(e.name),await j()}catch(e){d(e instanceof Error?e.message:"删除失败")}finally{f("")}}async function S(n){if(e||t){f(n.name),d("");try{await Qg(n.name,w),await j()}catch(e){d(e instanceof Error?e.message:"安装到工作区失败")}finally{f("")}}}async function C(){let e=b.trim();if(e){f("__pull__"),d("");try{await Qx(e,x),y(""),await j()}catch(e){d(e instanceof Error?e.message:"拉取技能失败")}finally{f("")}}}ew.useEffect(()=>{j()},[j]);let M=!!(e||t);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3",n),children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-end gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"grid min-w-[7rem] flex-1 gap-1",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"从源拉取技能"}),(0,eb.jsxs)(gR,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xm,{className:"h-9 w-full",children:(0,eb.jsx)(g$,{placeholder:"选择源"})}),(0,eb.jsx)(xx,{children:0===i.length?(0,eb.jsx)(xv,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xv,{value:"local"===e.label?"local":e.url||e.label,children:[e.label,e.readOnly?"(只读)":""]},e.label))})]})]}),(0,eb.jsxs)("div",{className:"grid min-w-[8rem] flex-[2] gap-1",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"技能名称"}),(0,eb.jsx)("input",{value:b,onChange:e=>y(e.currentTarget.value),placeholder:"kebab-name",className:"h-9 rounded-md border border-input bg-transparent px-3 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring/40"})]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:"__pull__"===u||!b.trim(),onClick:()=>void C(),children:[(0,eb.jsx)(QM,{className:"size-4"}),"拉取"]}),(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-9",onClick:()=>void j(),"aria-label":"刷新技能列表",children:(0,eb.jsx)(bi,{className:"size-4"})})]}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,l?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取技能库"}):0===r.length?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"尚无可用技能。可从上方源拉取,或让 agent 把当前流程保存为技能。"}):(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:r.map(e=>(0,eb.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"mt-0.5 line-clamp-2 text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 flex-col items-end gap-1",children:[(0,eb.jsx)(Bu,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bu,{variant:"outline",children:e.source}):null]})]}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-wrap gap-1.5",children:[(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void k(e),disabled:p,children:[(0,eb.jsx)(uC,{className:"size-3.5"}),"查看"]}),M&&"global"===e.scope?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void S(e),disabled:u===e.name,children:[(0,eb.jsx)(QE,{className:"size-3.5"}),"装入工作区"]}):null,"global"===e.scope?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs text-destructive hover:text-destructive",onClick:()=>void N(e),disabled:u===e.name,children:[(0,eb.jsx)(bo,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dC,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fv,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fb,{children:[(0,eb.jsx)(fw,{children:h?.name}),(0,eb.jsx)(fj,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(wT,{className:"max-h-[60vh] rounded-md border bg-muted/40",children:(0,eb.jsx)("pre",{className:"whitespace-pre-wrap break-words p-3 text-xs leading-relaxed",children:h?.body||"(无正文)"})})]})})]})}function QP({conversationId:e,skillPolicy:t,memoryPolicy:n,onSkillPolicyChange:r,onMemoryPolicyChange:a}){return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"本对话策略"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(vJ,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gR,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xv,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xv,{value:"off",children:"关闭(不注入、不提供工具)"})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本对话的记忆工具与 <memory> 自动注入。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"相关技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本对话工作区可见的技能(含全局库)。可查看正文,或把全局技能装入本对话的工作区。"}),(0,eb.jsx)(QO,{conversationId:e})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"记忆看板"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本对话可见的项目记忆与对话记忆,可查看、编辑、新增与删除。"}),(0,eb.jsx)(QC,{conversationId:e,scopes:["project","conversation"]})]})]})}let Qz=(0,l2.cva)("vtl-surface-card relative w-full rounded-[var(--surface-card-radius)] border px-4 py-3 text-sm [&>svg]:absolute [&>svg]:top-3.5 [&>svg]:left-4 [&>svg~*]:pl-7",{variants:{variant:{default:"border-border",muted:"border-border bg-muted/40",destructive:"border-destructive/35 bg-destructive/10 text-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}});function QI({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,eI.cn)(Qz({variant:t}),e),...n})}function QA({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,eI.cn)("mb-1 leading-none font-medium",e),...t})}function QT({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,eI.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function QR({conversationId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState({}),[i,o]=ew.useState(!0),[l,s]=ew.useState(null),[c,d]=ew.useState(""),u=ew.useCallback(async()=>{let t=(await jl(e)).folders??[];n(t),a(Object.fromEntries(t.map(e=>[e.path,e.vantaloom])))},[e]);async function f(t){if(!l){s(t),d("");try{await js(t,r[t]??"",e),await u()}catch(e){d(e instanceof Error?e.message:"保存失败")}finally{s(null)}}}return(ew.useEffect(()=>{(async()=>{o(!0);try{await u()}catch(e){d(e instanceof Error?e.message:"加载失败")}finally{o(!1)}})()},[u]),i)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取该对话的项目文档"}):(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"系统提示词"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"这里管理本对话工作区文件夹里的系统提示词。会自动读取各文件夹的 agent.md / claude.md 等文档;你可以选一份作为模板,或自行编写,保存后写入该文件夹的 vantaloom.md,并作为带标记的系统提示词长期注入本对话上下文。 若未设置且未检测到任何文档,则使用全局“兜底系统提示词”。"})]}),c?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:c})]}):null,0===t.length?(0,eb.jsx)("p",{className:"rounded-md border border-dashed px-3 py-4 text-xs text-muted-foreground",children:"本对话还没有工作区文件夹。先在“工作区文件夹”里添加一个本机文件夹,这里就会列出它的文档。"}):t.map(e=>{let t=e.docs??[];return(0,eb.jsxs)("div",{className:"grid gap-2 rounded-md border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium",title:e.path,children:e.path}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void f(e.path),disabled:l===e.path,children:[(0,eb.jsx)(Gr,{className:"size-4"}),l===e.path?"保存中":"保存到 vantaloom.md"]})]}),t.length>0?(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"用作模板:"}),t.map(t=>(0,eb.jsx)(ez.Button,{type:"button",size:"sm",variant:"ghost",className:"h-7 px-2 text-xs",onClick:()=>a(n=>({...n,[e.path]:t.content})),children:t.name},t.name))]}):(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未检测到 agent.md / claude.md,可直接编写。"}),(0,eb.jsx)(y6,{value:r[e.path]??"",onChange:t=>a(n=>({...n,[e.path]:t.currentTarget.value})),placeholder:"该项目的系统提示词 / 规范,将写入 vantaloom.md",rows:8,className:"resize-y font-mono text-xs"})]},e.path)})]})}let QD=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function Q_({conversation:e,mainModels:t,ccModel:n="",sessionSettings:r,onMainModelsChange:a,onCcModelChange:i,onSessionSettingsChange:o,onSkillPolicyChange:l,onMemoryPolicyChange:s,onClose:c,onEnterConversation:d}){let[u,f]=ew.useState("models"),h=ji(e.settings.engine);return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"flex items-center gap-2 border-b px-3 py-2.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon","aria-label":"关闭设置",onClick:c,className:"shrink-0",children:(0,eb.jsx)(fg.XIcon,{className:"size-5"})}),(0,eb.jsxs)("button",{type:"button",className:"min-w-0 flex-1 rounded-lg px-2 py-1 text-left transition-colors hover:bg-muted/60",title:"返回该对话",onClick:()=>d?.(e),children:[(0,eb.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:[e.agent," · 会话设置"]}),(0,eb.jsx)("div",{className:"truncate text-sm font-semibold",children:e.title})]})]}),(0,eb.jsx)("nav",{className:"flex shrink-0 gap-1 overflow-x-auto border-b px-3 py-2 vtl-scrollbar-hidden",children:QD.filter(e=>"system-prompt"!==e.id&&"skill-memory"!==e.id||!h).map(e=>(0,eb.jsx)("button",{type:"button",onClick:()=>f(e.id),className:(0,eI.cn)("shrink-0 rounded-lg px-3 py-1.5 text-[13px] transition-colors",u===e.id?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60 hover:text-foreground"),children:e.label},e.id))}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto p-4 pb-[max(1.25rem,env(safe-area-inset-bottom))]",children:(0,eb.jsxs)("div",{className:"mx-auto w-full max-w-2xl",children:["models"===u?(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"grid grid-cols-[5rem_minmax(0,1fr)] items-center gap-3 rounded-lg border bg-card px-3 py-2.5",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"运行引擎"}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:function(e){switch(e){case"claude-code":return"Claude Code";case"reclaude":return"reclaude";default:return"Vantaloom"}}(e.settings.engine)})]}),h?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("label",{htmlFor:"conversation-cc-model",className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gR,{value:""===n?jr:n,onValueChange:e=>i?.(e===jr?"":e),children:[(0,eb.jsx)(xm,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):(0,eb.jsx)(xG,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(w4,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(w3,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(w6,{title:"可访问的工作区文件夹",value:r.folders,onValueChange:e=>o({...r,folders:h?e.slice(-1):e})}),h?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null]}):null,"system-prompt"!==u||h?null:(0,eb.jsx)(QR,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(QP,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(jn,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function QL({conversationId:e,ownerMachineId:t,open:n,onOpenChange:r,onEnterConversation:a}){let[i,o]=ew.useState(),[l,s]=ew.useState([]),[c,d]=ew.useState(""),[u,f]=ew.useState({folders:[],blockedCommands:[],allowedTools:[],deniedTools:[],plugins:[],hosts:[]});async function h(e){if(!i)return;let n=e.session??u,r=e.mainModels??l,a=e.ccModel??c,s={subagents:i.settings.subagents??[],mainModels:r,folders:n.folders,blockedCommands:n.blockedCommands,allowedTools:n.allowedTools,deniedTools:n.deniedTools,plugins:n.plugins,hosts:n.hosts,permissionMode:n.permissionMode??i.settings.permissionMode,engine:i.settings.engine,ccModel:i.settings.engine?a:void 0,skillPolicy:e.skillPolicy??i.settings.skillPolicy,memoryPolicy:e.memoryPolicy??i.settings.memoryPolicy};try{let e=await sq(i.id,{settings:s},t);o(e.conversation)}catch{}}function m(){o(void 0),r(!1)}return(ew.useEffect(()=>{if(!n||!e)return;let r=!0;return async function(){try{let n=await sz(e,t);if(!r)return;let a=n.conversation;o(a),s(a.settings.mainModels),d(a.settings.ccModel??""),f({folders:a.settings.folders,blockedCommands:a.settings.blockedCommands,allowedTools:a.settings.allowedTools,deniedTools:a.settings.deniedTools,plugins:a.settings.plugins,hosts:a.settings.hosts})}catch{}}(),()=>{r=!1}},[e,n,t]),n&&i)?(0,eb.jsx)(Q_,{conversation:i,mainModels:l,ccModel:c,sessionSettings:u,onMainModelsChange:e=>{s(e),h({mainModels:e})},onCcModelChange:e=>{d(e),h({ccModel:e})},onSessionSettingsChange:e=>{f(e),h({session:e})},onSkillPolicyChange:e=>{o(t=>t?{...t,settings:{...t.settings,skillPolicy:e}}:t),h({skillPolicy:e})},onMemoryPolicyChange:e=>{o(t=>t?{...t,settings:{...t.settings,memoryPolicy:e}}:t),h({memoryPolicy:e})},onClose:m,onEnterConversation:e=>{m(),a?.(e.id,t)}}):null}function Q$(e){return!e||"local"===e}async function QF(e,t){return QU(await Qq(t,`/${encodeURIComponent(e)}`),t)}async function QB(e,t){return QU(await Qq(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(uU),edges:e.edges.map(uq)})}),t)}async function QV(e,t,n){return QU(await Qq(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(uU),edges:t.edges.map(uq),nodeIds:t.nodeIds})}),n)}async function QH(e,t){return QU(await Qq(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function QU(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=Q$(r=t)?n.ownerMachineId??"local":r,{id:n.id,title:n.title||"新画布",ownerMachineId:a,nodeCount:n.nodeCount??0,running:n.running??!1,createdAt:n.createdAt,updatedAt:n.updatedAt,lastOpenedAt:n.lastOpenedAt}),nodes:e.nodes??[],edges:e.edges??[]}}async function Qq(e,t,n,r){let a=await fetch(eR(Q$(e)?`/api/local/canvas${t}`:`/v1/remote/${e}/canvas${t}`),{cache:"no-store",...n,headers:{...n?.body?{"Content-Type":"application/json"}:{},...n?.headers}});if(r?.allowNotFound&&404===a.status)return;let i=await a.json().catch(()=>({}));if(!a.ok)throw Error("string"==typeof i?.error?i.error:"canvas api failed");return i}let QW=(0,ek.default)("layout-template",[["rect",{width:"18",height:"7",x:"3",y:"3",rx:"1",key:"f1a2em"}],["rect",{width:"9",height:"7",x:"3",y:"14",rx:"1",key:"jqznyg"}],["rect",{width:"5",height:"7",x:"16",y:"14",rx:"1",key:"q5h2i8"}]]),QK=(0,ek.default)("lock-keyhole",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]]),QG=(0,ek.default)("network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]),QX=(0,ek.default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]),QY=(0,ek.default)("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),QZ=(0,ek.default)("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]),QJ={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function QQ(e,t,n){return Math.min(Math.max(e,t),n)}function Q0({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...QJ,...n},d=ew.useRef(null),u=ew.useRef(null),f=ew.useRef(null),h=ew.useRef(0),m=ew.useRef(void 0),[p,g]=ew.useState(0),x=t??e.find(e=>"current"===e.status)?.id,v=ew.useCallback(()=>{void 0!==m.current&&(cancelAnimationFrame(m.current),m.current=void 0)},[]),b=ew.useCallback((e,t=340)=>{let n=d.current,r=u.current;if(!n||!r)return;v();let a=Math.max(0,n.scrollHeight-n.clientHeight),i=n.scrollTop,o=QQ(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=QQ((e-l)/t,0,1);if(n.scrollTop=i+(o-i)*(1-Math.pow(1-r,3)),r<1){m.current=requestAnimationFrame(s);return}n.scrollTop=o,m.current=void 0};m.current=requestAnimationFrame(s)},[v]),y=ew.useCallback(e=>{let t=d.current,n=u.current;if(!t||!n)return;let r=Math.max(0,t.scrollHeight-t.clientHeight);if(r<=0)return;e.preventDefault();let a=void 0===m.current?t.scrollTop:h.current,i=1===e.deltaMode?32*e.deltaY:2===e.deltaMode?e.deltaY*e.currentTarget.clientHeight:e.deltaY,o=Math.sign(i);if(0===o)return;let l=Array.from(n.querySelectorAll("[data-slot='roadmap-item']")).map(e=>e.offsetTop),s=QQ(Math.ceil(Math.abs(i)/160),1,3),c=a;for(let e=0;e<s;e+=1)c=function(e,t,n,r){if(0===e.length)return t;if(n>0)return e.find(e=>e>t+1)??r;for(let n=e.length-1;n>=0;n-=1){let r=e[n];if(void 0!==r&&r<t-1)return r}return 0}(l,c,o,r);b(c)},[b]);return ew.useLayoutEffect(()=>{if(!r)return;let e=d.current,t=u.current,n=f.current;if(!e||!t||!n)return void g(0);let a=n.offsetTop,i=t.scrollHeight-p,o=Math.max(0,e.clientHeight-(i-a));g(e=>Math.abs(e-o)>.5?o:e),requestAnimationFrame(()=>{e.scrollTop=a,h.current=a})},[p,e,x,r]),ew.useEffect(()=>v,[v]),(0,eb.jsx)("div",{"data-slot":"roadmap",className:(0,eI.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,eI.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,eI.cn)("relative",l&&"min-h-full"),children:[(0,eb.jsx)("span",{"aria-hidden":"true",className:"absolute top-0 bottom-0 left-[0.3125rem] w-px bg-border"}),e.map(e=>{let t=e.id===x?"current":e.status??"queued";return(0,eb.jsxs)("div",{ref:"current"===t?f:void 0,"data-slot":"roadmap-item","data-status":t,"aria-label":c[t],className:(0,eI.cn)("relative grid grid-cols-[1.5rem_minmax(0,1fr)_auto] items-start gap-2 py-2.5",o),children:[(0,eb.jsx)("span",{"aria-hidden":"true","data-slot":"roadmap-marker",className:(0,eI.cn)("relative z-10 mt-1 size-2.5 rounded-full border bg-background","done"===t&&"border-muted-foreground bg-muted-foreground","current"===t&&"border-primary bg-primary","queued"===t&&"border-border","blocked"===t&&"border-destructive bg-destructive")}),(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{"data-slot":"roadmap-title",className:(0,eI.cn)("text-sm leading-5","queued"===t&&"text-muted-foreground","blocked"===t&&"text-destructive"),children:e.title}),e.description?(0,eb.jsx)("div",{"data-slot":"roadmap-description",className:"mt-0.5 text-xs leading-5 text-muted-foreground",children:e.description}):null]}),e.meta?(0,eb.jsx)("div",{"data-slot":"roadmap-meta",className:"pt-0.5 text-right ui-text-kbd text-muted-foreground",children:e.meta}):null]},e.id)}),p>0?(0,eb.jsx)("div",{"aria-hidden":"true","data-slot":"roadmap-bottom-spacer",style:{height:p}}):null]})})})}let Q1="/themes/jelly/bg1.png",Q2="/themes/jelly/bg2.png",Q5="/themes/jelly/bg3.png",Q4="/themes/jelly/bg4.png";function Q3({image:e,position:t="center",opacity:n=.72,blur:r="10px"}){return{"--vtl-jelly-card-image":`url("${e}")`,"--vtl-jelly-card-position":t,"--vtl-jelly-card-opacity":String(n),"--vtl-jelly-card-blur":r}}function Q6({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let Q8={product:"Vantaloom",overview:"运维总览",subtitle:"本机服务、工作组机器和 Agent 运行状态。",workgroup:"工作组",health:"系统健康",cost:"今日消耗",activeRuns:"运行中",queue:"排队任务",machineStatus:"机器状态",resourceTrend:"资源趋势",runMix:"运行构成",schedule:"日程提醒",incidents:"关注事项",online:"在线",local:"本机",p2p:"P2P",direct:"直连",sleeping:"休眠",memory:"内存",cpu:"CPU",gpu:"GPU",disk:"磁盘",theme:"主题"},Q7={search:"搜索控制台...",dashboard:"仪表盘",canvas:"工程",machines:"机器",schedules:"日程",settings:"设置",overview:"总览",runs:"运行",telemetry:"遥测",canvasRecent:"打开最近工程",canvasNew:"新建工程",canvasAll:"浏览所有画布",projectCanvas:"画布",projectKanban:"看板",projectSettings:"工程设置",projectNewConversation:"新建对话",projectEmpty:"暂无工程",conversationRecent:"打开最近对话",conversationNew:"新建 Agent 对话",conversationAll:"浏览所有对话",fleet:"机器组",access:"访问控制",calendar:"计划任务",billing:"用量与账单"};Q8.local,Q8.direct,Q8.online,Q8.p2p,Q8.online,Q8.direct,Q8.sleeping,Q8.cpu,Q8.memory,Q8.activeRuns;function Q9(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function eee({children:e}){return(0,eb.jsx)("section",{className:"vtl-app-background flex h-full min-h-0 flex-col pb-14 md:pb-0 text-foreground",children:(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:e})})}function eet(e){return Math.max(0,...e.map(e=>e.y+e.h))}function een(e,t,n){return t.some(t=>t.id!==n&&e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y)}function eer(e){let t=Math.max(2,Math.min(12,e.w)),n=Math.max(1,e.h),r=Math.max(0,Math.min(12-t,e.x)),a=Math.max(0,e.y);return{...e,x:r,y:a,w:t,h:n}}function eea(e,t,n,r,a){for(let i=0;i<eet(e)+8;i+=1)for(let o=0;o<=12-r;o+=1){let l={id:t,kind:n,x:o,y:i,w:r,h:a};if(!een(l,e))return l}return{id:t,kind:n,x:0,y:eet(e)+2,w:r,h:a}}function eei(e){return{...e.defaultConfig}}function eeo(e){return e.payloads?.[G4]}function eel({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vx,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vb,{className:"max-h-[420px]",children:[(0,eb.jsx)(vy,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vw,{heading:a,children:t.map(e=>(0,eb.jsxs)(vj,{value:`${e.title} ${e.description}`,keywords:[e.id,e.defaultConfig.dataSource,e.defaultConfig.title],onSelect:()=>o(e.id),className:"min-h-14 items-start py-2",children:[(0,eb.jsx)("span",{className:"mt-0.5 grid size-8 shrink-0 place-items-center rounded-md border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate font-medium",children:e.title}),(0,eb.jsx)("span",{className:"mt-0.5 block truncate ui-text-kbd text-muted-foreground",children:e.description})]}),(0,eb.jsxs)(vk,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function ees({open:e,dragMode:t,label:n="页面卡片操作",onOpenChange:r,onAdd:a,onDragModeChange:i}){let o=[{key:"add",label:"添加卡片",icon:(0,eb.jsx)(lJ,{className:"size-4"}),onClick:a,pressed:!1},{key:"drag",label:"拖拽排版",icon:(0,eb.jsx)(lW,{className:"size-4"}),onClick:()=>i(!t),pressed:t}];return(0,eb.jsx)("div",{className:"fixed right-5 bottom-5 z-30",children:(0,eb.jsxs)("div",{className:"relative size-8",children:[o.map((t,n)=>(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,onClick:t.onClick,className:(0,eI.cn)("absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur transition-[opacity,transform] duration-150 ease-out",t.pressed&&"border-foreground bg-foreground text-background shadow-lg ring-1 ring-background/50 hover:bg-foreground hover:text-background dark:bg-primary dark:text-primary-foreground dark:hover:bg-primary",e?"pointer-events-auto opacity-100":"pointer-events-none translate-y-1 opacity-0"),style:{transform:e?`translateY(-${(n+1)*42}px)`:void 0},children:t.icon},t.key)),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":n,"aria-expanded":e,onClick:()=>r(!e),className:"absolute inset-0 rounded-full bg-background/95 shadow-md backdrop-blur",children:(0,eb.jsx)(lY,{className:(0,eI.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eec=(0,ek.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function eed({layout:e,layouts:t,cellSize:n,cellHeight:r,dragMode:a,selected:i,resizing:o,onSelect:l,onMove:s,onCut:c,onCopy:d,onSettingsOpen:u,onResizeStart:f,onResizeEnd:h,children:m}){let[p,g]=ew.useState(!1),x=r??n,v=e.x*(n+12),b=e.y*(x+12),y=e.w*n+(e.w-1)*12,w=e.h*x+(e.h-1)*12;return(0,eb.jsxs)("div",{"data-editable-card":e.id,className:(0,eI.cn)("absolute rounded-lg p-1 transition-[left,top,width,height,box-shadow] duration-200 ease-out",a&&"cursor-grab active:cursor-grabbing",p&&"duration-150",i&&!o&&"z-20 shadow-sm",o&&"z-30 transition-none"),style:{left:v,top:b,width:y,height:w},onPointerDown:function(r){if(!a||o)return;let i=r.target;if(i instanceof HTMLElement&&i.closest("[data-editable-card-action]"))return;r.preventDefault(),r.currentTarget.setPointerCapture(r.pointerId),l();let c=r.clientX,d=r.clientY;function u(r){let a=eer({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});een(a,t,e.id)||s(a)}g(!0),window.addEventListener("pointermove",u),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",e),g(!1)})},onClick:()=>{a&&l()},children:[(0,eb.jsx)("div",{className:(0,eI.cn)("size-full",a&&"pointer-events-none"),children:m}),i&&a&&!o?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-1 rounded-lg border-2 border-foreground"}):null,i&&a&&!o?(0,eb.jsx)(eeu,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eef,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function eeu({onSettingsOpen:e,onCut:t,onCopy:n,onResizeStart:r}){return(0,eb.jsx)(l4,{"data-editable-card-action":!0,placement:"inline",size:"sm","aria-label":"卡片操作",className:"!absolute top-full left-1/2 z-40 mt-2 -translate-x-1/2 rounded-lg bg-popover/95 p-1 shadow-md",onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:(0,eb.jsxs)(l3,{children:[(0,eb.jsx)(l6,{type:"button","aria-label":"调整大小",onClick:r,children:(0,eb.jsx)(lX,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"卡片设置",onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),e()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(eec,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"复制",onClick:n,children:(0,eb.jsx)(lU,{className:"size-4"})}),(0,eb.jsx)(l6,{type:"button","aria-label":"剪切",onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),t()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(l0,{className:"size-4"})})]})})}function eef({layout:e,layouts:t,cellSize:n,onResize:r,onResizeEnd:a}){return(0,eb.jsx)("div",{"data-editable-card-action":!0,className:"pointer-events-none absolute inset-1 z-40 border-2 border-foreground",children:[{id:"top-left",className:"top-0 left-0 -translate-x-1/2 -translate-y-1/2 cursor-nwse-resize"},{id:"top",className:"top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 cursor-ns-resize"},{id:"top-right",className:"top-0 right-0 translate-x-1/2 -translate-y-1/2 cursor-nesw-resize"},{id:"right",className:"top-1/2 right-0 translate-x-1/2 -translate-y-1/2 cursor-ew-resize"},{id:"bottom-right",className:"right-0 bottom-0 translate-x-1/2 translate-y-1/2 cursor-nwse-resize"},{id:"bottom",className:"bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 cursor-ns-resize"},{id:"bottom-left",className:"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 cursor-nesw-resize"},{id:"left",className:"top-1/2 left-0 -translate-x-1/2 -translate-y-1/2 cursor-ew-resize"}].map(i=>(0,eb.jsx)("button",{type:"button","aria-label":`调整 ${i.id}`,className:(0,eI.cn)("pointer-events-auto absolute size-2.5 border border-foreground bg-background shadow-sm",i.className),onPointerDown:o=>(function(i,o){i.preventDefault(),i.stopPropagation(),i.currentTarget.setPointerCapture(i.pointerId);let l=i.clientX,s=i.clientY;function c(a){let i=Math.round((a.clientX-l)/(n+12)),c=Math.round((a.clientY-s)/(n+12)),d={...e};o.includes("right")&&(d.w=e.w+i),o.includes("bottom")&&(d.h=e.h+c),o.includes("left")&&(d.x=e.x+i,d.w=e.w-i),o.includes("top")&&(d.y=e.y+c,d.h=e.h-c),een(d=eer(d),t,e.id)||r(d)}window.addEventListener("pointermove",c),window.addEventListener("pointerup",function e(){window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",e),a()})})(o,i.id)},i.id))})}function eeh({className:e,...t}){return(0,eb.jsx)(dT,{"data-slot":"sheet-overlay",className:(0,eI.cn)("vtl-overlay fixed inset-0 z-50 animate-in fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0",e),...t})}function eem({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dI,{children:[(0,eb.jsx)(eeh,{}),(0,eb.jsxs)(dL,{"data-slot":"sheet-content","data-side":n,className:(0,eI.cn)("vtl-surface-modal fixed z-50 flex flex-col gap-4 border transition ease-in-out outline-none data-[state=closed]:animate-out data-[state=closed]:duration-200 data-[state=open]:animate-in data-[state=open]:duration-300","right"===n&&"inset-y-0 right-0 h-full w-3/4 border-r-0 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm","left"===n&&"inset-y-0 left-0 h-full w-3/4 border-l-0 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm","top"===n&&"inset-x-0 top-0 h-auto border-t-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top","bottom"===n&&"inset-x-0 bottom-0 h-auto border-b-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",e),...a,children:[t,r&&(0,eb.jsxs)(dK,{className:"absolute top-3 right-3 inline-flex size-7 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none",children:[(0,eb.jsx)(fg.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eep({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,eI.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeg({className:e,...t}){return(0,eb.jsx)(dH,{"data-slot":"sheet-title",className:(0,eI.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eex({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"sheet-description",className:(0,eI.cn)("text-sm text-muted-foreground",e),...t})}function eev({open:e,layout:t,definition:n,config:r,cellSize:a,onOpenChange:i,onConfigChange:o}){let l=t&&a>0?t.w*a+(t.w-1)*12:320,s=t&&a>0?t.h*a+(t.h-1)*12:180;return(0,eb.jsx)(dC,{open:e,onOpenChange:i,children:(0,eb.jsx)(eem,{side:"right",className:"w-screen gap-0 border-0 bg-transparent p-0 shadow-none sm:max-w-none",children:t&&n&&r?(0,eb.jsxs)("div",{className:"grid h-full min-w-0 grid-cols-1 lg:grid-cols-[minmax(0,1fr)_24rem]",children:[(0,eb.jsx)(eeb,{width:l,height:s,className:"hidden lg:grid",children:n.render(r)}),(0,eb.jsxs)("div",{className:"animate-in slide-in-from-right-4 flex h-full w-full flex-col border-y-0 border-r-0 bg-background text-foreground shadow-lg duration-300",children:[(0,eb.jsxs)(eep,{className:"border-b",children:[(0,eb.jsx)(eeg,{children:"卡片设置"}),(0,eb.jsxs)(eex,{children:[n.title," · ",t.w,"x",t.h]})]}),(0,eb.jsxs)("div",{className:"grid flex-1 content-start gap-4 overflow-y-auto p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"显示标题"}),(0,eb.jsx)(eA,{value:r.title,onChange:e=>o({title:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"数据来源"}),(0,eb.jsx)(eA,{value:r.dataSource,onChange:e=>o({dataSource:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"刷新间隔"}),(0,eb.jsx)(eA,{value:r.refreshRate,onChange:e=>o({refreshRate:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"备注"}),(0,eb.jsx)("textarea",{value:r.note,rows:4,className:"min-h-24 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 ui-text-control transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",onChange:e=>o({note:e.currentTarget.value})})]}),(0,eb.jsxs)("div",{className:"rounded-lg border bg-muted/20 p-3",children:[(0,eb.jsx)("div",{className:"ui-text-control font-medium",children:"当前绑定"}),(0,eb.jsxs)("div",{className:"mt-2 grid gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["类型:",n.id]}),(0,eb.jsxs)("span",{children:["来源:",r.dataSource]}),(0,eb.jsxs)("span",{children:["刷新:",r.refreshRate]})]})]})]})]})]}):null})})}function eeb({width:e,height:t,className:n,children:r}){let[a,i]=XH(),o=i.width>0&&i.height>0?Math.min(1,(i.width-32)/e,(i.height-32)/t):1;return(0,eb.jsx)("div",{ref:a,className:(0,eI.cn)("min-h-0 min-w-0 place-items-center overflow-hidden p-4",n),children:(0,eb.jsx)("div",{className:"animate-in fade-in-0 zoom-in-95 origin-center rounded-lg duration-300",style:{width:e,height:t,transform:`scale(${Math.max(.1,o)})`},children:r})})}function eey({boardId:e,definitions:t,initialLayouts:n,clipboardItems:r=[],minRows:a=9,className:i,actionLabel:o,paletteGroupTitle:l,onClipboardItemsChange:s,onOverlayOpenChange:c}){var d;let[u,f]=ew.useState(!1),[h,m]=ew.useState(!1),[p,g]=ew.useState(!1),[x,v]=ew.useState(()=>n),[b,y]=ew.useState({}),[w,j]=ew.useState(),[k,N]=ew.useState(),[S,C]=ew.useState(),M=ew.useRef(0),E=ew.useRef(0),[O,P]=XH(),z=P.width>0?(d=P.width)<480?2:d<768?4:12:12,I=function(e,t){if(t>=12)return e;let n=[...e].sort((e,t)=>e.y!==t.y?e.y-t.y:e.x-t.x),r=[];for(let e of n){let n=Math.max(2,Math.min(t,Math.round(e.w*t/12))),a=e.h,i=!1;for(let o=0;o<Q9(r)+8&&!i;o+=1)for(let l=0;l<=t-n&&!i;l+=1){let t={...e,x:l,y:o,w:n,h:a};!function(e,t){return t.some(t=>e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y)}(t,r)&&(r.push(t),i=!0)}i||r.push({...e,x:0,y:Q9(r),w:n,h:a})}return r}(x,z),A=P.width>0?(P.width-12*(z-1))/z:96,T=z<12?72:A,R=Math.max(a,eet(I)+2),D=R*T+(R-1)*12,_=ew.useMemo(()=>new Map(t.map(e=>[e.id,e])),[t]);function L(e){let t=_.get(e.kind);return b[e.id]??(t?eei(t):void 0)}function $(e){v(t=>{let n=eer(e);return een(n,t,n.id)?t:t.map(e=>e.id===n.id?n:e)})}function F(e){let t=_.get(e);if(!t)return;E.current+=1;let n=`${e}-added-${E.current}`,r=eea(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eei(t)})),j(n),N(void 0),m(!1)}function B(e,t){let n=x.find(t=>t.id===e),r=n?_.get(n.kind):void 0;n&&r&&y(n=>({...n,[e]:{...n[e]??eei(r),...t}}))}ew.useEffect(()=>{c?.(h||!!S)},[h,c,S]),ew.useEffect(()=>()=>c?.(!1),[c]),ew.useEffect(()=>{p||(j(void 0),N(void 0))},[p]),ew.useEffect(()=>{if(k)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof HTMLElement&&t.closest("[data-editable-card-action]")||(j(k),N(void 0))}},[k]);let V=z<12,H=S?x.find(e=>e.id===S):void 0,U=H?_.get(H.kind):void 0,q=H?L(H):void 0;if(V){let n=[...I].sort((e,t)=>e.y-t.y||e.x-t.x),r=Object.fromEntries(x.map(e=>[e.id,e.w]));return(0,eb.jsxs)(eee,{children:[(0,eb.jsx)("div",{ref:O,"data-editable-card-board":e,className:(0,eI.cn)("mx-auto max-w-7xl p-3",i),children:(0,eb.jsx)("div",{className:"grid grid-cols-2 gap-3",children:n.map(e=>{let t=_.get(e.kind);if(!t)return null;let n=L(e);if(!n)return null;let a=(r[e.id]??e.w)>6;return(0,eb.jsx)("div",{className:(0,eI.cn)("min-w-0 overflow-hidden rounded-lg",a&&"col-span-2"),style:{minHeight:a?200:120},children:t.render(n)},e.id)})})}),(0,eb.jsx)(ees,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eel,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eev,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(eee,{children:[(0,eb.jsx)("div",{ref:O,"data-editable-card-board":e,className:(0,eI.cn)("relative mx-auto max-w-7xl p-4 lg:p-6",p&&"select-none",i),style:{minHeight:D+48},onDragOver:e=>{Array.from(e.dataTransfer.types).includes(G4)&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},onDrop:function(e){let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id");if(!t)return;let n=r.find(e=>e.id===t),a=n&&eeo(n);if(!n||!a||!_.has(a.kind))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let i=O.current,o=i?.getBoundingClientRect();!function(e,t){let n=eeo(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eer({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eet(x),w:n.w,h:n.h}),i=t&&!een(a,x)?a:eea(x,r,n.kind,n.w,n.h);v(e=>[...e,i]),y(e=>({...e,[r]:{...n.config}})),j(r),N(void 0)}(n,{x:o&&A>0?Math.round((e.clientX-o.left-24)/(A+12)):0,y:o&&A>0?Math.round((e.clientY-o.top-24)/(A+12)):eet(x)})},onPointerDown:e=>{e.target===e.currentTarget&&(j(void 0),p||N(void 0))},children:(0,eb.jsx)("div",{className:"relative",style:{height:D},children:I.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eed,{layout:t,layouts:I,cellSize:A,cellHeight:T,dragMode:p,selected:w===t.id,resizing:k===t.id,onSelect:()=>{p&&j(t.id)},onMove:$,onCut:()=>(function(t){let n=x.find(e=>e.id===t),r=n?_.get(n.kind):void 0,a=n?L(n):void 0;if(!n||!r||!a)return;let i=function({boardId:e,layout:t,definition:n,config:r}){let a={boardId:e,kind:t.kind,w:t.w,h:t.h,config:{...r}};return{id:`clip-${e}-${t.id}`,title:r.title||n.title,description:n.description,meta:`${t.w}x${t.h}`,icon:n.icon,dragData:{"application/vnd.vantaloom.clip-kind":"workspace-card","application/vnd.vantaloom.workspace-card-board":e,"application/vnd.vantaloom.workspace-card-kind":t.kind,"application/vnd.vantaloom.workspace-card-width":String(t.w),"application/vnd.vantaloom.workspace-card-height":String(t.h),"application/vnd.vantaloom.workspace-card-config":JSON.stringify(r),[G4]:JSON.stringify(a)},payloads:{[G4]:a}}}({boardId:e,layout:n,definition:r,config:a});s?.(e=>[i,...e.filter(e=>e.id!==i.id)]),v(e=>e.filter(e=>e.id!==t)),y(e=>{let n={...e};return delete n[t],n}),j(void 0),N(void 0),C(e=>e===t?void 0:e)})(t.id),onCopy:()=>(function(e){let t=x.find(t=>t.id===e),n=t?_.get(t.kind):void 0;if(!t||!n)return;M.current+=1;let r=`${e}-copy-${M.current}`,a=eea(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eei(n)})),j(r)})(t.id),onSettingsOpen:()=>C(t.id),onResizeStart:()=>{j(void 0),N(t.id)},onResizeEnd:()=>{j(t.id),N(void 0)},children:n.render(r)},t.id):null})})}),(0,eb.jsx)(ees,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eel,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eev,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eew({parts:e}){return(0,eb.jsx)(eb.Fragment,{children:e.map((e,t)=>(0,eb.jsx)("span",{className:e.small?"text-[0.55em]":void 0,children:e.text},`${e.text}-${t}`))})}function eej({value:e,minSize:t=24,maxSize:n=180,className:r,...a}){let i=ew.useRef(null),o=ew.useRef(null),[l,s]=ew.useState(t),c=function(e){let t=e.trim();if(/^[$¥€]\s*\d/.test(t))return[{text:t.replace(/^[$¥€]\s*/,""),small:!1},{text:t[0]??"",small:!0}];let n=t.match(/^(.+?)\s*\/\s*(.+)$/);if(n)return[{text:n[1]??"",small:!1},{text:"/",small:!0},{text:n[2]??"",small:!1}];let r=t.match(/^(.+?)([%a-zA-Z$¥€]+)$/);return r?[{text:r[1]??t,small:!1},{text:r[2]??"",small:!0}]:[{text:t,small:!1}]}(e);return ew.useLayoutEffect(()=>{let e=i.current,r=o.current;if(!e||!r)return;function a(e,r){let a=e.clientWidth,i=e.clientHeight;if(a<=0||i<=0)return;let o=t,l=n,c=t;for(;o<=l;){let e=Math.floor((o+l)/2);r.style.fontSize=`${e}px`,r.getBoundingClientRect().width<=a&&r.getBoundingClientRect().height<=i?(c=e,o=e+1):l=e-1}s(c)}a(e,r);let l=new ResizeObserver(()=>a(e,r));return l.observe(e),()=>l.disconnect()},[n,t,e]),(0,eb.jsxs)("div",{ref:i,className:(0,eI.cn)("relative min-h-0 min-w-0 overflow-hidden",r),...a,children:[(0,eb.jsx)("span",{ref:o,"aria-hidden":"true",className:"pointer-events-none invisible absolute right-0 bottom-0 flex items-baseline whitespace-nowrap font-semibold leading-none tracking-normal",children:(0,eb.jsx)(eew,{parts:c})}),(0,eb.jsx)("span",{className:"absolute right-0 bottom-0 flex max-w-full items-baseline whitespace-nowrap font-semibold leading-none tracking-normal text-foreground",style:{fontSize:l},children:(0,eb.jsx)(eew,{parts:c})})]})}function eek(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeN({label:e,value:t,minSize:n=42,maxSize:r=180,valueClassName:a="absolute right-0 bottom-0 h-2/3 w-full"}){return(0,eb.jsxs)("div",{className:"relative h-full min-h-0",children:[(0,eb.jsx)("div",{className:"text-xl font-semibold tracking-normal",children:e}),(0,eb.jsx)(eej,{value:eek(t),minSize:n,maxSize:r,className:a})]})}function eeS(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeC({className:e,value:t=0,...n}){let r=eeS(t);return(0,eb.jsx)("div",{"data-slot":"progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,className:(0,eI.cn)("relative h-1.5 w-full overflow-hidden rounded-full bg-muted",e),...n,children:(0,eb.jsx)("div",{"data-slot":"progress-indicator",className:"h-full rounded-full bg-primary transition-all",style:{width:`${r}%`}})})}function eeM({className:e,value:t=0,label:n,showValue:r=!0,...a}){let i=eeS(t),o=2*Math.PI*39;return(0,eb.jsxs)("div",{"data-slot":"progress-ring","aria-label":n?`${n} ${i}%`:`${i}%`,role:"img",className:(0,eI.cn)("relative grid size-24 place-items-center",e),...a,children:[(0,eb.jsxs)("svg",{"aria-hidden":"true","data-slot":"progress-ring-svg",viewBox:"0 0 100 100",className:"absolute inset-0 size-full overflow-visible",children:[(0,eb.jsx)("circle",{cx:"50",cy:"50",r:39,fill:"none",stroke:"var(--muted)",strokeWidth:12}),i>0&&(0,eb.jsx)("circle",{cx:"50",cy:"50",r:39,fill:"none",stroke:"var(--primary)",strokeDasharray:o,strokeDashoffset:o-i/100*o,strokeLinecap:"round",strokeWidth:12,className:"origin-center -rotate-90 transition-all"})]}),(0,eb.jsx)("div",{"data-slot":"progress-ring-center",className:"relative z-10 grid size-16 place-items-center rounded-full bg-card",children:r&&(0,eb.jsxs)("span",{className:"ui-text-control font-medium tabular-nums",children:[i,"%"]})})]})}(0,ek.default)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);let eeE=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function eeO({canvases:e,mode:t="active",scrollable:n=!1,onSelect:r}){let a=ew.useMemo(()=>e.map(e=>{var n;return{id:e.id,status:"live"===(n=e).status?"current":"review"===n.status?"blocked":"done",title:(0,eb.jsx)(eeP,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(Q0,{items:a,scrollCurrentIntoView:!1,className:(0,eI.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,eI.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function eeP({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("grid w-full items-center gap-4 rounded-lg px-2 py-0 text-left transition-colors hover:bg-muted/50","active"===n?"grid-cols-[minmax(0,1fr)_8rem_1.75rem]":"grid-cols-[minmax(0,1fr)_7rem_7rem_8rem]"),onClick:t,children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("div",{className:"truncate text-xs text-muted-foreground",children:"active"===n?e.purpose:`${e.nodes} nodes`})]}),"active"===n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeC,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,eI.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eez,{icon:(0,eb.jsx)(Vk,{}),value:`${e.snapshots}`}),(0,eb.jsx)(eez,{icon:(0,eb.jsx)(eeE,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function eez({icon:e,value:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e}),(0,eb.jsx)("span",{className:"tabular-nums",children:t})]})}let eeI=(0,ek.default)("memory-stick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]),eeA=(0,ek.default)("radio-tower",[["path",{d:"M4.9 16.1C1 12.2 1 5.8 4.9 1.9",key:"s0qx1y"}],["path",{d:"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5",key:"1idnkw"}],["circle",{cx:"12",cy:"9",r:"2",key:"1092wv"}],["path",{d:"M16.2 4.8c2 2 2.26 5.11.8 7.47",key:"ojru2q"}],["path",{d:"M19.1 1.9a9.96 9.96 0 0 1 0 14.1",key:"rhi7fg"}],["path",{d:"M9.5 18h5",key:"mfy3pd"}],["path",{d:"m8 22 4-11 4 11",key:"25yftu"}]]),eeT=(0,ek.default)("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);var eeR=ew;function eeD(){return(eeD=Object.assign.bind()).apply(null,arguments)}function ee_(e){return ew.createElement(Rf,eeD({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var eeL=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kv(e))return e;var a=kv(n)||null==n;return a?e(n,r):(a||function(e,t){if(!e)throw Error("Invariant failed")}(!1,"minPointSize callback function received a value with type of ".concat(typeof n,". Currently only numbers or null/undefined are supported.")),t)}},ee$=["children"],eeF=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function eeB(e){var{children:t}=e,n=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,ee$);return ew.createElement(eeF.Provider,{value:n},t)}var eeV=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kj(r,t,0)};function eeH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eeU(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eeH(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eeH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var eeq=j3([PY,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),eeW=j3([eeq],e=>null==e?void 0:e.maxBarSize),eeK=j3([Ck,PY,Yw,Yj,(e,t,n)=>n],(e,t,n,r,a)=>t.filter(t=>"horizontal"===e?t.xAxisId===n:t.yAxisId===r).filter(e=>e.isPanorama===a).filter(e=>!1===e.hide).filter(e=>"bar"===e.type)),eeG=j3([eeK,e=>e.rootProps.barSize,(e,t)=>{var n=Ck(e),r=Yw(e,t),a=Yj(e,t);if(null!=r&&null!=a)return"horizontal"===n?Is(e,"xAxis",r):Is(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Md),a=e.filter(e=>null==e.stackId);return[...Object.entries(r.reduce((e,t)=>{var n=e[t.stackId];return null==n&&(n=[]),n.push(t),e[t.stackId]=n,e},{})).map(e=>{var r,[a,i]=e;return{stackId:a,dataKeys:i.map(e=>e.dataKey),barSize:eeV(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eeV(t,n,e.barSize)}))]}),eeX=(e,t,n)=>{var r,a,i=Ck(e),o=Yw(e,t),l=Yj(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=Im(e,"xAxis",o,n),a=Ih(e,"xAxis",o,n)):(r=Im(e,"yAxis",l,n),a=Ih(e,"yAxis",l,n)),kU(r,a)},eeY=j3([eeG,C$,e=>e.rootProps.barGap,CF,(e,t,n)=>{var r,a,i,o,l=eeq(e,t);if(null==l)return 0;var s=Yw(e,t),c=Yj(e,t);if(null==s||null==c)return 0;var d=Ck(e),u=C$(e),{maxBarSize:f}=l;return"horizontal"===d?(i=Im(e,"xAxis",s,n),o=Ih(e,"xAxis",s,n)):(i=Im(e,"yAxis",c,n),o=Ih(e,"yAxis",c,n)),null!=(r=null!=(a=kU(i,o,!0))?a:null==f?u:f)?r:0},eeX,eeW],(e,t,n,r,a,i,o)=>{var l=function(e,t,n,r,a){var i,o,l=r.length;if(!(l<1)){var s=kj(e,n,0,!0),c=[];if(kP(null==(i=r[0])?void 0:i.barSize)){var d=!1,u=n/l,f=r.reduce((e,t)=>e+(t.barSize||0),0);(f+=(l-1)*s)>=n&&(f-=(l-1)*s,s=0),f>=n&&u>0&&(d=!0,u*=.9,f=l*u);var h={offset:((n-f)/2|0)-s,size:0};o=r.reduce((e,t)=>{var n,r={stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:h.offset+h.size+s,size:d?u:null!=(n=t.barSize)?n:0}},a=[...e,r];return h=r.position,a},c)}else{var m=kj(t,n,0,!0);n-2*m-(l-1)*s<=0&&(s=0);var p=(n-2*m-(l-1)*s)/l;p>1&&(p>>=0);var g=kP(a)?Math.min(p,a):p;o=r.reduce((e,t,n)=>[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:m+(p+s)*n+(p-g)/2,size:g}}],c)}return o}}(n,r,a!==i?a:i,e,null==o?t:o);return a!==i&&null!=l&&(l=l.map(e=>eeU(eeU({},e),{},{position:eeU(eeU({},e.position),{},{offset:e.position.offset-a/2})}))),l}),eeZ=j3([eeY,eeq],(e,t)=>{if(null!=e&&null!=t){var n=e.find(e=>e.stackId===t.stackId&&null!=t.dataKey&&e.dataKeys.includes(t.dataKey));if(null!=n)return n.position}}),eeJ=j3([(e,t,n)=>{var r=Ck(e),a=Yw(e,t),i=Yj(e,t);if(null!=a&&null!=i)return"horizontal"===r?zu(e,"yAxis",i,n):zu(e,"xAxis",a,n)},eeq],(e,t)=>{var n=Ms(t);if(!e||null==n||null==t)return;var{stackId:r}=t;if(null!=r){var a=e[r];if(a){var{stackedData:i}=a;if(i)return i.find(e=>e.key===n)}}}),eeQ=j3([k5,k3,(e,t,n)=>{var r=Yw(e,t);if(null!=r)return Im(e,"xAxis",r,n)},(e,t,n)=>{var r=Yj(e,t);if(null!=r)return Im(e,"yAxis",r,n)},(e,t,n)=>{var r=Yw(e,t);if(null!=r)return Ih(e,"xAxis",r,n)},(e,t,n)=>{var r=Yj(e,t);if(null!=r)return Ih(e,"yAxis",r,n)},eeZ,Ck,ke,eeX,eeJ,eeq,(e,t,n,r)=>r],(e,t,n,r,a,i,o,l,s,c,d,u,f)=>{var h,{chartData:m,dataStartIndex:p,dataEndIndex:g}=s;if(null!=u&&null!=o&&null!=t&&("horizontal"===l||"vertical"===l)&&null!=n&&null!=r&&null!=a&&null!=i&&null!=c){var{data:x}=u;if(null!=(h=null!=x&&x.length>0?x:null==m?void 0:m.slice(p,g+1)))return function(e){var{layout:t,barSettings:{dataKey:n,minPointSize:r,hasCustomShape:a},pos:i,bandSize:o,xAxis:l,yAxis:s,xAxisTicks:c,yAxisTicks:d,stackedData:u,displayedData:f,offset:h,cells:m,parentViewBox:p,dataStartIndex:g}=e,x="horizontal"===t?s:l,v=u?x.scale.domain():null,b=(e=>{var{numericAxis:t}=e,n=t.scale.domain();if("number"===t.type){var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]);return r<=0&&a>=0?0:a<0?a:r}return n[0]})({numericAxis:x}),y=x.scale.map(b);return f.map((e,f)=>{if(u){var x=u[f+g];if(null==x)return null;j=((e,t)=>{if(!t||2!==t.length||!kv(t[0])||!kv(t[1]))return e;var n=Math.min(t[0],t[1]),r=Math.max(t[0],t[1]),a=[e[0],e[1]];return(!kv(e[0])||e[0]<n)&&(a[0]=n),(!kv(e[1])||e[1]>r)&&(a[1]=r),a[0]>r&&(a[0]=r),a[1]<n&&(a[1]=n),a})(x,v)}else Array.isArray(j=kT(e,n))||(j=[b,j]);var w=eeL(r,0)(j[1],f);if("horizontal"===t){var j,k,N,S,C,M,E,O=s.scale.map(j[0]),P=s.scale.map(j[1]);if(null==O||null==P)return null;k=kB({axis:l,ticks:c,bandSize:o,offset:i.offset,entry:e,index:f}),N=null!=(E=null!=P?P:O)?E:void 0,S=i.size;var z=O-P;if(C=kg(z)?0:z,M={x:k,y:h.top,width:S,height:h.height},Math.abs(w)>0&&Math.abs(C)<Math.abs(w)){var I=kp(C||w)*(Math.abs(w)-Math.abs(C));N-=I,C+=I}}else{var A=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==A||null==T)return null;if(k=A,N=kB({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-A,C=i.size,M={x:h.left,y:N,width:h.width,height:C},Math.abs(w)>0&&Math.abs(S)<Math.abs(w)){var R=kp(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?eto(eto({},e),{},{stackedBarStart:y,x:k,y:N,width:S,height:C,value:u?j:j[1],payload:e,background:M,tooltipPosition:{x:k+S/2,y:N+C/2},parentViewBox:p,originalDataIndex:f},m&&m[f]&&m[f].props):null}).filter(Boolean)}({layout:l,barSettings:u,pos:o,parentViewBox:t,bandSize:c,xAxis:n,yAxis:r,xAxisTicks:a,yAxisTicks:i,stackedData:d,displayedData:h,offset:e,cells:f,dataStartIndex:p})}}),ee0=(e,t)=>t,ee1=(e,t,n)=>n,ee2=j3([ee0,PY,ee1],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),ee5=j3([ee2],e=>e.map(e=>e.id)),ee4=j3([e=>e,ee0,ee1],(e,t,n)=>{var r=ee5(e,t,n),a=[];return r.forEach(t=>{var r=eeQ(e,t,n,void 0);null==r||r.forEach(e=>{var t=e.originalDataIndex;a[t]=((e,t)=>{if(!e)return t;if(!t)return e;var n=Math.min(e.x,e.x+e.width,t.x,t.x+t.width),r=Math.min(e.y,e.y+e.height,t.y,t.y+t.height);return{x:n,y:r,width:Math.max(e.x,e.x+e.width,t.x,t.x+t.width)-n,height:Math.max(e.y,e.y+e.height,t.y,t.y+t.height)-r}})(a[t],e)})}),a}),ee3=["index"];function ee6(){return(ee6=Object.assign.bind()).apply(null,arguments)}var ee8=(0,ew.createContext)(void 0),ee7=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),ee9=e=>{var{index:t}=e,n=function(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,ee3),r=(e=>{var t=(0,ew.useContext)(ee8);if(null!=t){var{stackId:n}=t;return"url(#".concat(ee7(n,e),")")}})(t);return ew.createElement(IG,ee6({className:"recharts-bar-stack-layer",clipPath:r},n))},ete=["onMouseEnter","onMouseLeave","onClick"],ett=["value","background","tooltipPosition"],etn=["id"],etr=["onMouseEnter","onClick","onMouseLeave"];function eta(){return(eta=Object.assign.bind()).apply(null,arguments)}function eti(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eto(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eti(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eti(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etl(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ets=eeR.memo(e=>{var{dataKey:t,stroke:n,strokeWidth:r,fill:a,name:i,hide:o,unit:l,tooltipType:s,id:c}=e,d={dataDefinedOnItem:void 0,getPosition:kE,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:kW(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return eeR.createElement(Dl,{tooltipEntrySettings:d})});function etc(e){var t,n=Nr(_t),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etl(o,ete),u=Da(l,a,o.id),f=Di(s),h=Do(c,a,o.id);if(!i||null==r)return null;var m=IU(i);return eeR.createElement(_q,{zIndex:(t=CJ.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kP(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etl(e,ett);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=eto(eto(eto(eto(eto({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),Ap(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return eeR.createElement(ee_,eta({key:"background-bar-".concat(t)},x))}))}function etd(e){var{showLabels:t,children:n,rects:r}=e,a=null==r?void 0:r.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return eto(eto({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return eeR.createElement(Li,{value:t?a:void 0},n)}function etu(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=Nr(_t),c=Nr(_r),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,eeR.useState)(!1),[h,m]=(0,eeR.useState)(!1);(0,eeR.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,eeR.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=eeR.createElement(ee_,eta({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?eeR.createElement(_q,{zIndex:CJ.activeBar},eeR.createElement(ee9,{index:i.originalDataIndex},v)):v}function etf(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return eeR.createElement(ee_,eta({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function eth(e){var t,{data:n,props:r}=e,a=null!=(t=IH(r))?t:{},{id:i}=a,o=etl(a,etn),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etl(r,etr),m=Da(d,s,i),p=Di(f),g=Do(u,s,i);return n?eeR.createElement(eeR.Fragment,null,n.map((e,t)=>eeR.createElement(ee9,eta({index:e.originalDataIndex,key:"rectangle-".concat(null==e?void 0:e.x,"-").concat(null==e?void 0:e.y,"-").concat(null==e?void 0:e.value,"-").concat(t),className:"recharts-bar-rectangle"},Ap(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?eeR.createElement(etu,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):eeR.createElement(etf,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etm(e){var{props:t,previousRectanglesRef:n}=e,{data:r,layout:a,isAnimationActive:i,animationBegin:o,animationDuration:l,animationEasing:s,onAnimationEnd:c,onAnimationStart:d}=t,u=n.current,f=TC(t,"recharts-bar-"),[h,m]=(0,eeR.useState)(!1),p=(0,eeR.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,eeR.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return eeR.createElement(etd,{showLabels:!h,rects:r},eeR.createElement(TS,{animationId:f,begin:o,duration:l,isActive:i,easing:s,onAnimationEnd:p,onAnimationStart:g,key:f},e=>{var i=1===e?r:null==r?void 0:r.map((t,n)=>{var r=u&&u[n];if(r)return eto(eto({},t),{},{x:kN(r.x,t.x,e),y:kN(r.y,t.y,e),width:kN(r.width,t.width,e),height:kN(r.height,t.height,e)});if("horizontal"===a){var i=kN(0,t.height,e),o=kN(t.stackedBarStart,t.y,e);return eto(eto({},t),{},{y:o,height:i})}var l=kN(0,t.width,e),s=kN(t.stackedBarStart,t.x,e);return eto(eto({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:eeR.createElement(IG,null,eeR.createElement(eth,{props:t,data:i}))}),eeR.createElement(Lc,{label:t.label}),t.children)}function etp(e){var t=(0,eeR.useRef)(null);return eeR.createElement(etm,{previousRectanglesRef:t,props:e})}var etg=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:kT(e,t)}};class etx extends eeR.PureComponent{render(){var{hide:e,data:t,dataKey:n,className:r,xAxisId:a,yAxisId:i,needClip:o,background:l,id:s}=this.props;if(e||null==t)return null;var c=(0,jB.clsx)("recharts-bar",r);return eeR.createElement(IG,{className:c,id:s},o&&eeR.createElement("defs",null,eeR.createElement(Yy,{clipPathId:s,xAxisId:a,yAxisId:i})),eeR.createElement(IG,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},eeR.createElement(etc,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),eeR.createElement(etp,this.props)))}}var etv={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:"ease",background:!1,hide:!1,isAnimationActive:"auto",label:!1,legendType:"rect",minPointSize:0,xAxisId:0,yAxisId:0,zIndex:CJ.bar};function etb(e){var t,{xAxisId:n,yAxisId:r,hide:a,legendType:i,minPointSize:o,activeBar:l,animationBegin:s,animationDuration:c,animationEasing:d,isAnimationActive:u}=e,{needClip:f}=Yb(n,r),h=Nr(Ck),m=S7(),p=Tt(e.children,A3),g=Nr(t=>eeQ(t,e.id,m,p));if("vertical"!==h&&"horizontal"!==h)return null;var x=null==g?void 0:g[0];return t=null==x||null==x.height||null==x.width?0:"vertical"===h?x.height/2:x.width/2,eeR.createElement(eeB,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etg,errorBarOffset:t},eeR.createElement(etx,eta({},e,{layout:h,needClip:f,data:g,xAxisId:n,yAxisId:r,hide:a,legendType:i,minPointSize:o,activeBar:l,animationBegin:s,animationDuration:c,animationEasing:d,isAnimationActive:u})))}eeR.memo(function(e){var t,n,r=AU(e,etv),a=(t=r.stackId,null!=(n=(0,ew.useContext)(ee8))?n.stackId:null!=t?k$(t):void 0),i=S7();return eeR.createElement(_j,{id:r.id,type:"bar"},e=>eeR.createElement(eeR.Fragment,null,eeR.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kW(n,t),payload:e}]})(r)}),eeR.createElement(ets,{dataKey:r.dataKey,stroke:r.stroke,strokeWidth:r.strokeWidth,fill:r.fill,name:r.name,hide:r.hide,unit:r.unit,tooltipType:r.tooltipType,id:e}),eeR.createElement(_z,{type:"bar",id:e,data:void 0,xAxisId:r.xAxisId,yAxisId:r.yAxisId,zAxisId:0,dataKey:r.dataKey,stackId:a,hide:r.hide,barSize:r.barSize,minPointSize:r.minPointSize,maxBarSize:r.maxBarSize,isPanorama:i,hasCustomShape:null!=r.shape}),eeR.createElement(_q,{zIndex:r.zIndex},eeR.createElement(etb,eta({},r,{id:e})))))},Fk).displayName="Bar";let ety=(0,ek.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);function etw({label:e,description:t,value:n}){return(0,eb.jsxs)("div",{className:"relative h-full min-h-0",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("div",{className:"text-xl font-semibold tracking-normal",children:e}),(0,eb.jsx)("div",{className:"mt-1 text-sm leading-5 text-muted-foreground",children:t})]}),(0,eb.jsx)(eej,{value:eek(n),minSize:48,maxSize:220,className:"absolute right-0 bottom-0 h-2/3 w-full"})]})}(0,ek.default)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);var etj=ew,etk=(e,t,n,r)=>Im(e,"xAxis",t,r),etN=(e,t,n,r)=>Ih(e,"xAxis",t,r),etS=(e,t,n,r)=>Im(e,"yAxis",n,r),etC=(e,t,n,r)=>Ih(e,"yAxis",n,r),etM=j3([Ck,etk,etS,etN,etC],(e,t,n,r,a)=>kR(e,"xAxis")?kU(t,r,!1):kU(n,a,!1));function etE(e){return"line"===e.type}var etO=j3([PY,(e,t,n,r,a)=>a],(e,t)=>e.filter(etE).find(e=>e.id===t)),etP=j3([Ck,etk,etS,etN,etC,etO,etM,j9],(e,t,n,r,a,i,o,l)=>{var s,{chartData:c,dataStartIndex:d,dataEndIndex:u}=l;if(null!=i&&null!=t&&null!=n&&null!=r&&null!=a&&0!==r.length&&0!==a.length&&null!=o&&("horizontal"===e||"vertical"===e)){var{dataKey:f,data:h}=i;if(null!=(s=null!=h&&h.length>0?h:null==c?void 0:c.slice(d,u+1)))return function(e){var{layout:t,xAxis:n,yAxis:r,xAxisTicks:a,yAxisTicks:i,dataKey:o,bandSize:l,displayedData:s}=e;return s.map((e,s)=>{var c=kT(e,o);if("horizontal"===t){var d=kF({axis:n,ticks:a,bandSize:l,entry:e,index:s}),u=null==c?null:r.scale.map(c);return{x:d,y:null!=u?u:null,value:c,payload:e}}var f=null==c?null:n.scale.map(c),h=kF({axis:r,ticks:i,bandSize:l,entry:e,index:s});return null==f||null==h?null:{x:f,y:h,value:c,payload:e}}).filter(Boolean)}({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:a,dataKey:f,bandSize:o,displayedData:s})}}),etz=["id"],etI=["type","layout","connectNulls","needClip","shape"],etA=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function etT(){return(etT=Object.assign.bind()).apply(null,arguments)}function etR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function etD(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etR(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):etR(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function et_(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n={};for(var r in e)if(({}).hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],-1===t.indexOf(n)&&({}).propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var etL=etj.memo(e=>{var{dataKey:t,data:n,stroke:r,strokeWidth:a,fill:i,name:o,hide:l,unit:s,tooltipType:c,id:d}=e,u={dataDefinedOnItem:n,getPosition:kE,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kW(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etj.createElement(Dl,{tooltipEntrySettings:u})}),et$=(e,t)=>"".concat(t,"px ").concat(e,"px");function etF(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=IH(et_(r,etz));return etj.createElement(Ym,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function etB(e){var{showLabels:t,children:n,points:r}=e,a=(0,etj.useMemo)(()=>null==r?void 0:r.map(e=>{var t,n,r={x:null!=(t=e.x)?t:0,y:null!=(n=e.y)?n:0,width:0,lowerWidth:0,upperWidth:0,height:0};return etD(etD({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etj.createElement(Li,{value:t?a:void 0},n)}function etV(e){var{clipPathId:t,pathRef:n,points:r,strokeDasharray:a,props:i}=e,{type:o,layout:l,connectNulls:s,needClip:c,shape:d}=i,u=etD(etD({},Iq(et_(i,etI))),{},{fill:"none",className:"recharts-line-curve",clipPath:c?"url(#clipPath-".concat(t,")"):void 0,points:r,type:o,layout:l,connectNulls:s,strokeDasharray:null!=a?a:i.strokeDasharray});return etj.createElement(etj.Fragment,null,(null==r?void 0:r.length)>1&&etj.createElement(Rf,etT({shapeType:"curve",option:d},u,{pathRef:n})),etj.createElement(etF,{points:r,clipPathId:t,props:i}))}function etH(e){var{clipPathId:t,props:n,pathRef:r,previousPointsRef:a,longestAnimatedLengthRef:i}=e,{points:o,strokeDasharray:l,isAnimationActive:s,animationBegin:c,animationDuration:d,animationEasing:u,animateNewValues:f,width:h,height:m,onAnimationEnd:p,onAnimationStart:g}=n,x=a.current,v=TC(o,"recharts-line-"),b=(0,etj.useRef)(v),[y,w]=(0,etj.useState)(!1),j=(0,etj.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etj.useCallback)(()=>{"function"==typeof g&&g(),w(!0)},[g]),N=function(e){try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}(r.current),S=(0,etj.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etj.createElement(etB,{points:o,showLabels:!y},n.children,etj.createElement(TS,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kN(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return et$(t,e);for(var a=Math.floor(e/r),i=e%r,o=[],l=0,s=0;l<n.length;s+=null!=(c=n[l])?c:0,++l){var c,d=n[l];if(null!=d&&s+d>i){o=[...n.slice(0,l),i-s];break}}var u=o.length%2==0?[0,t]:[t];return[...function(e,t){for(var n=e.length%2!=0?[...e,0]:e,r=[],a=0;a<t;++a)r.push(...n);return r}(n,a),...o,...u].map(e=>"".concat(e,"px")).join(", ")})(d,N,"".concat(l).split(/[,\s]+/gim).map(e=>parseFloat(e))):et$(N,d):null==l?void 0:String(l),e>0&&N>0&&(a.current=o,i.current=Math.max(i.current,d)),x){var u=x.length/o.length,p=1===e?o:o.map((t,n)=>{var r=Math.floor(n*u);if(x[r]){var a=x[r];return etD(etD({},t),{},{x:kN(a.x,t.x,e),y:kN(a.y,t.y,e)})}return f?etD(etD({},t),{},{x:kN(2*h,t.x,e),y:kN(m/2,t.y,e)}):etD(etD({},t),{},{x:t.x,y:t.y})});return a.current=p,etj.createElement(etV,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etj.createElement(etV,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etj.createElement(Lc,{label:n.label}))}function etU(e){var{clipPathId:t,props:n}=e,r=(0,etj.useRef)(null),a=(0,etj.useRef)(0),i=(0,etj.useRef)(null);return etj.createElement(etH,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:a,pathRef:i})}var etq=(e,t)=>{var n,r;return{x:null!=(n=e.x)?n:void 0,y:null!=(r=e.y)?r:void 0,value:e.value,errorVal:kT(e.payload,t)}};class etW extends etj.Component{render(){var{hide:e,dot:t,points:n,className:r,xAxisId:a,yAxisId:i,top:o,left:l,width:s,height:c,id:d,needClip:u,zIndex:f}=this.props;if(e)return null;var h=(0,jB.clsx)("recharts-line",r),{r:m,strokeWidth:p}=YI(t),g=Tn(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etj.createElement(_q,{zIndex:f},etj.createElement(IG,{className:h},u&&etj.createElement("defs",null,etj.createElement(Yy,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etj.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etj.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etj.createElement(eeB,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:etq,errorBarOffset:0},etj.createElement(etU,{props:this.props,clipPathId:d}))),etj.createElement(Yv,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var etK={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:"auto",label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:CJ.line,type:"linear"};function etG(e){var t=AU(e,etK),{activeDot:n,animateNewValues:r,animationBegin:a,animationDuration:i,animationEasing:o,connectNulls:l,dot:s,hide:c,isAnimationActive:d,label:u,legendType:f,xAxisId:h,yAxisId:m,id:p}=t,g=et_(t,etA),{needClip:x}=Yb(h,m),v=Nr(F3),b=Nr(Ck),y=S7(),w=Nr(e=>etP(e,h,m,y,p));if("horizontal"!==b&&"vertical"!==b||null==w||null==v)return null;var{height:j,width:k,x:N,y:S}=v;return etj.createElement(etW,etT({},g,{id:p,connectNulls:l,dot:s,activeDot:n,animateNewValues:r,animationBegin:a,animationDuration:i,animationEasing:o,isAnimationActive:d,hide:c,label:u,legendType:f,xAxisId:h,yAxisId:m,points:w,layout:b,height:j,width:k,left:N,top:S,needClip:x}))}var etX=etj.memo(function(e){var t=AU(e,etK),n=S7();return etj.createElement(_j,{id:t.id,type:"line"},e=>etj.createElement(etj.Fragment,null,etj.createElement(_v,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kW(n,t),payload:e}]})(t)}),etj.createElement(etL,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:e}),etj.createElement(_z,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etj.createElement(etG,etT({},t,{id:e}))))},Fk);etX.displayName="Line";var etY=["axis"],etZ=(0,ew.forwardRef)((e,t)=>ew.createElement(Y2,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:etY,tooltipPayloadSearcher:LO,categoricalChartProps:e,ref:t}));let etJ={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},etQ={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},et0={topologyNode:function({data:e}){return(0,eb.jsxs)("div",{className:"vtl-surface-card min-w-36 rounded-[var(--surface-card-radius)] border px-3 py-2",children:[(0,eb.jsx)(ov,{type:"target",position:D.Top,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"source",position:D.Bottom,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"target",position:D.Left,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(ov,{type:"source",position:D.Right,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2.5 shrink-0 rounded-full",etJ[e.state])}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-medium",children:e.label})]}),e.meta?(0,eb.jsx)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:e.meta}):null]})}},et1={topologyEdge:function({id:e,sourceX:t,sourceY:n,targetX:r,targetY:a,sourcePosition:i,targetPosition:o,data:l}){let[s]=aE({sourcePosition:i,sourceX:t,sourceY:n,targetPosition:o,targetX:r,targetY:a}),{x:c,y:d}=function(e){if("u"<typeof document)return{x:0,y:0};let t=document.createElementNS("http://www.w3.org/2000/svg","path");t.setAttribute("d",e);let n=t.getTotalLength(),r=t.getPointAtLength(n/2);return{x:r.x,y:r.y}}(s),u=l?.kind??"direct";return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(oL,{id:e,path:s,className:(0,eI.cn)("fill-none",etQ[u],"p2p"===u&&"stroke-dasharray-[8_6]","relay"===u&&"stroke-dasharray-[12_8]"),style:{strokeWidth:"down"===u?3:2.4,strokeLinecap:"round",strokeLinejoin:"round"}}),(l?.label||l?.meta)&&(0,eb.jsx)("foreignObject",{x:c-48,y:d-20,width:96,height:40,className:"overflow-visible",requiredExtensions:"http://www.w3.org/1999/xhtml",children:(0,eb.jsxs)("div",{className:"pointer-events-none grid h-10 w-24 content-center rounded-md border bg-background/95 px-2 py-1 text-center shadow-sm",children:[l.label?(0,eb.jsx)("div",{className:"truncate text-xs font-medium leading-4",children:l.label}):null,l.meta?(0,eb.jsx)("div",{className:"truncate ui-text-kbd text-muted-foreground",children:l.meta}):null]})})]})}};function et2({nodes:e,links:t,className:n,...r}){let a=ew.useMemo(()=>e.map(e=>({id:e.id,data:{label:e.label,meta:e.meta,state:e.state??"online"},position:{x:e.x/100*1e3,y:e.y/100*560},type:"topologyNode"})),[e]),i=ew.useMemo(()=>t.map(e=>({id:e.id,data:{kind:e.kind??"direct",label:e.label,meta:e.meta},source:e.from,target:e.to,type:"topologyEdge"})),[t]);return(0,eb.jsx)("div",{"data-slot":"topology-map",className:(0,eI.cn)("h-full min-h-0 overflow-hidden rounded-xl bg-muted/25",n),...r,children:(0,eb.jsx)(lh,{children:(0,eb.jsx)(lg,{nodes:a,edges:i,nodeTypes:et0,edgeTypes:et1,fitView:!0,fitViewOptions:{maxZoom:1.15,minZoom:.45,padding:.22},minZoom:.35,maxZoom:1.5,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,panOnDrag:!1,zoomOnScroll:!1,zoomOnDoubleClick:!1,preventScrolling:!1,proOptions:{hideAttribution:!0},className:"topology-flow text-foreground",children:(0,eb.jsx)(lN,{gap:28,size:1,color:"var(--border)",className:"opacity-80"})})})})}function et5({nodes:e,links:t}){return(0,eb.jsx)(et2,{nodes:e,links:t})}function et4({title:e,count:t}){return(0,eb.jsxs)("div",{className:"flex h-7 shrink-0 items-center justify-between",children:[(0,eb.jsx)("h2",{className:"text-sm font-semibold tracking-normal",children:e}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:t})]})}function et3({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eI.cn)("px-2 py-2",t>0&&"border-t"),children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("div",{className:(0,eI.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function et6({items:e}){let t=ew.useMemo(()=>e.map(([e,t,n,r])=>({id:`${e}-${n}`,status:"完成"===r?"done":"运行中"===r?"current":"失败"===r?"blocked":"queued",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[3.25rem_8rem_minmax(0,1fr)_4rem] items-center gap-3",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"truncate ui-text-kbd text-muted-foreground",children:t}),(0,eb.jsx)("span",{className:"truncate",children:n}),(0,eb.jsx)("span",{className:"text-right ui-text-kbd text-muted-foreground",children:r})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-1.5"})}function et8({items:e}){let t=ew.useMemo(()=>e.map(e=>{var t;return{id:e.id,status:"running"===(t=e.state)?"current":"blocked"===t||"failed"===t?"blocked":"queued",title:(0,eb.jsx)(et7,{item:e})}}),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-2"})}function et7({item:e}){return(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_7.5rem_5rem] items-center gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.title}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.machine," · ",e.agent," · ",e.started]})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)(eeC,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("div",{className:"ui-text-kbd text-muted-foreground",children:e.runtime})]}),(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)(eeC,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function et9({workers:e}){return(0,eb.jsx)("div",{className:"mt-2 grid min-h-0 flex-1 content-start overflow-hidden",children:e.map((e,t)=>(0,eb.jsx)(ene,{worker:e,divided:t>0},e.id))})}function ene({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-24 grid-cols-[minmax(0,1fr)_2.5rem_auto] items-center gap-4 px-2 py-2",t&&"border-t"),children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-lg font-semibold tracking-normal",children:e.machine}),(0,eb.jsx)("div",{className:"mt-0.5 truncate ui-text-kbd text-muted-foreground",children:e.role})]}),(0,eb.jsxs)("div",{className:"text-right text-sm font-medium tabular-nums",children:[e.active,"/",e.capacity]}),(0,eb.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,eb.jsx)(ent,{label:"CPU",value:e.cpu}),(0,eb.jsx)(ent,{label:"MEM",value:e.memory})]})]})}function ent({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeM,{value:t,label:e,className:"size-16 [&_[data-slot=progress-ring-center]]:size-10 [&_[data-slot=progress-ring-center]]:bg-background [&_[data-slot=progress-ring-center]_span]:text-xs"}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e})]})}function enn({events:e}){let t=ew.useMemo(()=>e.map(([e,t],n)=>({id:`${e}-${t}`,status:0===n?"current":"done",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[3.25rem_minmax(0,1fr)] items-center gap-2",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"truncate",children:t})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-1.5"})}function enr({machines:e}){return(0,eb.jsx)("div",{className:"mt-2 grid min-h-0 flex-1 content-start overflow-hidden",children:e.map((e,t)=>(0,eb.jsx)(ena,{machine:e,divided:t>0},e.id))})}function ena({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-20 grid-cols-[minmax(0,1fr)_minmax(0,1.45fr)] items-center gap-4 px-2 py-2",t&&"border-t"),children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eno,{status:e.status}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.name})]}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.os," · ",e.link," · heartbeat ",e.heartbeat]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 sm:grid-cols-4",children:[(0,eb.jsx)(eni,{icon:(0,eb.jsx)(uN,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(eeI,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(uS,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(eni,{icon:(0,eb.jsx)(eeA,{}),label:"NET",value:e.network})]})]})}function eni({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsxs)("div",{className:"flex justify-between gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1 [&_svg]:size-3",children:[e,t]}),(0,eb.jsxs)("span",{children:[n,"%"]})]}),(0,eb.jsx)(eeC,{value:n,className:"h-1.5"})]})}function eno({status:e}){return(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enl({links:e}){let t=ew.useMemo(()=>e.map(([e,t,n,r,a])=>({id:`${e}-${t}`,status:"Relay fallback"===n?"blocked":"current",title:(0,eb.jsxs)("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_5rem_4rem_3.5rem] items-center gap-3",children:[(0,eb.jsxs)("span",{className:"truncate",children:[e," / ",t]}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:n}),(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:r}),(0,eb.jsx)("span",{className:"text-right ui-text-kbd text-muted-foreground",children:a})]})})),[e]);return(0,eb.jsx)(Q0,{items:t,scrollCurrentIntoView:!1,extendLineToViewport:!0,className:"mt-2 min-h-0 flex-1",viewportClassName:"h-full max-h-none overflow-y-auto pr-0",itemClassName:"py-2"})}function ens({config:e,data:t}){return(0,eb.jsx)(Vr,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Y4,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZO,{vertical:!1}),(0,eb.jsx)(Zq,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(BK,{content:(0,eb.jsx)(Vi,{indicator:"line"})}),(0,eb.jsx)(YJ,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(YJ,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(YJ,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enc({services:e}){let[t,n]=XH(),r=Math.max(1,Math.floor((Math.max(0,n.width-192-64-32)+5)/12)),a=Math.max(48,n.height>0?Math.floor((n.height-0*Math.max(0,e.length-1))/e.length):48),i=Math.max(28,a-22);return(0,eb.jsx)("div",{ref:t,className:"mt-2 min-h-0 flex-1",children:e.map((e,t)=>(0,eb.jsx)(end,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function end({service:e,divided:t,rowHeight:n,sampleCount:r,sampleHeight:a}){let i=ew.useMemo(()=>{var t,n;return t=e.samples,n=r,t.length>=n?t.slice(t.length-n):Array.from({length:n},(e,n)=>{let r=n%t.length;return t[r]??0})},[r,e.samples]);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid grid-cols-[12rem_minmax(0,1fr)_4rem] items-center gap-4 px-2",t&&"border-t"),style:{height:n},children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("div",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("div",{className:(0,eI.cn)("mt-0.5 truncate ui-text-kbd text-muted-foreground","告警"===e.state&&"text-destructive"),children:e.state})]}),(0,eb.jsx)("div",{"aria-label":`${e.name} 30 minute stability samples`,className:"flex min-w-0 items-center overflow-hidden",style:{gap:5},children:i.map((t,n)=>{var r;return(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded-[2px]",(r=t)<60?"bg-destructive":r<72?"bg-destructive/55":r<84?"bg-primary/35":r<92?"bg-primary/60":"bg-primary"),style:{width:7,height:a},title:`${t}%`},`${e.id}-${n}`)})}),(0,eb.jsxs)("div",{className:"text-right text-sm font-medium tabular-nums",children:[e.samples.at(-1),"%"]})]})}let enu=[{id:"canvas-vantaloom-base",title:"Vantaloom 基座设计",status:"live",purpose:"承载多标签系统、文件树、终端和 Agent 会话节点。",nodes:18,agents:3,progress:64,health:91,runtime:"3h 12m",tokenUsage:62e4,lastOpened:"刚刚",snapshots:14,unsavedChanges:3,roadmap:[{title:"接入节点模板选择",state:"done"},{title:"处理节点吸附与连线遮挡",state:"done"},{title:"合并多标签页拖拽",state:"running"},{title:"沉淀真实项目模板",state:"queued"}],settings:{nodeTemplates:["多标签页系统","文件管理树","终端标签组","Agent 对话"],defaultLayout:["默认缩放 0.72","节点内容 2x","定位点 24px"],folders:["D:/Projects/Vantaloom-ui","D:/Projects/Vantaloom-ui/apps"],sharing:["工作组管理员可编辑","成员可审阅","访客不可访问"],autosave:["每 45 秒保存","节点拖拽结束保存","切换工作区保存"],snapshots:["保留最近 30 个","发布前创建检查点"],hosts:["Studio-PC","Linux-runner-02"],plugins:["Browser","Git checkpoint"]}},{id:"canvas-agent-lab",title:"Agent 编排实验",status:"live",purpose:"验证多 Agent 对话、工具窗口和剪切板在画布中的协同。",nodes:11,agents:4,progress:41,health:78,runtime:"1h 36m",tokenUsage:308e3,lastOpened:"8 分钟前",snapshots:9,unsavedChanges:1,roadmap:[{title:"四分工作区布局",state:"done"},{title:"面板替换进剪切板",state:"done"},{title:"会话浏览页",state:"running"},{title:"会话节点化",state:"queued"}],settings:{nodeTemplates:["Agent 对话","数据表标签","浏览器标签"],defaultLayout:["默认双栏","右侧可调整","剪切板常驻"],folders:["D:/Projects/Vantaloom-ui/apps/vantaloom"],sharing:["仅本机管理员可编辑"],autosave:["每 60 秒保存"],snapshots:["保留最近 12 个"],hosts:["Studio-PC"],plugins:["Browser"]}},{id:"canvas-release-map",title:"发布路线图",status:"review",purpose:"梳理组件库、主应用和文档的发布前检查。",nodes:9,agents:1,progress:83,health:86,runtime:"42m",tokenUsage:144e3,lastOpened:"今天 15:02",snapshots:7,unsavedChanges:0,roadmap:[{title:"组件清单",state:"done"},{title:"风险列表",state:"done"},{title:"最终检查",state:"running"}],settings:{nodeTemplates:["Diff 标签","数据表标签","文件预览标签"],defaultLayout:["审阅模式默认开启"],folders:["D:/Projects/Vantaloom-ui/docs"],sharing:["工作组可审阅"],autosave:["手动保存"],snapshots:["里程碑保留"],hosts:["Studio-PC"],plugins:[]}},{id:"canvas-browser-matrix",title:"浏览器预览矩阵",status:"idle",purpose:"检查不同 UA、比例和内嵌预览模式的表现。",nodes:6,agents:0,progress:100,health:94,runtime:"28m",tokenUsage:78e3,lastOpened:"昨天 18:44",snapshots:5,unsavedChanges:0,roadmap:[{title:"自适应模式",state:"done"},{title:"长宽比菜单",state:"done"},{title:"导航按钮",state:"done"}],settings:{nodeTemplates:["浏览器标签","多标签页系统"],defaultLayout:["自适应预览"],folders:["D:/Projects/Vantaloom-ui/packages/ui"],sharing:["仅自己"],autosave:["关闭"],snapshots:["保留最近 5 个"],hosts:["Studio-PC"],plugins:["Browser"]}},{id:"canvas-ops-topology",title:"工作组拓扑",status:"idle",purpose:"记录机器、服务和工作组连接关系。",nodes:15,agents:0,progress:100,health:89,runtime:"1h 04m",tokenUsage:92e3,lastOpened:"周四 11:30",snapshots:11,unsavedChanges:0,roadmap:[{title:"机器节点整理",state:"done"},{title:"连接策略标注",state:"done"},{title:"访问权限检查",state:"done"}],settings:{nodeTemplates:["数据表标签","浏览器标签","终端标签组"],defaultLayout:["视口吸附开启","节点吸附开启"],folders:["D:/Projects/Vantaloom-ui/ops"],sharing:["管理员可编辑","成员可查看"],autosave:["每 2 分钟保存"],snapshots:["每日保留"],hosts:["Studio-PC","Linux-runner-02","MacBook-build"],plugins:[]}}];function enf(e,t,n,r,a,i,o){return{id:e,title:t,status:"idle",purpose:n,nodes:r,agents:0,progress:100,health:90,runtime:a,tokenUsage:i,lastOpened:o,snapshots:Math.max(3,Math.round(r/2)),unsavedChanges:0,roadmap:[{title:"整理节点结构",state:"done"},{title:"检查连接关系",state:"done"},{title:"保存最终快照",state:"done"}],settings:{nodeTemplates:["多标签页系统","文件预览标签"],defaultLayout:["默认缩放 0.72","节点吸附开启"],folders:["D:/Projects/Vantaloom-ui"],sharing:["仅自己"],autosave:["关闭"],snapshots:["保留最近 5 个"],hosts:["Studio-PC"],plugins:[]}}}enu.push(enf("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),enf("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),enf("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),enf("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),enf("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let enh=enu.filter(e=>"idle"!==e.status),enm=enu.filter(e=>"idle"===e.status);function enp(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function eng(e,t){return(0,eb.jsx)("section",{className:(0,eI.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:Q3({image:t,opacity:.88,blur:"0px"}),children:e})}let enx=[{id:"metric-active",kind:"metric-active",x:0,y:0,w:3,h:3},{id:"metric-nodes",kind:"metric-nodes",x:3,y:0,w:3,h:3},{id:"metric-unsaved",kind:"metric-unsaved",x:6,y:0,w:3,h:3},{id:"metric-snapshots",kind:"metric-snapshots",x:9,y:0,w:3,h:3},{id:"active",kind:"active",x:0,y:3,w:12,h:3},{id:"recent",kind:"recent",x:0,y:6,w:12,h:Math.max(3,Math.ceil(.75*enm.length)+1)}];function env({open:e,title:t,description:n,eyebrow:r,panels:a,defaultPanelId:i="overview",onOpenChange:o}){let l=sy(),[s,c]=ew.useState(i),d=a.find(e=>e.id===s)??a[0];return ew.useEffect(()=>{e&&c(i)},[i,e]),(0,eb.jsx)(dC,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fv,{hideClose:!0,className:(0,eI.cn)("gap-0 overflow-hidden p-0",l?"inset-0 h-svh w-full max-w-none translate-x-0 translate-y-0 rounded-none border-0":"h-[min(44rem,calc(100svh-2rem))] max-w-5xl"),children:[(0,eb.jsx)(fw,{className:"sr-only",children:t}),(0,eb.jsxs)(fj,{className:"sr-only",children:[r?(0,eb.jsxs)(eb.Fragment,{children:[r,". "]}):null,n??t]}),l?(0,eb.jsxs)("div",{className:"flex h-full flex-col",children:[(0,eb.jsxs)("header",{className:"flex shrink-0 items-center gap-3 border-b px-4 py-3",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"关闭",onClick:()=>o(!1),children:(0,eb.jsx)(fg.XIcon,{className:"size-4"})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[r?(0,eb.jsx)("div",{className:"truncate text-xs text-muted-foreground",children:r}):null,(0,eb.jsx)("div",{className:"truncate text-sm font-semibold",children:t})]})]}),(0,eb.jsx)("nav",{className:"shrink-0 overflow-x-auto border-b [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsx)("div",{className:"flex gap-1.5 px-4 py-2",children:a.map(e=>(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("inline-flex shrink-0 items-center gap-1.5 rounded-full px-3 py-1.5 text-xs font-medium transition-colors",d?.id===e.id?"bg-foreground text-background":"bg-muted text-muted-foreground"),onClick:()=>c(e.id),children:[e.icon?(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e.icon}):null,(0,eb.jsx)("span",{children:e.label}),e.badge?(0,eb.jsx)(Bu,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(wT,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"p-4",children:d?.content})})]}):(0,eb.jsxs)("div",{className:"grid size-full min-h-0 grid-cols-[15rem_minmax(0,1fr)]",children:[(0,eb.jsx)("aside",{"data-slot":"resource-management-dialog-sidebar",className:"min-h-0 border-r bg-muted/20",children:(0,eb.jsx)(wT,{className:"h-full",children:(0,eb.jsx)("div",{className:"space-y-1 p-2",children:a.map(e=>(0,eb.jsxs)(ez.Button,{"data-slot":"resource-management-dialog-nav-item",type:"button",variant:"ghost",className:(0,eI.cn)("h-9 w-full justify-start px-2.5 text-left font-medium",d?.id===e.id?"bg-muted text-foreground":"text-muted-foreground hover:bg-muted/70 hover:text-foreground"),onClick:()=>c(e.id),children:[e.icon?(0,eb.jsx)("span",{className:"flex size-5 shrink-0 items-center justify-center [&_svg]:size-4",children:e.icon}):null,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label}),e.badge?(0,eb.jsx)(Bu,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(wT,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enb({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let[r,a]=ew.useState(),i=ew.useMemo(()=>(function({onSelect:e}){return[{id:"metric-active",title:"活跃画布",description:"当前正在编辑的画布数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("活跃画布","画布列表"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"当前正在编辑的画布数量",value:String(enh.length)}),Q1)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(Vk,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("运行节点","画布节点"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),Q2)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(j_,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("未保存","画布保存状态"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"等待写入的画布变更",value:"4"}),Q5)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Ge,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enp("快照","画布快照"),render:e=>eng((0,eb.jsx)(etw,{label:e.title,description:"可回退的历史存档",value:"46"}),Q4)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enp("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(et4,{title:t.title,count:enh.length}),(0,eb.jsx)(eeO,{canvases:enh,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(m1,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enm.length)+1)},defaultConfig:enp("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(et4,{title:t.title,count:enm.length}),(0,eb.jsx)(eeO,{canvases:enm,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eey,{boardId:"canvas-library",definitions:i,initialLayouts:enx,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enw,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function eny({icon:e,value:t}){return(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"[&_svg]:size-3.5",children:e}),(0,eb.jsx)("span",{className:"tabular-nums",children:t})]})}function enw({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(env,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VN,{}),content:(0,eb.jsx)(enj,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(QW,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enN,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(QZ,{}),content:(0,eb.jsx)(enN,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(m1,{}),content:(0,eb.jsx)(enN,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(QY,{}),content:(0,eb.jsx)(enN,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gr,{}),content:(0,eb.jsx)(enN,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Ge,{}),content:(0,eb.jsx)(enN,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(QG,{}),content:(0,eb.jsx)(enN,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(QX,{}),content:(0,eb.jsx)(enN,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enj({canvas:e}){return(0,eb.jsxs)("div",{className:"grid gap-5",children:[(0,eb.jsxs)("button",{type:"button",className:"group relative grid min-h-72 rounded-[2rem] border bg-card p-7 text-left transition-colors hover:bg-muted/35",children:[(0,eb.jsxs)("div",{className:"grid gap-5",children:[(0,eb.jsxs)("div",{className:"max-w-2xl",children:[(0,eb.jsx)("h3",{className:"text-3xl font-semibold tracking-normal",children:e.title}),(0,eb.jsx)("p",{className:"mt-4 text-sm leading-6 text-muted-foreground",children:e.purpose})]}),(0,eb.jsxs)("div",{className:"grid max-w-56 gap-2",children:[(0,eb.jsx)(enk,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enk,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enk,{label:"Snapshots",value:`${e.snapshots}`})]})]}),(0,eb.jsx)("span",{className:"absolute right-7 bottom-7 text-sm font-medium text-foreground transition-opacity group-hover:opacity-70",children:"进入"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm font-medium",children:"Roadmap"}),(0,eb.jsx)(eny,{icon:(0,eb.jsx)(Vk,{}),value:e.runtime})]}),(0,eb.jsx)(Q0,{items:e.roadmap.map(e=>({id:e.title,title:e.title,status:"running"===e.state?"current":"done"===e.state?"done":"queued"})),viewportClassName:"max-h-64"})]})]})}function enk({label:e,value:t}){return(0,eb.jsxs)("span",{className:"grid min-w-0 gap-0.5 py-0.5",children:[(0,eb.jsx)("span",{className:"truncate ui-text-kbd text-muted-foreground",children:e}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-semibold tracking-normal",children:t})]})}function enN({title:e,items:t,empty:n="暂无内容"}){return(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:e}),(0,eb.jsx)("div",{className:"overflow-hidden rounded-xl border bg-card",children:t.length>0?t.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eI.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(QK,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 truncate",children:e})]},e)):(0,eb.jsx)("div",{className:"px-3 py-6 text-sm text-muted-foreground",children:n})})]})}function enS({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vx,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vg,{loop:!0,children:[(0,eb.jsx)(vv,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vb,{children:[(0,eb.jsx)(vy,{children:"没有匹配节点。"}),(0,eb.jsx)(vw,{heading:"可用节点",children:uL.map(e=>(0,eb.jsxs)(vj,{value:`${e.title} ${e.description} ${e.keywords}`,onSelect:()=>n(e),children:[(0,eb.jsx)("span",{className:"flex size-8 shrink-0 items-center justify-center rounded-lg border bg-background text-muted-foreground",children:e.icon}),(0,eb.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-sm font-medium",children:e.title}),(0,eb.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:e.description})]}),(0,eb.jsxs)(vk,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enC({nodes:e,edges:t,selectedNodeId:n,clipboardItems:r,onNodesChange:a,onEdgesChange:i,onNodesSet:o,onEdgesSet:l,onSelectedNodeChange:s,onClipboardItemsChange:c}){let d=ew.useRef(null),{addPaletteOpen:u,addTemplateNode:f,handleAddPaletteOpenChange:h,handleCanvasAction:m,handleCanvasDragOver:p,handleCanvasDrop:g,handleNodeCanvasConnect:x,handleNodeCanvasEdgeAction:v,handleNodeCanvasNodeAction:b,filePickerDialog:y,renderedCanvasNodes:w}=function({workspaceRef:e,nodes:t,clipboardItems:n,onNodesSet:r,onEdgesSet:a,onSelectedNodeChange:i,onClipboardItemsChange:o}){let l=ew.useRef(0),s=ew.useRef(0),[c,d]=ew.useState(!1),[u,f]=ew.useState(),[h,m]=ew.useState(),p=ew.useCallback((t,n)=>{let r,a,i,o,l,s,c,d;return r=e.current,a=r?.querySelector(".react-flow__viewport"),i=r?.getBoundingClientRect(),l="none"!==(o=a?getComputedStyle(a).transform:"none")?new DOMMatrixReadOnly(o):void 0,s=l?.a&&Number.isFinite(l.a)?l.a:1,c=l?.e??0,d=l?.f??0,{x:(t-(i?.left??0)-c)/s,y:(n-(i?.top??0)-d)/s}},[e]),g=ew.useCallback((e,t)=>{r(n=>n.map(n=>{let r,a;return n.id===e?(a="string"==typeof(r=n.data??{}).activeTabId&&t.some(e=>e.id===r.activeTabId)?r.activeTabId:t[0]?.id,{...n,data:{...r,tabs:t,activeTabId:a}}):n}))},[r]),x=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?{...n,data:{...n.data??{},activeTabId:t}}:n))},[r]),v=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?function(e,t){let n=e.data??{};if("multi-tab-system"===n.kind){let r=Array.isArray(n.tabs)?n.tabs:[];return{...e,data:{...n,tabs:r.map(e=>e.id===t.id?t:e),activeTabId:t.id}}}return uB(n.kind)?{...e,data:{...n,tab:t}}:e}(n,t):n))},[r]),b=ew.useCallback((e,t)=>{r(n=>n.map(n=>n.id===e?{...n,data:{...n.data??{},terminal:t}}:n))},[r]),y=ew.useCallback((e,t)=>{var n;let a=(n=e.kind,uL.find(e=>e.id===n)?.size??uA({width:480,height:320}));s.current+=1;let o=`${e.kind}-detached-${s.current}`;r(n=>[...n,function({tab:e,nodeId:t,center:n,size:r}){return{id:t,type:"blank",position:uD(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:uT(r)}}({tab:e,nodeId:o,center:t,size:a})]),i(o)},[r,i]),w=ew.useCallback(async(e,n)=>{try{let a,i=n?.nodeId?t.find(e=>e.id===n.nodeId):void 0,o=i?(i.data??{}).kind:void 0,l="data-table-tab-viewer"===o?await fe(e):await u8(e),s=void 0!==i&&(a=i.data??{},"multi-tab-system"===a.kind||"file-tab-viewer"===a.kind||"data-table-tab-viewer"===a.kind);n?.nodeId&&s&&r(e=>e.map(e=>e.id===n.nodeId?function(e,t,n){let r=e.data??{};if("multi-tab-system"===r.kind){let a,i,o=Array.isArray(r.tabs)?r.tabs:[];return{...e,data:{...r,tabs:(a=o.filter(e=>e.id!==t.id),i=void 0===n?a.length:Math.min(Math.max(n,0),a.length),a.splice(i,0,t),a),activeTabId:t.id}}}return"file-tab-viewer"===r.kind||"data-table-tab-viewer"===r.kind&&"data-table-tab-viewer"===t.kind?{...e,data:{...r,tab:t}}:e}(e,l,n.insertIndex):e)),n?.nodeId&&s||y(l,u??{x:496,y:336})}catch{hF.error("文件预览打开失败")}},[y,t,r,u]),j=ew.useCallback(e=>{let n=t.find(e=>"multi-tab-system"===(e.data??{}).kind);w(e,n?{nodeId:n.id}:void 0)},[t,w]),k=ew.useCallback(async(e,t,n)=>{let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hF.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uX({machineId:a,path:r,content:n}),o={...t,title:i.name,modified:!1,defaultValue:"utf-8"===i.encoding?i.content:n,file:{...t.file,name:i.name,path:i.path,machineId:i.machine.id,mimeType:i.mimeType,kind:t.file?.kind,size:i.size,truncated:i.truncated}};v(e,o),hF.success("文件已保存")}catch(e){throw hF.error("文件保存失败"),e}},[v]),N=ew.useCallback((e,t,n)=>{y(t,p(n.clientX,n.clientY))},[y,p]),S=ew.useCallback(e=>{let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id"),r=n.find(e=>e.id===t),a=r?r.payloads?.[G2]:void 0;if(a)return a;let i=e.dataTransfer.getData(G2);if(i)try{return JSON.parse(i)}catch{return}},[n]),C=ew.useCallback((e,t,n)=>{r(r=>r.map(r=>r.id!==e?r:function(e,t,n){let r=e.data??{},a=Array.isArray(r.tabs)?r.tabs:[],i=new Set(a.map(e=>e.id)),o=n.tab.id,l=2;for(;i.has(o);)o=`${n.tab.id}-${l}`,l+=1;let s=[...a];return s.splice(Math.max(0,Math.min(t,s.length)),0,{...n.tab,id:o}),{...e,data:{...r,tabs:s,activeTabId:o}}}(r,t,n)))},[r]),M=ew.useCallback((e,t,n)=>{let r=S(n);r&&C(e,t,r)},[S,C]),E=ew.useCallback(e=>(function(e,t){for(let n of[...e].reverse()){if("multi-tab-system"!==(n.data??{}).kind)continue;let e=function(e){let t="number"==typeof e.width?e.width:"number"==typeof e.style?.width?e.style.width:"string"==typeof e.style?.width?Number.parseFloat(e.style.width):192,n="number"==typeof e.height?e.height:"number"==typeof e.style?.height?e.style.height:"string"==typeof e.style?.height?Number.parseFloat(e.style.height):112;return{width:Number.isFinite(t)?t:192,height:Number.isFinite(n)?n:112}}(n),r=t.x>=n.position.x&&t.x<=n.position.x+e.width,a=t.y>=n.position.y&&t.y<=n.position.y+e.height;if(r&&a)return n}})(t,e),[t]),O=ew.useCallback((t,n,r)=>(function(e,t,n,r){let a=Array.from(e.current?.querySelectorAll(".react-flow__node")??[]).find(e=>e.getAttribute("data-id")===t),i=a?.querySelector('[data-slot="multi-tab-list"]');if(!i)return r;let o=Array.from(i.querySelectorAll("[data-tab-id]"));for(let[e,t]of o.entries()){let r=t.getBoundingClientRect();if(n<r.left+r.width/2)return e}return o.length})(e,t,n,r),[e]),P=function({nodes:e,onTabsChange:t,onActiveTabChange:n,onRequestFileTab:r,onOpenWorkspaceFile:a,onTabChange:i,onSaveFileTab:o,onTerminalStateChange:l,onTabDetach:s,onExternalTabDrop:c}){return ew.useMemo(()=>e.map(e=>{let d=e.data??{},u=(e.data??{}).kind;return u?{...e,data:{...d,content:(0,eb.jsx)(JD,{kind:u,nodeId:e.id,tab:d.tab,tabs:d.tabs,activeTabId:d.activeTabId,terminalScopeId:`canvas:node:${e.id}`,terminalState:d.terminal,onTerminalStateChange:t=>l(e.id,t),onRequestFileTab:r,onOpenWorkspaceFile:a,onTabsChange:t,onTabChange:i,onSaveFileTab:o,onActiveTabChange:n,onTabDetach:s,onExternalTabDrop:c})}}:e}),[e,n,c,a,r,o,i,s,l,t])}({nodes:t,onTabsChange:g,onActiveTabChange:x,onRequestFileTab:m,onOpenWorkspaceFile:j,onTabChange:v,onSaveFileTab:k,onTerminalStateChange:b,onTabDetach:N,onExternalTabDrop:M}),z=ew.useCallback(e=>{s.current+=1;let n=`${e.id}-${t.length+s.current}`;r(t=>[...t,function({template:e,nodeId:t,center:n}){let r={contentScale:2,kind:e.id};return"multi-tab-system"===e.id?r.tabs=[]:uB(e.id)&&(r.tab=uH(e.id,`${t}-tab`)),{id:t,type:"blank",position:uD(n,e.size),data:r,width:e.size.width,height:e.size.height,style:uT(e.size)}}({template:e,nodeId:n,center:u??{x:496,y:336}})]),i(void 0),d(!1),f(void 0)},[t.length,r,i,u]),I=ew.useCallback(e=>{let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id");if(!t)return;let a=n.find(e=>e.id===t),o=p(e.clientX,e.clientY),s=S(e),c=s?E(o):void 0;if(s&&c){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let t=c.data??{},n=Array.isArray(t.tabs)?t.tabs:[],r=O(c.id,e.clientX,n.length);C(c.id,r,s),i(void 0);return}let d=a?a.payloads?.[G1]:void 0;if(!a||!d)return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move",l.current+=1;let u=`${d.node.id}-drop-${l.current}`;r(e=>[...e,function({source:e,nodeId:t,center:n}){let r={width:e.width??192,height:e.height??112};return{...e,id:t,position:uD(n,r),style:e.style??uT(r),selected:!1,data:{...e.data??{},resizing:!1}}}({source:d.node,nodeId:u,center:o})]),i(u)},[n,E,S,p,O,C,r,i]),A=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[G1,G2].includes(e))&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},[]),T=ew.useCallback((e,{flowPosition:t})=>{"add"===e&&(f(t),d(!0))},[]),R=ew.useCallback(e=>{a(t=>{if(t.find(t=>t.source===e.source&&t.target===e.target))return t;let n=t.find(t=>t.source===e.target&&t.target===e.source);return n?t.map(e=>e.id===n.id?{...e,data:{...e.data??{},bidirectional:!0}}:e):[...t,{id:`edge-${e.source}-${e.target}-${t.length+1}`,type:"connection",source:e.source,target:e.target,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle,data:{anchors:[]}}]})},[a]),D=ew.useCallback((e,t,n)=>{"cut-edge"===e?a(e=>e.filter(e=>e.id!==t)):a(r=>r.map(r=>{if(r.id!==t)return r;let a=[...r.data?.anchors??[]];return"add-anchor"===e&&n.anchor&&a.splice(n.anchorIndex??a.length,0,n.anchor),"move-anchor"===e&&n.anchor&&void 0!==n.anchorIndex&&(a[n.anchorIndex]=n.anchor),"delete-anchor"===e&&void 0!==n.anchorIndex&&a.splice(n.anchorIndex,1),{...r,data:{...r.data??{},anchors:a}}}))},[a]),_=ew.useCallback((e,n,{snappedPosition:l})=>{if("copy"===e)return void r(e=>{let t=e.find(e=>e.id===n);if(!t)return e;let r=`${t.id}-copy-${e.length+1}`;return i(r),[...e,{...t,id:r,position:l,selected:!1,data:{...t.data??{},resizing:!1}}]});if("cut"===e){let e,l,s,c,d,u=t.find(e=>e.id===n);if(!u)return;let f=(s=(l=function(e){let t=e.data??{},n=t.tab;if(n?.id&&uB(n.kind))return n;let r=t.kind;if(uB(r))return uH(r,e.id)}(e=uU(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[G1]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[G1]:u.id},s&&(c[G2]=s,d[G2]=JSON.stringify(s)),{id:`clip-${u.id}`,title:l?.title??"画布节点",description:l?"来自画布的独立标签页。":"来自节点画布的空白节点。",meta:`${Math.round(u.width??192)}x${Math.round(u.height??112)}`,icon:l?uV(l.kind):(0,eb.jsx)(uw,{className:"size-4"}),dragData:d,payloads:c});o(e=>[f,...e.filter(e=>e.id!==f.id)]),r(e=>e.filter(e=>e.id!==n)),a(e=>e.filter(e=>e.source!==n&&e.target!==n)),i(void 0)}},[t,o,a,r,i]);return{addPaletteOpen:c,addTemplateNode:z,filePickerDialog:(0,eb.jsx)(XV,{open:void 0!==h,onOpenChange:e=>{e||m(void 0)},onSelectFile:e=>{m(void 0),w(e,h)}}),handleAddPaletteOpenChange:function(e){d(e),e||f(void 0)},handleCanvasAction:T,handleCanvasDragOver:A,handleCanvasDrop:I,handleNodeCanvasConnect:R,handleNodeCanvasEdgeAction:D,handleNodeCanvasNodeAction:_,renderedCanvasNodes:P}}({workspaceRef:d,nodes:e,clipboardItems:r,onNodesChange:a,onEdgesChange:i,onNodesSet:o,onEdgesSet:l,onSelectedNodeChange:s,onClipboardItemsChange:c});return(0,eb.jsxs)("div",{ref:d,className:"vtl-app-background vtl-canvas-workspace relative h-full w-full overflow-hidden",onDragOver:p,onDrop:g,children:[(0,eb.jsx)(sb,{"aria-label":"新建画布",className:"h-full min-h-0 rounded-none border-0",viewportClassName:"h-full",nodes:w,edges:t,nodeTypes:uz,edgeTypes:uI,onNodesChange:a,onEdgesChange:i,selectedNodeId:n,onSelectedNodeChange:s,defaultViewport:{x:0,y:0,zoom:.5},labels:{actions:"画布操作",add:"添加节点",select:"普通鼠标",connect:"连接工具",cut:"剪刀工具",drag:"拖拽工具",modeTools:"模式工具",resetZoom:"重置缩放",viewportTools:"视口工具",lockViewport:"锁定视口",visualSnap:"视觉吸附",nodeSnap:"节点吸附",snapTools:"吸附工具",nodeActions:"节点操作",resizeNode:"调整大小",copyNode:"复制节点",cutNode:"剪切节点"},onCanvasAction:m,onNodeCanvasConnect:x,onNodeCanvasEdgeAction:v,onNodeCanvasNodeAction:b}),(0,eb.jsx)(enS,{open:u,onOpenChange:h,onAdd:f}),y,(0,eb.jsx)(hW,{position:"top-right"})]})}async function enM(){return(await enD("/api/local/projects")).projects??[]}async function enE(e){return enD(`/api/local/projects/${encodeURIComponent(e)}`)}async function enO(e){return enD("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function enP(e,t){return enD(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function enz(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function enI(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function enA(e){return enD(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function enT(e){return((await enD(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>s3(e,void 0))}async function enR(e,t){return s3((await enD("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function enD(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"project api failed");return r}xj.length;let en_=(0,ek.default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]),enL=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],en$=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],enF=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],enB=[{value:"off",label:"关闭(off)",desc:"auto 模式,不门控任何工具调用(仅硬危险命令仍被直接拒绝)。"},{value:"loose",label:"宽松(loose)",desc:"auto 模式 + 危险反思仅对高危调用介入。"},{value:"standard",label:"标准(standard)",desc:"acceptEdits 模式 + 危险反思对「风险及以上」介入。默认。"},{value:"strict",label:"严格(strict)",desc:"ask 模式 + 危险反思对全部工具调用介入。"},{value:"paranoid",label:"偏执(paranoid)",desc:"ask 模式 + 危险反思全覆盖,且发布类命令(publish/deploy/update)强制上卡。"}],enV=[{value:"queue-park",label:"排队驻留(queue-park)",desc:"门触发时入卡并驻留,agent 继续做别的事,等你回来处理。默认。"},{value:"auto-reject-5m",label:"5 分钟自动拒(auto-reject-5m)",desc:"旧行为:无人处理时 5 分钟后自动拒绝该调用。"},{value:"auto-approve",label:"自动通过(auto-approve)",desc:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enH=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enU=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function enq({onCreated:e,onCancel:t}){let{machines:n}=xk(),{models:r}=xK(),[a,i]=ew.useState("local"),{engines:o}=jp(a),l=ew.useCallback(e=>"vantaloom"===e||(o.find(t=>t.engine===e)?.available??!1),[o]),s=ew.useCallback(e=>o.find(t=>t.engine===e)?.reason,[o]),[c,d]=ew.useState(0),[u,f]=ew.useState("vantaloom"),[h,m]=ew.useState(""),[p,g]=ew.useState("acceptEdits"),[x,v]=ew.useState(["local"]),[b,y]=ew.useState(""),[w,j]=ew.useState(""),[k,N]=ew.useState([]),[S,C]=ew.useState(""),[M,E]=ew.useState([]),[O,P]=ew.useState(""),[z,I]=ew.useState(""),[A,T]=ew.useState("standard"),[R,D]=ew.useState("queue-park"),[_,L]=ew.useState(!1),[$,F]=ew.useState("risky+"),[B,V]=ew.useState(!1),[H,U]=ew.useState("wake-singleton"),[q,W]=ew.useState(!1),[K,G]=ew.useState(""),X=ji(u);ew.useEffect(()=>{"vantaloom"===u||l(u)||f("vantaloom")},[u,l]),ew.useEffect(()=>{X&&(v(e=>1===e.length&&"local"===e[0]?e:["local"]),N(e=>e.length<=1?e:e.slice(-1)))},[X]);let Y="local"===a?"本机":n.find(e=>e.id===a)?.name??a,Z=b.trim().length>0,J=ew.useCallback(async()=>{if(!q){if(!b.trim()){d(1),G("工程名称不能为空");return}W(!0),G("");try{let t={maxPeers:enW(O,1,16),maxSpawnDepth:enW(z,1,5),hitlStrictness:A,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await enO({title:b.trim(),summary:w.trim()||void 0,ownerMachineId:a,settingsTemplate:{subagents:[],mainModels:X?[]:M,folders:k,blockedCommands:[],allowedTools:[],deniedTools:[],plugins:[],hosts:X?["local"]:x,permissionMode:p,engine:u,ccModel:X?h:void 0},policy:t,budgetTokens:enW(S,0,Number.MAX_SAFE_INTEGER)});e(n.id)}catch(e){G(e instanceof Error?e.message:"工程创建失败")}finally{W(!1)}}},[R,S,h,q,_,$,u,k,A,x,X,M,O,z,e,a,p,B,H,w,b]),Q=c===enL.length-1;return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col",children:[(0,eb.jsx)("header",{className:"shrink-0 px-6 pt-8 pb-6",children:(0,eb.jsx)("ol",{className:"mx-auto flex max-w-2xl items-center",children:enL.map((e,t)=>{let n=t<c,r=t===c;return(0,eb.jsxs)("li",{className:"flex min-w-0 flex-1 items-center last:flex-none",children:[(0,eb.jsxs)("button",{type:"button","aria-current":r?"step":void 0,"aria-label":`第 ${t+1} 步:${e}`,onClick:()=>{t<=c&&d(t)},className:"group flex shrink-0 items-center gap-2 outline-none",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("inline-flex size-8 shrink-0 items-center justify-center rounded-full border text-sm font-medium transition-colors",n?"border-primary bg-primary text-primary-foreground":r?"border-primary text-primary ring-2 ring-primary/30":"border-border bg-background text-muted-foreground"),children:n?(0,eb.jsx)(mJ,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,eI.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<enL.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,eI.cn)("mx-3 h-px min-w-6 flex-1 transition-colors",t<c?"bg-primary":"bg-border")}):null]},e)})})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 pb-6",children:(0,eb.jsxs)("div",{className:"mx-auto w-full max-w-2xl",children:[0===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(enX,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(enG,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gR,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xx,{children:en$.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xv,{value:e.value,disabled:!t,children:[e.label,t?"":"(不可用)"]},e.value)})})]}),s(u)?(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:s(u)}):null,X?(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:"Claude Code(含 reclaude)运行在所选 owner 机器上;其工具锁定在该机本地。"}):null]}),X?(0,eb.jsxs)(enG,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gR,{value:""===h?jr:h,onValueChange:e=>m(e===jr?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):null,(0,eb.jsxs)(enG,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gR,{value:p,onValueChange:g,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enF.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enF.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(jn,{value:x,onValueChange:v,disabled:X,hint:X?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,1===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)(enG,{label:"工程名称(必填)",children:[(0,eb.jsx)(eA,{value:b,placeholder:"新工程",onChange:e=>{y(e.currentTarget.value),K&&G("")}}),Z?null:(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-amber-500",children:"工程名称不能为空。"})]}),(0,eb.jsx)(enG,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(y6,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(w6,{title:"可访问的工作目录",value:k,onValueChange:e=>N(X?e.slice(-1):e)}),X?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null,(0,eb.jsx)(enG,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:S,onChange:e=>C(e.currentTarget.value),placeholder:"0 = 全局默认",className:"w-52"})})]}):null,2===c?X?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gR,{value:""===h?jr:h,onValueChange:e=>m(e===jr?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型由 Claude Code 提供,不走 Vantaloom 模型路由。"})]}):(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"可用模型"}),(0,eb.jsxs)("p",{className:"text-xs leading-relaxed text-muted-foreground",children:["选择本工程新建对话默认可用的模型(mainModels)。第一个为主模型。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","未选择任何模型时,工程内新建的对话将无模型可用、无法运行。"]})]})]}),(0,eb.jsx)(xG,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(enG,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:O,onChange:e=>P(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(enG,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:z,onChange:e=>I(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(enG,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gR,{value:A,onValueChange:e=>T(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enB.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enB.find(e=>e.value===A)?.desc})]}),(0,eb.jsxs)(enG,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gR,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enV.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enV.find(e=>e.value===R)?.desc})]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hE,{}),"危险反思智能体"]}),(0,eb.jsx)(vJ,{checked:_,onCheckedChange:L})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,风险调用会先经一个模型「反思」判定(通过 / 拒绝 / 升级人工),再到人工审批门。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),_?(0,eb.jsx)("div",{className:"mt-3",children:(0,eb.jsx)(enG,{label:"触发档位(severity)",children:(0,eb.jsxs)(gR,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enH.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})})}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uy,{}),"评审智能体"]}),(0,eb.jsx)(vJ,{checked:B,onCheckedChange:V})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,卡片进入「评审」状态会唤醒 / 派生一个评审智能体复核。",(0,eb.jsxs)("span",{className:"text-sky-700 dark:text-sky-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),B?(0,eb.jsx)("div",{className:"mt-3",children:(0,eb.jsx)(enG,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gR,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enU.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})})}):null]})]}):null,4===c?(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"grid gap-3 rounded-xl border bg-card p-5",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"配置摘要"}),(0,eb.jsxs)("div",{className:"grid gap-2.5",children:[(0,eb.jsx)(enK,{icon:(0,eb.jsx)(m1,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(eP,{}),label:"运行环境",value:Y}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(uN,{}),label:"运行引擎",value:en$.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(mZ,{}),label:"模型",value:X?jo(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(en_,{}),label:"权限 / HITL",value:`${enF.find(e=>e.value===p)?.label??p} \xb7 ${enB.find(e=>e.value===A)?.label??A}`}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(QG,{}),label:"编排上限",value:`同伴 ${O.trim()||`默认8`} \xb7 深度 ${z.trim()||`默认3`}`}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(GI,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(m1,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(enK,{icon:(0,eb.jsx)(uy,{}),label:"监督智能体",value:[_?"危险反思":null,B?"评审":null].filter(Boolean).join(" · ")||"未启用"})]})]}),K?(0,eb.jsx)("div",{className:"text-sm text-destructive",children:K}):null]}):null]})}),(0,eb.jsx)("footer",{className:"flex shrink-0 items-center justify-between px-6 pb-8",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-2xl items-center justify-between",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"ghost",disabled:q,onClick:()=>{0===c?t?.():d(e=>Math.max(0,e-1))},children:[(0,eb.jsx)(mQ,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(ez.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(m2,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(ez.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(enL.length-1,e+1)),children:["下一步",(0,eb.jsx)(m0,{className:"size-4"})]})]})})]})}function enW(e,t,n){let r=e.trim();if(""===r)return 0;let a=Math.floor(Number(r));return!Number.isFinite(a)||a<=0?0:Math.min(n,Math.max(t,a))}function enK({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid grid-cols-[auto_5rem_minmax(0,1fr)] items-center gap-3",children:[(0,eb.jsx)("span",{className:"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground [&_svg]:size-4",children:e}),(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:t}),(0,eb.jsx)("span",{className:"min-w-0 truncate text-sm font-medium text-foreground",children:n})]})}function enG({label:e,hint:t,children:n}){return(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:e}),n,t?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:t}):null]})}function enX({value:e,onChange:t,machines:n}){let r=ew.useMemo(()=>{let e=[],t=!1;for(let r of n)if(r.isLocal)t=!0,e.unshift({id:"local",name:"本机",online:!0,reachable:!0});else{let t="online"===r.status;e.push({id:r.id,name:r.name,online:t,reachable:r.reachable??t})}return t||e.unshift({id:"local",name:"本机",online:!0,reachable:!0}),e},[n]);return(0,eb.jsx)(enG,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gR,{value:e,onValueChange:t,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xx,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xv,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let enY=[{value:"off",label:"关闭(off)",desc:"auto 模式,不门控任何工具调用(仅硬危险命令仍被直接拒绝)。"},{value:"loose",label:"宽松(loose)",desc:"auto 模式 + 危险反思仅对高危调用介入。"},{value:"standard",label:"标准(standard)",desc:"acceptEdits 模式 + 危险反思对「风险及以上」介入。默认。"},{value:"strict",label:"严格(strict)",desc:"ask 模式 + 危险反思对全部工具调用介入。"},{value:"paranoid",label:"偏执(paranoid)",desc:"ask 模式 + 危险反思全覆盖,且发布类命令(publish/deploy/update)强制上卡。"}],enZ=[{value:"queue-park",label:"排队驻留(queue-park)",desc:"门触发时入卡并驻留,agent 继续做别的事,等你回来处理。默认。"},{value:"auto-reject-5m",label:"5 分钟自动拒(auto-reject-5m)",desc:"旧行为:无人处理时 5 分钟后自动拒绝该调用。"},{value:"auto-approve",label:"自动通过(auto-approve)",desc:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enJ=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enQ=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],en0=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],en1=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],en2=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eec,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(mZ,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(QZ,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uO,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(v9,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(GD,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(QZ,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(QG,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(en_,{})}];function en5({projectId:e}){let[t,n]=ew.useState(),[r,a]=ew.useState(!0),[i,o]=ew.useState(),[l,s]=ew.useState(null),[c,d]=ew.useState(!1),[u,f]=ew.useState(),[h,m]=ew.useState(),[p,g]=ew.useState("basic"),x=ew.useCallback(async()=>{a(!0),o(void 0);try{let t=await enE(e);n(t),s(en6(t))}catch(e){o(e instanceof Error?e.message:"工程加载失败")}finally{a(!1)}},[e]);ew.useEffect(()=>{x()},[x]);let v=ew.useMemo(()=>{var e,n;let r;return!!t&&!!l&&(e=l,n=en6(t),r=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),!(e.title===n.title&&e.summary===n.summary&&e.maxPeers===n.maxPeers&&e.maxSpawnDepth===n.maxSpawnDepth&&e.budgetTokens===n.budgetTokens&&e.budgetSoftPct===n.budgetSoftPct&&e.budgetHardPct===n.budgetHardPct&&e.approvalParkTtlSeconds===n.approvalParkTtlSeconds&&e.hitlStrictness===n.hitlStrictness&&e.awayMode===n.awayMode&&e.dangerEnabled===n.dangerEnabled&&e.dangerSeverity===n.dangerSeverity&&e.dangerModelRef===n.dangerModelRef&&e.reviewerEnabled===n.reviewerEnabled&&e.reviewerMode===n.reviewerMode&&e.reviewerModelRef===n.reviewerModelRef&&e.engine===n.engine&&e.permissionMode===n.permissionMode&&e.ccModel===n.ccModel&&r(e.allowedTools,n.allowedTools)&&r(e.blockedCommands,n.blockedCommands)&&r(e.mainModels,n.mainModels)&&r(e.folders,n.folders)&&r(e.hosts,n.hosts)))},[t,l]),b=l?en7(l):void 0;async function y(){if(!l||!t)return;let r=en7(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await enP(e,(a=l,t={maxPeers:en8(a.maxPeers,1,16),maxSpawnDepth:en8(a.maxSpawnDepth,1,5),budgetSoftPct:en8(a.budgetSoftPct,1,100),budgetHardPct:en8(a.budgetHardPct,1,200),approvalParkTtlSeconds:Math.max(0,Math.floor(Number(a.approvalParkTtlSeconds.trim()||"0"))||0),hitlStrictness:a.hitlStrictness||"",awayMode:a.awayMode||"",dangerAgent:{enabled:a.dangerEnabled,severity:a.dangerSeverity||"",modelRef:a.dangerModelRef.trim()},reviewerAgent:{enabled:a.reviewerEnabled,mode:a.reviewerMode||"",modelRef:a.reviewerModelRef.trim()}},r=ji(a.engine),i={...a.baseSettings,blockedCommands:a.blockedCommands,allowedTools:a.allowedTools,permissionMode:a.permissionMode,engine:a.engine,mainModels:r?[]:a.mainModels,ccModel:r?a.ccModel:void 0,folders:r?a.folders.slice(-1):a.folders,hosts:a.hosts},{title:a.title.trim(),summary:a.summary.trim(),budgetTokens:en8(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(en6(o)),m(Date.now())}catch(e){f(e instanceof Error?e.message:"保存失败")}finally{d(!1)}}function w(e){s(t=>t?{...t,...e}:t),m(void 0)}return r&&!l?(0,eb.jsx)("div",{className:"vtl-app-background flex h-full w-full items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin"})}):i&&!l?(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full w-full flex-col items-center justify-center gap-3 px-6 py-16 text-center",children:[(0,eb.jsx)(hE,{className:"size-8 text-hot-pink"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:i}),(0,eb.jsx)(ez.Button,{type:"button",variant:"outline",onClick:()=>void x(),children:"重试"})]}):l?(0,eb.jsxs)("div",{className:"vtl-app-background relative flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"flex flex-col gap-0.5 border-b px-4 py-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground [&_svg]:size-3.5",children:[(0,eb.jsx)(eec,{}),"工程设置"]}),(0,eb.jsx)("h1",{className:"truncate text-sm font-semibold text-foreground",children:t?.title??"工程"})]}),(0,eb.jsx)("nav",{className:"flex shrink-0 gap-1 overflow-x-auto border-b px-3 py-2 vtl-scrollbar-hidden",children:en2.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,eI.cn)("flex shrink-0 items-center gap-1.5 rounded-lg px-3 py-1.5 text-[13px] transition-colors [&_svg]:size-3.5",p===e.value?"bg-muted font-medium text-foreground":"text-muted-foreground hover:bg-muted/60 hover:text-foreground"),children:[e.icon,e.label]},e.value))}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-auto p-4 pb-28",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-2xl flex-col gap-6",children:["basic"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(eec,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(ere,{label:"名称",children:(0,eb.jsx)(eA,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(ere,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(y6,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(mZ,{className:"size-4"}),title:"模型",desc:"本工程新建对话默认可用的模型(mainModels)。与对话设置使用同一选择器。",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),ji(l.engine)?(0,eb.jsx)(ere,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(mZ,{className:"size-4"}),children:(0,eb.jsxs)(gR,{value:""===l.ccModel?jr:l.ccModel,onValueChange:e=>w({ccModel:e===jr?"":e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xx,{children:ja.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(xG,{mainModels:l.mainModels,onMainModelsChange:e=>w({mainModels:e})})]}):null,"tools"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(w4,{value:l.allowedTools,onChange:e=>w({allowedTools:e})})]}):null,"commands"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(w3,{value:l.blockedCommands,onChange:e=>w({blockedCommands:e})})]}):null,"folders"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,eb.jsx)(en4,{}),(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(w6,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:ji(l.engine)?e.slice(-1):e})}),ji(l.engine)?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Claude Code 仅支持单个工作目录(作为会话的工作根目录)。"}):null]}):null,"hosts"===p?(0,eb.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,eb.jsx)(en4,{}),(0,eb.jsx)(jn,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:ji(l.engine),hint:ji(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(QG,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(ere,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(ere,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(GI,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(ere,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:l.budgetTokens,onChange:e=>w({budgetTokens:e.target.value}),placeholder:"0 = 全局默认",className:"w-52"})}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(ere,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(ere,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:200,value:l.budgetHardPct,onChange:e=>w({budgetHardPct:e.target.value}),placeholder:`默认 100`,className:"w-32"})})]})]})]}):null,"hitl"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(en_,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(ere,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gR,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enY.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enY.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(ere,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gR,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enZ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enZ.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(ere,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(eA,{type:"number",min:0,value:l.approvalParkTtlSeconds,onChange:e=>w({approvalParkTtlSeconds:e.target.value}),placeholder:"0 = 无限驻留",className:"w-40"})}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hE,{}),"危险反思智能体"]}),(0,eb.jsx)(vJ,{checked:l.dangerEnabled,onCheckedChange:e=>w({dangerEnabled:e})})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,风险调用会先经一个模型「反思」判定(通过 / 拒绝 / 升级人工),再到人工审批门。",(0,eb.jsxs)("span",{className:"text-amber-600 dark:text-amber-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),l.dangerEnabled?(0,eb.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,eb.jsx)(ere,{label:"触发档位(severity)",children:(0,eb.jsxs)(gR,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enJ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ere,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.dangerModelRef,onChange:e=>w({dangerModelRef:e.target.value}),placeholder:"例如 gpt-5-mini(留空 = 默认)"})})]}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uy,{}),"评审智能体"]}),(0,eb.jsx)(vJ,{checked:l.reviewerEnabled,onCheckedChange:e=>w({reviewerEnabled:e})})]}),(0,eb.jsxs)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:["开启后,卡片进入「评审」状态会唤醒 / 派生一个评审智能体复核。",(0,eb.jsxs)("span",{className:"text-sky-700 dark:text-sky-400",children:[" ","会占用一个同伴槽位并消耗预算。"]})]}),l.reviewerEnabled?(0,eb.jsxs)("div",{className:"mt-3 grid gap-3",children:[(0,eb.jsx)(ere,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gR,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:enQ.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ere,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(en9,{icon:(0,eb.jsx)(QZ,{className:"size-4"}),title:"引擎",desc:"新对话的默认引擎与权限模式。",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(ere,{label:"引擎(engine)",children:(0,eb.jsxs)(gR,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:en0.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(ere,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gR,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:en1.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en1.find(e=>e.value===l.permissionMode)?.desc})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"工具开关与禁止命令已移至「工具权限」「禁止命令」标签页,与对话设置保持一致。"})]}):null]})}),(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-10 flex justify-center px-6 pb-4",children:(0,eb.jsxs)("div",{className:(0,eI.cn)("pointer-events-auto flex items-center gap-3 rounded-full border border-border bg-card/95 px-4 py-2 shadow-lg backdrop-blur transition-opacity",v||u||h?"opacity-100":"pointer-events-none opacity-0"),children:[u?(0,eb.jsx)("span",{className:"text-xs text-hot-pink",children:u}):b?(0,eb.jsx)("span",{className:"text-xs text-amber-500",children:b}):v?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"有未保存的更改"}):h?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-emerald-600 dark:text-emerald-400 [&_svg]:size-3.5",children:[(0,eb.jsx)(mJ,{}),"已保存"]}):null,v?(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(en6(t)),children:"撤销"}):null,(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",disabled:!v||c||!!b,onClick:()=>void y(),children:[c?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(mJ,{className:"size-4"}),"保存"]})]})})]}):null}function en4(){return(0,eb.jsxs)("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-xs leading-relaxed text-amber-700 dark:text-amber-300 [&_svg]:mt-0.5 [&_svg]:size-4 [&_svg]:shrink-0",children:[(0,eb.jsx)(hE,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function en3(e){return e&&e>0?String(e):""}function en6(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:en3(t.maxPeers),maxSpawnDepth:en3(t.maxSpawnDepth),budgetTokens:en3(e.budgetTokens),budgetSoftPct:en3(t.budgetSoftPct),budgetHardPct:en3(t.budgetHardPct),approvalParkTtlSeconds:en3(t.approvalParkTtlSeconds),hitlStrictness:t.hitlStrictness??"",awayMode:t.awayMode??"",dangerEnabled:n.enabled??!1,dangerSeverity:n.severity??"",dangerModelRef:n.modelRef??"",reviewerEnabled:r.enabled??!1,reviewerMode:r.mode??"",reviewerModelRef:r.modelRef??"",engine:a.engine??"vantaloom",permissionMode:a.permissionMode??"acceptEdits",allowedTools:a.allowedTools??[],blockedCommands:a.blockedCommands??[],mainModels:a.mainModels??[],ccModel:a.ccModel??"",folders:a.folders??[],hosts:a.hosts??[],baseSettings:a}}function en8(e,t,n){let r=e.trim();if(""===r)return 0;let a=Math.floor(Number(r));return!Number.isFinite(a)||a<=0?0:Math.min(n,Math.max(t,a))}function en7(e){if(!e.title.trim())return"工程名称不能为空";for(let[t,n]of[[e.maxPeers,"同伴并发上限"],[e.maxSpawnDepth,"派生深度上限"],[e.budgetTokens,"预算上限"],[e.budgetSoftPct,"软阈值"],[e.budgetHardPct,"硬阈值"],[e.approvalParkTtlSeconds,"驻留 TTL"]]){let e=t.trim();if(""===e)continue;let r=Number(e);if(!Number.isFinite(r)||r<0)return`${n}需为 ≥ 0 的整数`}}function en9({icon:e,title:t,desc:n,children:r}){return(0,eb.jsxs)("section",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-5 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-foreground [&_svg]:text-muted-foreground",children:[e,(0,eb.jsx)("h2",{className:"text-base font-semibold",children:t})]}),n?(0,eb.jsx)("p",{className:"text-xs leading-relaxed text-muted-foreground",children:n}):null]}),(0,eb.jsx)("div",{className:"flex flex-col gap-4",children:r})]})}function ere({label:e,hint:t,icon:n,children:r}){return(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-sm font-medium text-foreground [&_svg]:text-muted-foreground",children:[n,e]}),r,t?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:t}):null]})}let ert=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function ern({className:e,size:t="default",...n}){return(0,eb.jsxs)("div",{className:"group/native-select relative w-fit has-[select:disabled]:opacity-50","data-slot":"native-select-wrapper",children:[(0,eb.jsx)("select",{"data-slot":"native-select","data-size":t,className:(0,eI.cn)("h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-background px-2.5 py-1.5 pr-8 ui-text-control shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:py-1 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40",e),...n}),(0,eb.jsx)(xf,{className:"pointer-events-none absolute right-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground opacity-60","aria-hidden":"true","data-slot":"native-select-icon"})]})}function err({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,eI.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function era(){return{kind:"human",id:"local",displayName:"我"}}async function eri(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erb(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function ero(e){return erb(`/api/local/issues/${encodeURIComponent(e)}`)}async function erl(e,t){return erb(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function ers(e,t){return erb(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erc(e){await erb(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erd(e,t){return erb(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function eru(e,t,n=era()){return erb(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function erf(e){return(await erb(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function erh(e){return(await erb(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erm(e,t,n,r){return erb(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erp(e){await erb(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erg(e){return(await erb(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erx(e,t,n,r){await erb(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erv extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erb(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw new erv("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let ery=[{status:"backlog",label:"待办池",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},{status:"todo",label:"待领取",dot:"bg-sky-teal",chip:"bg-sky-teal/15 text-sky-teal"},{status:"in_progress",label:"进行中",dot:"bg-vivid-violet",chip:"bg-vivid-violet/15 text-vivid-violet"},{status:"blocked",label:"受阻",dot:"bg-hot-pink",chip:"bg-hot-pink/15 text-hot-pink"},{status:"review",label:"待审核",dot:"bg-amber-500",chip:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},{status:"done",label:"已完成",dot:"bg-emerald-500",chip:"bg-emerald-500/15 text-emerald-600 dark:text-emerald-400"}],erw={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erj=[...ery,erw],erk={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erN=["task","feature","bug","chore","question"],erS={bug:"bg-hot-pink/15 text-hot-pink",feature:"bg-sky-teal/15 text-sky-teal",task:"bg-vivid-violet/15 text-vivid-violet",chore:"bg-muted text-muted-foreground",question:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},erC={low:"低",normal:"普通",high:"高",urgent:"紧急"},erM=["low","normal","high","urgent"],erE={low:"bg-muted text-muted-foreground",normal:"bg-muted text-muted-foreground",high:"bg-amber-500/15 text-amber-600 dark:text-amber-400",urgent:"bg-hot-pink/15 text-hot-pink"},erO={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},erP=["depends_on","blocks","parent","relates_to"],erz={depends_on:{stroke:"#f59e0b",chip:"bg-amber-500/15 text-amber-600 dark:text-amber-400"},blocks:{stroke:"#ec4899",chip:"bg-hot-pink/15 text-hot-pink"},parent:{stroke:"#8b5cf6",chip:"bg-vivid-violet/15 text-vivid-violet"},relates_to:{stroke:"#14b8a6",chip:"bg-sky-teal/15 text-sky-teal"}},erI={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function erA(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})}let erT={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},erR={safe:"bg-sky-teal/15 text-sky-teal",normal:"bg-muted text-muted-foreground",risky:"bg-amber-500/15 text-amber-600 dark:text-amber-400",dangerous:"bg-hot-pink/15 text-hot-pink"},erD=(0,ek.default)("link-2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]),er_=(0,ek.default)("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);function erL({issueId:e,projectId:t,open:n,onClose:r,onChange:a,onDeleted:i}){let[o,l]=ew.useState(null),[s,c]=ew.useState([]),[d,u]=ew.useState([]),[f,h]=ew.useState([]),[m,p]=ew.useState(!1),[g,x]=ew.useState(!1),[v,b]=ew.useState(""),[y,w]=ew.useState(""),j=ew.useCallback(async()=>{if(e){p(!0);try{let[n,r,a,i]=await Promise.all([ero(e),erf(e).catch(()=>[]),erh(t).catch(()=>[]),eri(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hF.error(e instanceof Error?e.message:"加载 issue 失败")}finally{p(!1)}}},[e,t]);ew.useEffect(()=>{n&&e&&j(),n||(l(null),c([]),u([]),h([]),b(""),w(""))},[n,e,j]);let k=ew.useCallback(async()=>{u(await erh(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erm(t,o.id,e,n),await k()}catch(e){hF.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erp(e),await k()}catch(e){hF.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await ers(o.id,e);l(t),a?.(t);let n=await erf(o.id).catch(()=>s);c(n)}catch(e){hF.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erd(o.id,era());l(e),a?.(e);let t=await erf(o.id).catch(()=>s);c(t),hF.success("认领成功")}catch(e){e instanceof erv&&409===e.status?(hF.error("认领失败:该 issue 已被他人认领"),j()):hF.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await eru(o.id,v.trim()),b("");let e=await erf(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hF.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function O(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erc(o.id),i?.(o.id),r()}catch(e){hF.error(e instanceof Error?e.message:"删除失败")}finally{x(!1)}}}let P=o?.progress??{percent:0,checklist:[]};function z(e){return 0===e.length?P.percent:Math.round(e.filter(e=>e.done).length/e.length*100)}async function I(e){let t=P.checklist.map((t,n)=>n===e?{...t,done:!t.done}:t);await C({progress:{percent:z(t),checklist:t}})}async function A(e){let t=e.trim();if(!t)return;let n=[...P.checklist,{text:t,done:!1}];await C({progress:{percent:z(n),checklist:n}})}async function T(e){let t=P.checklist.filter((t,n)=>n!==e);await C({progress:{percent:z(t),checklist:t}})}let R=ew.useMemo(()=>{if(!o)return[];let e=new Map(f.map(e=>[e.id,e]));return d.filter(e=>e.fromIssueId===o.id||e.toIssueId===o.id).map(t=>{let n=t.fromIssueId===o.id,r=n?t.toIssueId:t.fromIssueId;return{link:t,outgoing:n,other:e.get(r)??null,otherId:r}})},[d,o,f]);return(0,eb.jsx)(dC,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsxs)(fv,{className:"max-h-[88vh] w-[calc(100%-2rem)] max-w-3xl gap-0 overflow-hidden p-0 sm:max-w-3xl",children:[(0,eb.jsx)(fw,{className:"sr-only",children:o?`#${o.number} ${o.title}`:"issue 详情"}),(0,eb.jsx)(fj,{className:"sr-only",children:"查看并编辑该 issue 的状态、负责人、进度、关联与活动。"}),!o||m?(0,eb.jsx)("div",{className:"flex h-64 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})}):(0,eb.jsxs)("div",{className:"flex max-h-[88vh] flex-col",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-3 border-b border-border px-5 py-4 pr-12",children:[(0,eb.jsxs)("span",{className:"mt-0.5 shrink-0 rounded-md bg-muted px-2 py-0.5 font-mono text-xs text-muted-foreground",children:["#",o.number]}),(0,eb.jsx)("h2",{className:"min-w-0 flex-1 break-words text-base font-semibold",children:o.title})]}),(0,eb.jsxs)("div",{className:"grid flex-1 grid-cols-1 gap-0 overflow-y-auto md:grid-cols-[1fr_300px]",children:[(0,eb.jsxs)("div",{className:"flex flex-col gap-5 px-5 py-4",children:[(0,eb.jsx)(er$,{label:"标题",children:(0,eb.jsx)(eA,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(er$,{label:"描述",children:(0,eb.jsx)(y6,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(er$,{label:`进度 \xb7 ${P.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeC,{value:P.percent,className:"h-2"}),(0,eb.jsx)("div",{className:"flex flex-col gap-1.5",children:P.checklist.map((e,t)=>(0,eb.jsxs)("div",{className:"group flex items-center gap-2 text-sm",children:[(0,eb.jsx)(xF,{checked:e.done,onCheckedChange:()=>void I(t)}),(0,eb.jsx)("span",{className:(0,eI.cn)("min-w-0 flex-1 break-words",e.done&&"text-muted-foreground line-through"),children:e.text}),(0,eb.jsx)("button",{type:"button",onClick:()=>void T(t),className:"shrink-0 text-muted-foreground opacity-0 transition hover:text-hot-pink group-hover:opacity-100",children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(erF,{onAdd:e=>void A(e)})]})}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"活动"}),(0,eb.jsx)("div",{className:"flex flex-col gap-3",children:0===s.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/60",children:"暂无活动"}):s.map(e=>{let t=e.actor?.kind==="human"?"human":"agent",n=e.actor?.displayName??"系统";return(0,eb.jsxs)("div",{className:"flex gap-2.5",children:[(0,eb.jsx)(erV,{kind:t,small:!0}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 text-xs",children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:n}),(0,eb.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:erI[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:erA(e.createdAt)})]}),e.body?(0,eb.jsx)("p",{className:"mt-0.5 whitespace-pre-wrap break-words text-sm text-secondary-foreground",children:e.body}):null]})]},e.id)})}),(0,eb.jsxs)("div",{className:"mt-1 flex items-end gap-2",children:[(0,eb.jsx)(y6,{value:v,onChange:e=>b(e.target.value),rows:2,placeholder:"写评论…",className:"min-h-9"}),(0,eb.jsx)(ez.Button,{size:"sm",disabled:!v.trim()||g,onClick:()=>void E(),children:(0,eb.jsx)(er_,{className:"size-4"})})]})]})]}),(0,eb.jsxs)("div",{className:"flex flex-col gap-4 border-t border-border px-5 py-4 md:border-l md:border-t-0",children:[(0,eb.jsx)(er$,{label:"状态",children:(0,eb.jsx)(ern,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erj.map(e=>(0,eb.jsx)(err,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(er$,{label:"优先级",children:(0,eb.jsx)(ern,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erM.map(e=>(0,eb.jsx)(err,{value:e,children:erC[e]},e))})}),(0,eb.jsx)(er$,{label:"类型",children:(0,eb.jsx)(ern,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erN.map(e=>(0,eb.jsx)(err,{value:e,children:erk[e]},e))})}),(0,eb.jsx)(er$,{label:"负责人",children:o.assignee?(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-lg border border-border px-2.5 py-1.5",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-sm",children:[(0,eb.jsx)(erV,{kind:o.assignee.kind,small:!0}),(0,eb.jsx)("span",{className:"truncate",children:o.assignee.displayName})]}),(0,eb.jsx)("button",{type:"button",className:"shrink-0 text-xs text-muted-foreground hover:text-hot-pink",onClick:()=>void C({assignee:null}),children:"取消"})]}):(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"w-full",disabled:g,onClick:()=>void M(),children:[(0,eb.jsx)(lW,{className:"size-4"})," 认领"]})}),(0,eb.jsx)(er$,{label:"标签",children:(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:0===o.labels.length?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:"暂无标签"}):o.labels.map(e=>(0,eb.jsxs)("span",{className:"group inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground",children:[e,(0,eb.jsx)("button",{type:"button",onClick:()=>void C({labels:o.labels.filter(t=>t!==e)}),className:"text-muted-foreground/60 hover:text-hot-pink",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e))}),(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:e=>{e.preventDefault();let t=y.trim();t&&!o.labels.includes(t)&&C({labels:[...o.labels,t]}),w("")},children:[(0,eb.jsx)(eA,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lJ,{className:"size-4"})})]})]})}),(0,eb.jsx)(er$,{label:"关联 issue",children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[0===R.length?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:"暂无关联"}):(0,eb.jsx)("div",{className:"flex flex-col gap-1",children:R.map(({link:e,outgoing:t,other:n,otherId:r})=>{let a=erz[e.kind];return(0,eb.jsxs)("div",{className:"group flex items-center gap-1.5 rounded-md border border-border px-2 py-1 text-xs",children:[(0,eb.jsx)(erD,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",erO[e.kind]]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("span",{className:"font-mono text-muted-foreground",children:["#",n.number]})," ",n.title]}):(0,eb.jsx)("span",{className:"font-mono text-muted-foreground/60",children:r.slice(0,8)})}),(0,eb.jsx)("button",{type:"button",disabled:g,onClick:()=>void S(e.id),title:"删除关联",className:"shrink-0 text-muted-foreground opacity-0 transition hover:text-hot-pink group-hover:opacity-100 disabled:opacity-30",children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(erB,{currentIssueId:o.id,candidates:f,existingLinks:d,disabled:g,onAdd:N})]})}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-col gap-1 pt-2 text-xs text-muted-foreground/70",children:[(0,eb.jsxs)("span",{children:["创建于 ",erA(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",erA(o.updatedAt)]})]}),(0,eb.jsxs)(ez.Button,{variant:"ghost",size:"sm",className:"text-hot-pink hover:bg-hot-pink/10 hover:text-hot-pink",disabled:g,onClick:()=>void O(),children:[(0,eb.jsx)(bo,{className:"size-4"})," 删除 issue"]})]})]})]})]})})}function er$({label:e,children:t}){return(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:e}),t]})}function erF({onAdd:e}){let[t,n]=ew.useState("");return(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:r=>{r.preventDefault(),e(t),n("")},children:[(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lJ,{className:"size-4"})})]})}function erB({currentIssueId:e,candidates:t,existingLinks:n,disabled:r,onAdd:a}){let[i,o]=ew.useState(!1),[l,s]=ew.useState(""),[c,d]=ew.useState("depends_on"),u=ew.useMemo(()=>{let t=new Set;for(let r of n)r.fromIssueId===e&&t.add(r.toIssueId),r.toIssueId===e&&t.add(r.fromIssueId);return t},[n,e]),f=ew.useMemo(()=>{let n=l.trim().toLowerCase();return t.filter(t=>t.id!==e&&!u.has(t.id)).filter(e=>!n||e.title.toLowerCase().includes(n)||`#${e.number}`.includes(n)||String(e.number).includes(n)).slice(0,8)},[t,e,u,l]);return i?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5 rounded-lg border border-vivid-violet/40 bg-card p-2",children:[(0,eb.jsx)(ern,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:erP.map(e=>(0,eb.jsx)(err,{value:e,children:erO[e]},e))}),(0,eb.jsx)(eA,{autoFocus:!0,value:l,onChange:e=>s(e.target.value),placeholder:"搜索 issue(编号 / 标题)",className:"h-8"}),(0,eb.jsx)("div",{className:"flex max-h-40 flex-col gap-0.5 overflow-y-auto",children:0===f.length?(0,eb.jsx)("span",{className:"px-1 py-1.5 text-xs text-muted-foreground/60",children:"无可关联的 issue"}):f.map(e=>(0,eb.jsxs)("button",{type:"button",disabled:r,onClick:async()=>{await a(e.id,c),o(!1),s("")},className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-left text-xs transition hover:bg-muted disabled:opacity-50",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:e.title})]},e.id))}),(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",onClick:()=>{o(!1),s("")},children:"取消"})})]}):(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"w-full",disabled:r,onClick:()=>o(!0),children:[(0,eb.jsx)(lJ,{className:"size-4"})," 添加关联"]})}function erV({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,eI.cn)("inline-flex shrink-0 items-center justify-center rounded-full",t?"size-5":"size-6","agent"===e?"bg-vivid-violet/15 text-vivid-violet":"bg-sky-teal/15 text-sky-teal"),title:"agent"===e?"Agent":"人类",children:"agent"===e?(0,eb.jsx)(uy,{className:n}):(0,eb.jsx)(VC,{className:n})})}let erH=["backlog","todo","in_progress","blocked","review","done","cancelled"],erU={backlog:{border:"border-ash-gray/50",dot:"bg-ash-gray"},todo:{border:"border-sky-teal/50",dot:"bg-sky-teal"},in_progress:{border:"border-vivid-violet/50",dot:"bg-vivid-violet"},blocked:{border:"border-hot-pink/50",dot:"bg-hot-pink"},review:{border:"border-amber-500/50",dot:"bg-amber-500"},done:{border:"border-emerald-500/50",dot:"bg-emerald-500"},cancelled:{border:"border-ash-gray/40",dot:"bg-ash-gray"}};function erq({issues:e,links:t,loading:n,onOpenIssue:r}){let{placed:a,byId:i,width:o,height:l}=ew.useMemo(()=>{let t=new Map;for(let n of e){let e=t.get(n.status)??[];e.push(n),t.set(n.status,e)}for(let e of t.values())e.sort((e,t)=>e.sortOrder!==t.sortOrder?e.sortOrder-t.sortOrder:e.createdAt.localeCompare(t.createdAt));let n=erH.filter(e=>(t.get(e)?.length??0)>0),r=[],a=0;n.forEach((e,n)=>{let i=t.get(e)??[];a=Math.max(a,i.length),i.forEach((e,t)=>{r.push({issue:e,x:32+280*n,y:32+84*t})})});let i=new Map(r.map(e=>[e.issue.id,e]));return{placed:r,byId:i,width:n.length>0?64+184*n.length+(n.length-1)*96:64,height:Math.max(64+56*a+28*Math.max(0,a-1),120)}},[e]),s=ew.useMemo(()=>t.map(e=>{let t=i.get(e.fromIssueId),n=i.get(e.toIssueId);return t&&n?{link:e,from:t,to:n}:null}).filter(e=>!!e),[t,i]);if(n)return(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})});if(0===e.length)return(0,eb.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-sm text-muted-foreground/70",children:[(0,eb.jsx)(QG,{className:"size-6"}),"暂无 issue,先在看板中创建"]});let c=s.length>0;return(0,eb.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[c?(0,eb.jsx)("div",{className:"mx-5 mb-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground",children:["depends_on","blocks","parent","relates_to"].map(e=>(0,eb.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"inline-block h-0.5 w-4 rounded-full",style:{backgroundColor:erz[e].stroke}}),erO[e]]},e))}):(0,eb.jsxs)("div",{className:"mx-5 mb-2 flex items-center gap-2 rounded-lg border border-dashed border-border bg-muted/30 px-3 py-2 text-xs text-muted-foreground",children:[(0,eb.jsx)(QG,{className:"size-3.5 shrink-0"}),"还没有任何依赖关系。在某张卡片详情的「关联 issue」中添加依赖 / 阻塞 / 父级,即可在此看到请求图谱。"]}),(0,eb.jsx)("div",{className:"flex-1 overflow-auto px-5 pb-4",children:(0,eb.jsxs)("div",{className:"relative",style:{width:o,height:l},children:[(0,eb.jsxs)("svg",{className:"pointer-events-none absolute inset-0",width:o,height:l,children:[(0,eb.jsx)("defs",{children:["depends_on","blocks","parent","relates_to"].map(e=>(0,eb.jsx)("marker",{id:`arrow-${e}`,viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto-start-reverse",children:(0,eb.jsx)("path",{d:"M 0 0 L 10 5 L 0 10 z",fill:erz[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=erW(t,n),a=erW(n,t),i=erz[e.kind].stroke,o=(r.x+a.x)/2,l=(r.y+a.y)/2;return(0,eb.jsxs)("g",{children:[(0,eb.jsx)("line",{x1:r.x,y1:r.y,x2:a.x,y2:a.y,stroke:i,strokeWidth:1.75,markerEnd:`url(#arrow-${e.kind})`}),(0,eb.jsx)("text",{x:o,y:l-4,textAnchor:"middle",className:"fill-muted-foreground",style:{fontSize:10},children:erO[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=erU[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,eI.cn)("absolute flex flex-col justify-center gap-0.5 rounded-lg border bg-card px-2.5 py-1.5 text-left shadow-sm transition hover:border-vivid-violet hover:shadow-md",i.border),title:`#${e.number} ${e.title}`,children:[(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 shrink-0 rounded-full",i.dot)}),(0,eb.jsxs)("span",{className:"font-mono text-[11px] text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"ml-auto truncate text-[10px] text-muted-foreground/70",children:(a=e.status,erj.find(e=>e.status===a)??{status:a,label:a,dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"}).label})]}),(0,eb.jsx)("span",{className:"truncate text-xs font-medium text-foreground",children:e.title})]},e.id)})]})})]})}function erW(e,t){let n=e.x+92,r=e.y+28,a=t.x+92,i=t.y+28,o=a-n,l=i-r;if(0===o&&0===l)return{x:n,y:r};let s=Math.min(0!==o?92/Math.abs(o):1/0,0!==l?28/Math.abs(l):1/0);return{x:n+o*s,y:r+l*s}}let erK="application/x-vantaloom-issue";function erG({projectId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState("board"),[c,d]=ew.useState(!0),[u,f]=ew.useState(!1),[h,m]=ew.useState(null),[p,g]=ew.useState(null),[x,v]=ew.useState(null),[b,y]=ew.useState(null),[w,j]=ew.useState(!1),[k,N]=ew.useState(null),S=ew.useCallback(async t=>{t?.silent||f(!0);try{let[t,r,i]=await Promise.all([eri(e),erh(e).catch(()=>[]),erg(e).catch(()=>[])]);n(t),a(r),o(i),m(null)}catch(e){m(e instanceof Error?e.message:"加载看板失败")}finally{d(!1),f(!1)}},[e]);ew.useEffect(()=>{d(!0),S({silent:!0});let e=setInterval(()=>void S({silent:!0}),1e4),t=()=>void S({silent:!0});return window.addEventListener("focus",t),()=>{clearInterval(e),window.removeEventListener("focus",t)}},[S]);let C=ew.useMemo(()=>{let e={};for(let t of[...ery,erw])e[t.status]=[];for(let n of t)(e[n.status]??=[]).push(n);for(let t of Object.values(e))t.sort((e,t)=>e.sortOrder!==t.sortOrder?e.sortOrder-t.sortOrder:e.createdAt.localeCompare(t.createdAt));return e},[t]);async function M(e,r,a){let i,o,l=t.find(t=>t.id===e);if(!l)return;let s=(C[r]??[]).filter(t=>t.id!==e);if(a){let e=s.findIndex(e=>e.id===a);e>=0&&(o=s[e]?.sortOrder,i=e>0?s[e-1]?.sortOrder:void 0)}if(void 0===i&&void 0===o){let e=s[s.length-1];i=e?.sortOrder}let c=void 0!==i&&void 0!==o?(i+o)/2:void 0!==i?i+1e3:void 0!==o?o-1e3:1e3;if(l.status!==r||l.sortOrder!==c){g(null),n(t=>t.map(t=>t.id===e?{...t,status:r,sortOrder:c}:t));try{await ers(e,{status:r,sortOrder:c})}catch(e){n(t),g(e instanceof Error?`移动失败:${e.message}`:"移动失败,已撤销")}}}function E(e,t,n){e.preventDefault(),e.stopPropagation(),v(null);let r=e.dataTransfer.getData(erK)||e.dataTransfer.getData("text/plain");r&&M(r,t,n)}async function O(e,t,n){g(null);try{await erx(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erv&&404===e.status||g(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),S({silent:!0})}let P=w?[...ery,erw]:ery;return(0,eb.jsxs)(eee,{children:[(0,eb.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 px-5 py-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:["board"===l?(0,eb.jsx)(ert,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(QG,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h1",{className:"text-sm font-semibold text-foreground",children:"board"===l?"看板":"图谱"}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground",children:[t.length," 个 issue"]})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[p?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-3.5"}),p]}):null,(0,eb.jsxs)("div",{className:"flex items-center rounded-lg border border-border p-0.5",children:[(0,eb.jsxs)("button",{type:"button",onClick:()=>s("board"),className:(0,eI.cn)("flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium transition","board"===l?"bg-vivid-violet/15 text-vivid-violet":"text-muted-foreground hover:text-foreground"),children:[(0,eb.jsx)(ert,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,eI.cn)("flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium transition","graph"===l?"bg-vivid-violet/15 text-vivid-violet":"text-muted-foreground hover:text-foreground"),children:[(0,eb.jsx)(QG,{className:"size-3.5"}),"图谱"]})]}),"board"===l?(0,eb.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)("input",{type:"checkbox",checked:w,onChange:e=>j(e.target.checked),className:"size-3.5 accent-vivid-violet"}),"显示已取消"]}):null,(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void S(),disabled:u,children:[(0,eb.jsx)(bi,{className:(0,eI.cn)("size-4",u&&"animate-spin")}),"刷新"]})]})]}),i.length>0?(0,eb.jsx)(erX,{approvals:i,onResolve:O}):null,c?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,eb.jsx)(eM,{className:"size-6 animate-spin text-muted-foreground"})}):h?(0,eb.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-sm text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-5"}),h,(0,eb.jsx)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void S(),children:"重试"})]}):"graph"===l?(0,eb.jsx)(erq,{issues:t,links:r,onOpenIssue:e=>y(e)}):(0,eb.jsx)("div",{className:(0,eI.cn)("grid flex-1 content-start gap-x-3 gap-y-5 overflow-y-auto px-5 pb-4","grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-6"),children:P.map(t=>{let r=C[t.status]??[],a=x===t.status,i=k===t.status;return(0,eb.jsxs)("section",{onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",x!==t.status&&v(t.status)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||v(e=>e===t.status?null:e)},onDrop:e=>E(e,t.status),className:"flex min-w-0 flex-col gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 px-1",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2 shrink-0 rounded-full",t.dot)}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:t.label}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded-full px-1.5 py-0.5 text-[11px] font-medium",t.chip),children:r.length})]}),(0,eb.jsx)("button",{type:"button",title:"新建 issue",onClick:()=>N(e=>e===t.status?null:t.status),className:"flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-muted hover:text-foreground",children:(0,eb.jsx)(lJ,{className:"size-4"})})]}),(0,eb.jsxs)("div",{className:(0,eI.cn)("flex min-h-[5rem] flex-col divide-y divide-border overflow-hidden rounded-lg border bg-card transition-colors",a?"border-vivid-violet ring-1 ring-vivid-violet/40":"border-border"),children:[i?(0,eb.jsx)(erJ,{onCancel:()=>N(null),onCreate:async r=>{try{let a=await erl(e,{...r}),i="backlog"===t.status?a:await ers(a.id,{status:t.status}).catch(()=>a);n(e=>[...e,i]),N(null)}catch(e){g(e instanceof Error?`新建失败:${e.message}`:"新建失败")}}}):null,0!==r.length||i?r.map(e=>(0,eb.jsx)(erZ,{issue:e,onOpen:()=>y(e.id),onDropBefore:n=>E(n,t.status,e.id)},e.id)):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center px-3 py-8 text-xs text-muted-foreground/60",children:a?"松开以移动到此状态":"暂无 issue"})]})]},t.status)})})]}),(0,eb.jsx)(erL,{issueId:b,projectId:e,open:null!==b,onClose:()=>y(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),erh(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))})]})}function erX({approvals:e,onResolve:t}){return(0,eb.jsxs)("section",{className:"mx-5 mb-3 flex flex-col gap-2 rounded-xl border border-amber-500/40 bg-amber-500/5 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(en_,{className:"size-4 text-amber-600 dark:text-amber-400"}),(0,eb.jsx)("h2",{className:"text-sm font-semibold text-foreground",children:"待审批"}),(0,eb.jsx)("span",{className:"rounded-full bg-amber-500/15 px-1.5 py-0.5 text-[11px] font-medium text-amber-600 dark:text-amber-400",children:e.length}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"同伴会话有待你确认的工具调用"})]}),(0,eb.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2 xl:grid-cols-3",children:e.map(e=>(0,eb.jsx)(erY,{approval:e,onResolve:t},e.approvalId))})]})}function erY({approval:e,onResolve:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState(!1),[o,l]=ew.useState("");async function s(n,a){r(n);try{await t(e,n,a)}finally{r(null)}}let c=e.riskFactors??[];return(0,eb.jsxs)("article",{className:"flex flex-col gap-2 rounded-lg border border-border bg-card p-2.5 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsx)("span",{className:"break-words font-mono text-[13px] font-medium text-foreground",children:e.toolName}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erR[e.classification]),children:erT[e.classification]})]}),e.title?(0,eb.jsx)("p",{className:"break-words text-[13px] text-foreground",children:e.title}):null,e.reason?(0,eb.jsx)("p",{className:"break-words text-xs text-muted-foreground",children:e.reason}):null,c.length>0?(0,eb.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,eb.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground/70",children:"风险"}),(0,eb.jsx)("ul",{className:"flex flex-wrap gap-1",children:c.map((e,t)=>(0,eb.jsx)("li",{className:"rounded-full bg-hot-pink/10 px-1.5 py-0.5 text-[10px] text-hot-pink",children:e},`${e}-${t}`))})]}):null,(0,eb.jsxs)("div",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/70",children:[(0,eb.jsx)(jk,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",title:e.conversationTitle,children:e.conversationTitle||"(未命名会话)"}),(0,eb.jsx)("span",{className:"shrink-0","aria-hidden":!0,children:"·"}),(0,eb.jsx)("span",{className:"shrink-0",children:erA(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(eA,{autoFocus:!0,value:o,onChange:e=>l(e.target.value),placeholder:"拒绝理由(可选)",className:"h-8",onKeyDown:e=>{"Enter"===e.key&&s("reject",o.trim()),"Escape"===e.key&&(i(!1),l(""))}}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",disabled:null!==n,onClick:()=>{i(!1),l("")},children:"取消"}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"destructive",disabled:null!==n,onClick:()=>void s("reject",o.trim()),children:["reject"===n?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(fg.XIcon,{className:"size-4"}),"确认拒绝"]})]})]}):(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",disabled:null!==n,onClick:()=>i(!0),children:[(0,eb.jsx)(fg.XIcon,{className:"size-4"}),"拒绝"]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",disabled:null!==n,onClick:()=>void s("approve"),children:["approve"===n?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(mJ,{className:"size-4"}),"通过"]})]})]})}function erZ({issue:e,onOpen:t,onDropBefore:n}){let r=e.progress,a=r?.checklist.length??0,i=r?.checklist.filter(e=>e.done).length??0;return(0,eb.jsxs)("article",{draggable:!0,onDragStart:t=>{t.dataTransfer.effectAllowed="move",t.dataTransfer.setData(erK,e.id),t.dataTransfer.setData("text/plain",e.id)},onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move"},onDrop:n,onClick:t,className:"group cursor-pointer px-3 py-2.5 transition-colors hover:bg-muted/50 active:cursor-grabbing",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erS[e.type]),children:erk[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,eI.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erE[e.priority]),children:erC[e.priority]}):null,(0,eb.jsx)("span",{className:"ml-auto flex min-w-0 shrink items-center justify-end gap-1 text-[11px] text-muted-foreground",children:e.assignee?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(erV,{kind:e.assignee.kind,small:!0}),(0,eb.jsx)("span",{className:"truncate",children:e.assignee.displayName})]}):(0,eb.jsx)("span",{className:"text-muted-foreground/50",children:"未认领"})})]}),(0,eb.jsx)("h3",{className:"mt-1 break-words text-sm font-medium leading-snug text-foreground",children:e.title}),e.labels.length>0?(0,eb.jsx)("div",{className:"mt-1.5 flex flex-wrap gap-1",children:e.labels.slice(0,4).map(e=>(0,eb.jsx)("span",{className:"rounded-full bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:e},e))}):null,r&&(r.percent>0||a>0)?(0,eb.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,eb.jsx)("div",{className:"h-1.5 flex-1 overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:"h-full rounded-full bg-vivid-violet transition-all",style:{width:`${Math.max(0,Math.min(100,r.percent))}%`}})}),(0,eb.jsx)("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:a>0?`${i}/${a}`:`${r.percent}%`})]}):null]})}function erJ({onCreate:e,onCancel:t}){let[n,r]=ew.useState(""),[a,i]=ew.useState("task"),[o,l]=ew.useState("normal"),[s,c]=ew.useState(!1);return(0,eb.jsxs)("form",{className:"flex flex-col gap-2 rounded-lg border border-vivid-violet/40 bg-card p-2.5",onSubmit:async t=>{t.preventDefault(),n.trim()&&(c(!0),await e({title:n.trim(),type:a,priority:o}),c(!1))},children:[(0,eb.jsx)(eA,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:"issue 标题",className:"h-8"}),(0,eb.jsxs)("div",{className:"flex gap-1.5",children:[(0,eb.jsx)(ern,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erN.map(e=>(0,eb.jsx)(err,{value:e,children:erk[e]},e))}),(0,eb.jsx)(ern,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erM.map(e=>(0,eb.jsx)(err,{value:e,children:erC[e]},e))})]}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",onClick:t,children:"取消"}),(0,eb.jsx)(ez.Button,{type:"submit",size:"sm",disabled:!n.trim()||s,children:s?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"新建"})]})]})}let erQ=(0,ek.default)("file-code-corner",[["path",{d:"M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35",key:"1wthlu"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m5 16-3 3 3 3",key:"331omg"}],["path",{d:"m9 22 3-3-3-3",key:"lsp7cz"}]]),er0=(0,ek.default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);function er1({projectId:e,onOpenSettings:t}){let[n,r]=ew.useState(),[a,i]=ew.useState({sessionCount:0,runningCount:0,tokenTotal:0,issueCount:0,openIssueCount:0,pendingApprovalCount:0}),[o,l]=ew.useState(!0),[s,c]=ew.useState([]),[d,u]=ew.useState([]),[f,h]=ew.useState(),[m,p]=ew.useState(),[g,x]=ew.useState(),[v,b]=ew.useState(!0),y=ew.useCallback(async()=>{b(!0);let[t,n]=await Promise.all([enI(e).catch(()=>void 0),enA(e).catch(()=>void 0)]);t&&p(t),n&&x(n),b(!1)},[e]);return ew.useEffect(()=>{let e=!0;return p(void 0),x(void 0),y().finally(()=>{if(!e)return}),()=>{e=!1}},[y]),ew.useEffect(()=>{let t=!0;async function n(){try{let n,a=await enE(e);if(!t)return;r(a);let o=await enT(e).catch(()=>[]);if(!t)return;c(o);let l=await eri(e).catch(()=>[]);if(!t)return;u(l);let s=await erg(e).catch(()=>[]);if(!t)return;let d=await enz(e).catch(()=>void 0);if(!t)return;d&&h(d);let f=l.filter(e=>"done"!==e.status&&"cancelled"!==e.status).length;if(a.canvasId)try{n=(await QF(a.canvasId)).nodes.length}catch{n=void 0}if(!t)return;i({sessionCount:o.length,runningCount:o.filter(e=>!0===e.running).length,tokenTotal:o.reduce((e,t)=>e+(t.runUsage?.totalTokens??t.tokens??0),0),canvasNodeCount:n,issueCount:l.length,openIssueCount:f,pendingApprovalCount:s.length})}catch{}finally{t&&l(!1)}}l(!0),n();let a=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(a)}},[e]),(0,eb.jsx)(eee,{children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-5xl flex-col gap-6 px-6 py-8",children:[(0,eb.jsxs)("header",{className:"flex flex-col gap-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground",children:[(0,eb.jsx)(uw,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(er2,{count:a.pendingApprovalCount}),t?(0,eb.jsxs)("button",{type:"button",onClick:()=>t(e),title:"工程设置",className:"ml-auto flex items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-3.5",children:[(0,eb.jsx)(eec,{}),"设置"]}):null]}),(0,eb.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:n?.title??(o?"加载中…":"工程")}),n?.summary?(0,eb.jsx)("p",{className:"max-w-2xl text-sm text-muted-foreground",children:n.summary}):(0,eb.jsx)("p",{className:"text-sm text-muted-foreground/60",children:"暂无工程摘要"})]}),(0,eb.jsxs)("section",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4",children:[(0,eb.jsx)(er3,{icon:(0,eb.jsx)(uy,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(ert,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(GI,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(er3,{icon:(0,eb.jsx)(uw,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(er5,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(er4,{peers:s,issues:d,loading:o}),(0,eb.jsxs)("section",{className:"grid grid-cols-1 gap-3 lg:grid-cols-2",children:[(0,eb.jsx)(er9,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eae,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function er2({count:e}){return e<=0?(0,eb.jsx)("span",{className:"rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground/60",children:"无待审批"}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 rounded-full bg-amber-500/15 px-2 py-0.5 text-[11px] font-medium text-amber-600 dark:text-amber-400 [&_svg]:size-3",title:"同伴会话有待你确认的工具调用,可在看板顶部处理",children:[(0,eb.jsx)(en_,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function er5({projectId:e,budget:t,loading:n,onUpdated:r}){let[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1),[d,u]=ew.useState();if(n&&!t)return(0,eb.jsxs)("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(eeT,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})]});if(!t)return null;let f=Math.max(0,t.pct),h=Math.min(100,f),m=t.hard?"hard":t.soft?"soft":"normal";async function p(){let n=o.trim(),a=Number(n);if(""===n||!Number.isFinite(a)||a<0)return void u("请输入 ≥ 0 的整数(0 表示恢复全局默认)");c(!0),u(void 0);try{let n=Math.floor(a),o=await enP(e,{budgetTokens:n}),l=await enz(e).catch(()=>void 0);r(l??{...t,budget:n||t.budget},o),i(!1)}catch(e){u(e instanceof Error?e.message:"保存失败")}finally{c(!1)}}return(0,eb.jsxs)("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(eeT,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,eI.cn)("text-xs font-medium","hard"===m?"text-hot-pink":"soft"===m?"text-amber-500":"text-muted-foreground"),children:"hard"===m?"已用尽":"soft"===m?"接近上限":"正常"})]}),(0,eb.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,eb.jsxs)("span",{className:"text-2xl font-semibold text-foreground",children:[f,"%"]}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground/70",children:["已用 ",t.used.toLocaleString("zh-CN")," /"," ",t.budget.toLocaleString("zh-CN")," token"]})]}),(0,eb.jsx)("div",{className:"h-2 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("h-full rounded-full transition-all","hard"===m?"bg-hot-pink":"soft"===m?"bg-amber-500":"bg-sky-teal"),style:{width:`${h}%`}})}),(0,eb.jsx)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground/70",children:a?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("input",{type:"number",min:0,step:1e5,value:o,autoFocus:!0,disabled:s,onChange:e=>l(e.target.value),onKeyDown:e=>{"Enter"===e.key&&p(),"Escape"===e.key&&(i(!1),u(void 0))},placeholder:"0 = 全局默认",className:"w-40 rounded-md border border-border bg-background px-2 py-1 text-foreground outline-none focus:border-sky-teal"}),(0,eb.jsxs)("button",{type:"button",disabled:s,onClick:()=>void p(),className:"flex items-center gap-1 rounded-md border border-border bg-background px-2 py-1 text-foreground hover:bg-muted [&_svg]:size-3 disabled:opacity-50",children:[s?(0,eb.jsx)(eM,{className:"size-3 animate-spin"}):(0,eb.jsx)(mJ,{}),"保存"]}),(0,eb.jsx)("button",{type:"button",disabled:s,onClick:()=>{i(!1),u(void 0)},className:"flex items-center gap-1 rounded-md px-1.5 py-1 hover:bg-muted [&_svg]:size-3 disabled:opacity-50",children:(0,eb.jsx)(fg.XIcon,{})}),d?(0,eb.jsx)("span",{className:"text-hot-pink",children:d}):null]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("span",{children:["预算上限 ",t.budget.toLocaleString("zh-CN")," token"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>{l(String(t.budget)),u(void 0),i(!0)},className:"flex items-center gap-1 rounded-md px-1.5 py-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-3",children:[(0,eb.jsx)(HA,{}),"调整"]})]})})]})}function er4({peers:e,issues:t,loading:n}){let r=ew.useMemo(()=>{let e=new Map,n=e=>"done"===e.status||"cancelled"===e.status;for(let r of t){if(r.assignee?.kind!=="agent")continue;let t=r.assignee.id,a=e.get(t);(!a||n(a)&&!n(r))&&e.set(t,r)}return e},[t]);return n&&0===e.length?null:(0,eb.jsxs)("section",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(uy,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"同伴会话"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground/60",children:e.length})]}),0===e.length?(0,eb.jsx)("p",{className:"py-1 text-xs text-muted-foreground/60",children:"暂无同伴会话。在工程内的对话里用多代理工具拉起同伴即可在此显示。"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-1",children:e.map(e=>{let t=!0===e.running,n=r.get(e.id),a=function(e){let t=e.settings?.folders?.[0]?.trim();if(!t)return"";let n=t.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return n[n.length-1]??""}(e);return(0,eb.jsxs)("li",{className:"flex items-center gap-2 rounded-lg px-2 py-1.5 text-[13px] hover:bg-muted/50",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 shrink-0 rounded-full",t?"animate-pulse bg-green-500":"border border-muted-foreground/50 bg-transparent"),"aria-label":t?"运行中":"空闲"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:e.title||"(未命名)"}),n?(0,eb.jsxs)("span",{className:"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",title:n.title,children:["#",n.number]}):null,a?(0,eb.jsxs)("span",{className:"flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground/70 [&_svg]:size-3",children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"max-w-32 truncate",children:a})]}):null,(0,eb.jsx)("span",{className:"shrink-0 text-[11px] text-muted-foreground/60",children:t?"运行中":"空闲"})]},e.id)})})]})}function er3({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,eI.cn)("flex flex-col gap-2 rounded-xl border border-border bg-card p-4 shadow-sm",i&&"opacity-70"),children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[e,(0,eb.jsx)("span",{className:"text-[13px]",children:t})]}),(0,eb.jsx)("div",{className:"text-2xl font-semibold text-foreground",children:a?(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"}):"number"==typeof n?n.toLocaleString("zh-CN"):n}),r?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/70",children:r}):null]})}function er6({loading:e,onRefresh:t}){return(0,eb.jsxs)("button",{type:"button",disabled:e,onClick:t,title:"刷新",className:"flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-50 [&_svg]:size-3",children:[(0,eb.jsx)(bi,{className:(0,eI.cn)(e&&"animate-spin")}),"刷新"]})}let er8=["bg-sky-teal","bg-vivid-violet","bg-hot-pink","bg-amber-500","bg-emerald-500","bg-blue-500","bg-orange-500","bg-cyan-500"];function er7(e,t){return"其他"===t?"bg-ash-gray":er8[e%er8.length]??"bg-ash-gray"}function er9({stats:e,loading:t,onRefresh:n}){let r=!!e&&e.totalFiles>0,a=!!e&&!e.folder.trim();return(0,eb.jsxs)("div",{className:"flex min-h-32 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(erQ,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(er6,{loading:t,onRefresh:n})]}),t&&!e?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})}):r?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,eb.jsx)("span",{className:"text-2xl font-semibold text-foreground",children:e.totalLines.toLocaleString("zh-CN")}),(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground/70",children:["行 · ",e.totalFiles.toLocaleString("zh-CN")," 个文件"]}),e.truncated?(0,eb.jsx)("span",{className:"rounded-full bg-amber-500/10 px-2 py-0.5 text-[11px] text-amber-500",children:"部分统计(已截断)"}):null]}),(0,eb.jsx)("div",{className:"flex h-2 w-full overflow-hidden rounded-full bg-muted",children:e.languages.map((e,t)=>(0,eb.jsx)("div",{className:(0,eI.cn)("h-full",er7(t,e.language)),style:{width:`${Math.max(e.pct,1)}%`},title:`${e.language} \xb7 ${e.pct}%`},e.language))}),(0,eb.jsx)("ul",{className:"flex flex-col gap-1.5",children:e.languages.slice(0,8).map((e,t)=>(0,eb.jsxs)("li",{className:"flex items-center gap-2 text-[13px]",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("size-2.5 shrink-0 rounded-sm",er7(t,e.language))}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-foreground",children:e.language}),(0,eb.jsxs)("span",{className:"shrink-0 text-xs text-muted-foreground/70",children:[e.lines.toLocaleString("zh-CN")," 行"]}),(0,eb.jsxs)("span",{className:"w-10 shrink-0 text-right text-xs font-medium text-muted-foreground",children:[e.pct,"%"]})]},e.language))})]}):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)("span",{className:"rounded-full border border-border/60 bg-background px-3 py-1 text-xs text-muted-foreground",children:a?"未配置工作目录":"暂无代码统计"})})]})}function eae({graph:e,loading:t,onRefresh:n}){let r=!!e&&e.commits.length>0,a=!!e&&!e.repoRoot.trim();return(0,eb.jsxs)("div",{className:"flex min-h-32 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-sm",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-muted-foreground [&_svg]:shrink-0",children:[(0,eb.jsx)(Vk,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"Git 提交图谱"}),e?.branch?(0,eb.jsx)("span",{className:"truncate rounded-full bg-muted px-2 py-0.5 text-[11px] text-muted-foreground",children:e.branch}):null]}),(0,eb.jsx)(er6,{loading:t,onRefresh:n})]}),t&&!e?(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin text-muted-foreground"})}):r?(0,eb.jsx)("ul",{className:"flex flex-col",children:e.commits.map((t,n)=>{let r=n===e.commits.length-1,a=t.parents.length>1,i=t.refs.split(",").map(e=>e.trim().replace(/^HEAD ->\s*/,"").replace(/^tag:\s*/,"")).filter(Boolean);return(0,eb.jsxs)("li",{className:"flex gap-2.5",children:[(0,eb.jsxs)("div",{className:"flex w-3 shrink-0 flex-col items-center",children:[(0,eb.jsx)("span",{className:(0,eI.cn)("mt-1.5 flex size-3 items-center justify-center rounded-full",a?"bg-vivid-violet text-white [&_svg]:size-2":"border-2 border-sky-teal bg-background"),children:a?(0,eb.jsx)(er0,{}):null}),r?null:(0,eb.jsx)("span",{className:"w-px flex-1 bg-border"})]}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1 pb-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"font-mono text-[11px] text-muted-foreground",children:t.shortSha}),i.map(e=>(0,eb.jsx)("span",{className:"shrink-0 rounded-full bg-sky-teal/10 px-1.5 py-0.5 text-[10px] font-medium text-sky-teal",children:e},e))]}),(0,eb.jsx)("p",{className:"truncate text-[13px] text-foreground",children:t.subject||"(无提交信息)"}),(0,eb.jsxs)("p",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/70",children:[a?(0,eb.jsx)("span",{className:"text-vivid-violet",children:"合并"}):null,(0,eb.jsx)("span",{className:"truncate",children:t.author}),(0,eb.jsx)("span",{"aria-hidden":!0,children:"·"}),(0,eb.jsx)("span",{className:"shrink-0",children:function(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let n=Date.now()-t;if(n<6e4)return"刚刚";if(n<36e5)return`${Math.floor(n/6e4)} 分钟前`;if(n<864e5)return`${Math.floor(n/36e5)} 小时前`;if(n<6048e5)return`${Math.floor(n/864e5)} 天前`;let r=new Date(t),a=String(r.getMonth()+1).padStart(2,"0"),i=String(r.getDate()).padStart(2,"0");return`${r.getFullYear()}-${a}-${i}`}(t.date)})]})]})]},t.sha)})}):(0,eb.jsx)("div",{className:"flex flex-1 items-center justify-center py-4",children:(0,eb.jsx)("span",{className:"rounded-full border border-border/60 bg-background px-3 py-1 text-xs text-muted-foreground",children:a?"非 Git 仓库":"暂无提交"})})]})}let eat={delete:"Delete",empty:"Drop here",title:"Trash"};function ean({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eat,...n},[c,d]=ew.useState(!1),u=ew.useRef(0),f=e||c||t.length>0;return ew.useEffect(()=>{e||(u.current=0,d(!1))},[e]),(0,eb.jsx)("div",{"data-slot":"trash-drop-zone","data-visible":f,"data-drag-inside":c,className:(0,eI.cn)("fixed top-4 left-1/2 z-50 -translate-x-1/2 transition-[opacity,transform] duration-300 ease-[cubic-bezier(.2,.8,.2,1)]",f?"pointer-events-auto translate-y-0 opacity-100":"pointer-events-none -translate-y-5 opacity-0",r),onDragEnter:function(e){e.preventDefault(),u.current+=1,d(!0)},onDragLeave:function(){u.current=Math.max(0,u.current-1),0===u.current&&d(!1)},onDragOver:function(e){e.preventDefault(),e.dataTransfer.dropEffect="move",d(!0)},onDrop:function(e){e.preventDefault(),e.stopPropagation(),u.current=0,d(!1);let t=e.dataTransfer.getData("application/vnd.vantaloom.clip-id")||e.dataTransfer.getData("text/plain"),n=e.dataTransfer.getData("text/plain")||t||"Dropped item",r=e.dataTransfer.getData("application/vnd.vantaloom.clip-kind");t&&a?.({id:t,title:n,meta:r,nativeEvent:e})},...l,children:(0,eb.jsx)("div",{className:(0,eI.cn)("min-w-12 overflow-hidden rounded-xl border-2 border-background bg-destructive text-destructive-foreground shadow-lg shadow-black/15 transition-[width,min-height,background-color,border-color,padding,box-shadow] duration-300","dark:border-destructive dark:bg-background dark:text-destructive",c||t.length>0?"w-64 border-dashed bg-destructive/12 p-2 text-destructive dark:bg-destructive/8":"flex size-12 items-center justify-center p-0"),children:c||t.length>0?(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-h-14 items-center justify-center gap-2 rounded-lg border border-dashed border-destructive/55 bg-destructive/8 px-3 text-sm font-medium text-destructive",children:[(0,eb.jsx)(bo,{className:"size-4"}),(0,eb.jsx)("span",{children:s.empty})]}),t.length>0?(0,eb.jsx)("div",{className:"grid max-h-36 gap-1 overflow-y-auto pr-1",children:t.map(e=>(0,eb.jsxs)("div",{className:"flex h-8 items-center gap-2 rounded-md border border-destructive/25 bg-background/80 px-2 text-foreground",children:[(0,eb.jsx)("button",{type:"button","aria-label":`Restore ${e.title}`,className:"flex size-5 shrink-0 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",onClick:()=>o?.(e),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs font-medium",children:e.title}),e.meta?(0,eb.jsx)("span",{className:"shrink-0 text-xs text-muted-foreground",children:e.meta}):null]},e.id))}):null,t.length>0?(0,eb.jsx)("button",{type:"button",className:"h-8 rounded-md bg-destructive px-3 text-xs font-medium text-destructive-foreground transition-colors hover:bg-destructive/90 dark:border dark:border-destructive dark:bg-background dark:text-destructive dark:hover:bg-destructive/10",onClick:()=>i?.(t),children:s.delete}):null]}):(0,eb.jsx)(bo,{className:"size-5"})})})}function ear({hidden:e,items:t,trashItems:n,trashClipboardItems:r,draggingId:a,onDraggingChange:i,onItemsChange:o,onTrashItemsChange:l,onTrashClipboardItemsChange:s}){let c=ew.useRef(0),[d,u]=ew.useState(!1);return(ew.useEffect(()=>{u(!0)},[]),d)?(0,ib.createPortal)((0,eb.jsxs)("div",{className:(0,eI.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(ean,{active:!e&&void 0!==a,items:e?[]:n,className:(0,eI.cn)(e&&"pointer-events-none"),labels:{delete:"删除",empty:"拖入暂存"},onDrop:({id:e,title:n,meta:r})=>{let a=t.find(t=>t.id===e);a&&(s(t=>({...t,[e]:a})),l(t=>t.some(t=>t.id===e)?t:[...t,{id:e,title:n,meta:r,icon:a.icon}]))},onDelete:e=>{let t=new Set(e.map(e=>e.id));l(e=>e.filter(e=>!t.has(e.id))),s(e=>{let n={...e};for(let e of t)delete n[e];return n})},onItemRestore:e=>{let n=r[e.id];n&&o([n,...t.filter(e=>e.id!==n.id)]),l(t=>t.filter(t=>t.id!==e.id)),s(t=>{let n={...t};return delete n[e.id],n})}}),t.length>0?(0,eb.jsx)("div",{className:(0,eI.cn)("pointer-events-auto absolute top-4 right-4 w-80 max-w-[calc(100vw-2rem)] transition-[opacity,transform] duration-200",e&&"pointer-events-none -translate-y-2 opacity-0"),children:(0,eb.jsx)(X2,{items:t,title:"剪切板",labels:{empty:"剪切板为空",dragHandle:"拖拽卡片"},expansionDirection:"down-left",removeOnExternalDrop:!0,maxExpandedHeight:420,onItemDuplicate:(e,{item:n,index:r})=>{let a,i,l,s,d;return c.current+=1,a=n.payloads?.[G5],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[G4],a&&i&&(i[G5]={...a,config:{...a.config}}),l&&i&&(i[G4]={...l,config:l.config?{...l.config}:l.config}),s={...n,id:`${n.id}-copy-${c.current}`,title:`${n.title} copy`,payloads:i,dragData:{...n.dragData,...a?{"application/vnd.vantaloom.dashboard-widget-config":JSON.stringify(a.config)}:{}}},void((d=[...t]).splice(r+1,0,s),o(d))},onItemsRemove:e=>o(e),onItemsReorder:e=>o(e),onItemDragStart:({item:e})=>i(e.id),onItemDragEnd:()=>i(void 0)})}):null]}),document.body):null}let eaa=(0,ek.default)("languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]),eai=(0,ek.default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),eao=(0,ek.default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]),eal=(0,ek.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),eas=(0,ek.default)("notebook-pen",[["path",{d:"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4",key:"re6nr2"}],["path",{d:"M2 6h4",key:"aawbzj"}],["path",{d:"M2 10h4",key:"l0bgd4"}],["path",{d:"M2 14h4",key:"1gsvsf"}],["path",{d:"M2 18h4",key:"1bu2t1"}],["path",{d:"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z",key:"pqwjuv"}]]),eac=(0,ek.default)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),ead=(0,ek.default)("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]),eau=(0,ek.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),eaf=(0,ek.default)("users-round",[["path",{d:"M18 21a8 8 0 0 0-16 0",key:"3ypg7q"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3",key:"10s06x"}]]),eah=(0,ek.default)("wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);var eam="Collapsible",[eap,eag]=cr(eam),[eax,eav]=eap(eam),eab=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=cu({prop:r,defaultProp:a??!1,onChange:o,caller:eam});return(0,eb.jsx)(eax,{scope:n,disabled:i,contentId:cc(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cp.div,{"data-state":eaS(s),"data-disabled":i?"":void 0,...l,ref:t})})});eab.displayName=eam;var eay="CollapsibleTrigger",eaw=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eav(eay,n);return(0,eb.jsx)(cp.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":eaS(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:ci(e.onClick,a.onOpenToggle)})});eaw.displayName=eay;var eaj="CollapsibleContent",eak=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eav(eaj,e.__scopeCollapsible);return(0,eb.jsx)(cA,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaN,{...r,ref:t,present:e})})});eak.displayName=eaj;var eaN=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eav(eaj,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,ca.useComposedRefs)(t,c),u=ew.useRef(0),f=u.current,h=ew.useRef(0),m=h.current,p=o.open||l,g=ew.useRef(p),x=ew.useRef(void 0);return ew.useEffect(()=>{let e=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(e)},[]),co(()=>{let e=c.current;if(e){x.current=x.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration="0s",e.style.animationName="none";let t=e.getBoundingClientRect();u.current=t.height,h.current=t.width,g.current||(e.style.transitionDuration=x.current.transitionDuration,e.style.animationName=x.current.animationName),s(r)}},[o.open,r]),(0,eb.jsx)(cp.div,{"data-state":eaS(o.open),"data-disabled":o.disabled?"":void 0,id:o.contentId,hidden:!p,...i,ref:d,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:p&&a})});function eaS(e){return e?"open":"closed"}var eaC=e.i(91e3);let eaM={"new-canvas":"canvas","all-canvases":"canvas","open-recent-canvas":"canvas","new-project":"canvas","project-overview":"canvas","project-settings":"canvas","project-conversation":"canvas",kanban:"canvas","new-agent-conversation":"agent","open-recent-conversation":"agent",preferences:"settings","preferences-model-routes":"settings","preferences-agent-config":"settings","preferences-subagent-config":"settings","preferences-cc-engine-config":"settings","preferences-system-prompt":"settings","preferences-skills":"settings","preferences-memory":"settings","preferences-layout":"settings","network-topology":"settings","network-settings":"settings","check-update":"settings",account:"settings"};function eaE({navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:i,onOpenConversation:o,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversationSettings:m,onConversationDeleted:p,onAccountSettings:g,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b,hideCanvas:y,className:w}){let j=eaM[n]??(eaH.some(e=>e.items.some(e=>e.id===n))?"settings":y?"agent":"canvas"),[k,N]=ew.useState(j);ew.useEffect(()=>{N(j)},[j]);let S=t.find(e=>e.id===k);return(0,eb.jsxs)("aside",{"data-slot":"flat-sidebar",className:(0,eI.cn)("flex h-full w-72 flex-col rounded-xl border border-border bg-sidebar p-3 text-sidebar-foreground shadow-sm",w),children:[(0,eb.jsx)("nav",{className:"mb-5 flex gap-1 rounded-lg bg-muted/70 p-1",children:e.map(e=>{let t=e.id===k;return(0,eb.jsxs)("button",{type:"button",onClick:()=>N(e.id),className:(0,eI.cn)("flex flex-1 items-center justify-center gap-1.5 rounded-md py-1.5 text-[13px] font-medium transition-colors [&_svg]:size-4",t?"border border-border/50 bg-background text-foreground shadow-sm":"text-muted-foreground hover:bg-background/50 hover:text-foreground"),children:[e.icon,(0,eb.jsx)("span",{className:"truncate",children:e.label})]},e.id)})}),"canvas"===k?(0,eb.jsx)(eaO,{activeProjectId:a,activeConversationId:r,hideCanvas:y,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):"agent"===k?(0,eb.jsx)(eaT,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eaB,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(eaX,{onItemSelect:i,onAccountSettings:g})]})}function eaO({activeProjectId:e,activeConversationId:t,hideCanvas:n,onOpenProjectCanvas:r,onOpenProjectOverview:a,onOpenProjectKanban:i,onOpenProjectSettings:o,onNewProjectConversation:l,onOpenProjectConversation:s,onNewProject:c,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,subagentTree:h,activeSubagentPath:m,onOpenSubagent:p}){let{projects:g,loading:x,refresh:v}=function(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),a=ew.useRef(!0),i=ew.useCallback(async()=>{try{let e=await enM();if(!a.current)return;let n=[...e].sort((e,t)=>t.updatedAt>e.updatedAt?1:-1);t(n)}catch{}finally{a.current&&r(!1)}},[]);return ew.useEffect(()=>{a.current=!0,i();let e=setInterval(()=>void i(),1e4);return()=>{a.current=!1,clearInterval(e)}},[i]),{projects:e,loading:n,refresh:()=>void i()}}(),b=x&&0===g.length;return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mb-6 space-y-0.5",children:(0,eb.jsx)(eaW,{icon:ead,label:Q7.canvasNew,onClick:()=>c?.()})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden pr-1",children:(0,eb.jsx)("div",{className:"space-y-0.5",children:b?(0,eb.jsx)(eaK,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:Q7.projectEmpty}):g.map(c=>(0,eb.jsx)(eaP,{project:c,active:c.id===e,activeConversationId:t,hideCanvas:n,onOpenProjectCanvas:r,onOpenProjectOverview:a,onOpenProjectKanban:i,onOpenProjectSettings:o,onNewProjectConversation:l,onOpenProjectConversation:s,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,onConversationsChanged:v,subagentTree:h,activeSubagentPath:m,onOpenSubagent:p},c.id))})})]})}function eaP({project:e,active:t,activeConversationId:n,hideCanvas:r,onOpenProjectCanvas:a,onOpenProjectOverview:i,onOpenProjectKanban:o,onOpenProjectSettings:l,onNewProjectConversation:s,onOpenProjectConversation:c,onOpenConversation:d,onOpenConversationSettings:u,onConversationDeleted:f,onConversationsChanged:h,subagentTree:m,activeSubagentPath:p,onOpenSubagent:g}){let[x,v]=ew.useState(t),[b,y]=ew.useState([]),[w,j]=ew.useState(0);ew.useEffect(()=>{let t=!0,n=async()=>{try{let n=await erg(e.id);t&&j(n.length)}catch{}};n();let r=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(r)}},[e.id]),ew.useEffect(()=>{if(!x)return;let t=!0,n=async()=>{try{let n=await enT(e.id);t&&y(n)}catch{}};n();let r=setInterval(()=>void n(),1e4);return()=>{t=!1,clearInterval(r)}},[x,e.id]);let k=ew.useCallback(async e=>{try{await sW(e.id,e.ownerMachineId)}catch{}f?.(e.id),y(t=>t.filter(t=>t.id!==e.id)),h?.()},[f,h]),N=ew.useCallback(async t=>{try{let n=await sZ(t.id,void 0,t.ownerMachineId);c?c(e.id,n.conversation.id,n.conversation.ownerMachineId):d(n.conversation.id,n.conversation.ownerMachineId),h?.()}catch{}},[d,c,e.id,h]);return(0,eb.jsxs)(eab,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,eI.cn)("group flex items-center rounded-lg text-[13px] transition-colors",t?"bg-muted text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground"),children:[(0,eb.jsx)(eaw,{asChild:!0,children:(0,eb.jsx)("button",{type:"button","aria-label":x?"收起工程":"展开工程",className:"shrink-0 rounded-md p-1.5 pl-2 text-muted-foreground hover:text-foreground",onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(xf,{className:(0,eI.cn)("size-4 transition-transform",x?"rotate-0":"-rotate-90")})})}),(0,eb.jsxs)("button",{type:"button",title:e.title,onClick:()=>{v(!0),i?.(e.id)},className:"flex min-w-0 flex-1 items-center gap-2 rounded-lg py-2 pr-3 text-left",children:[(0,eb.jsx)(uw,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.title}),w>0?(0,eb.jsx)("span",{title:`${w} 项待审批`,className:"shrink-0 rounded-full bg-amber-500/15 px-1.5 py-0.5 text-[10px] font-semibold leading-none text-amber-600 dark:bg-amber-400/20 dark:text-amber-300",children:w}):null,t&&(0,eb.jsx)(eaG,{active:!0})]})]}),(0,eb.jsx)(eak,{className:"mt-0.5",children:(0,eb.jsx)("div",{className:"ml-[1.125rem] border-l border-border/60 pl-1.5",children:(0,eb.jsxs)("div",{className:"space-y-0.5",children:[r?null:(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(uw,{className:"size-4"}),label:Q7.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(eai,{className:"size-4"}),label:Q7.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(eaz,{icon:(0,eb.jsx)(eec,{className:"size-4"}),label:Q7.projectSettings,onClick:()=>l?.(e.id)}),function(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map,a=[];for(let t of e){let e=t.forkOriginId;if(e&&n.has(e)){let n=r.get(e)??[];n.push(t),r.set(e,n)}else a.push(t)}let i=new Set((t.activeSubagentPath??[]).map(e=>e.id)),o=t.activeSubagentPath?.[t.activeSubagentPath.length-1]?.id,l=(e,n)=>{let a=e.id!==t.activeConversationId||(t.subagentTree?.length??0)===0?null:(0,eb.jsx)(eaR,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(ea$,{conversation:e,depth:n,active:e.id===t.activeConversationId,onOpenConversation:t.onOpenConversation,onOpenConversationSettings:t.onOpenConversationSettings,onDelete:t.onDelete,onFork:t.onFork}),a?(0,eb.jsx)("div",{style:n>0?{marginLeft:14*n}:void 0,children:a}):null,(r.get(e.id)??[]).map(e=>l(e,n+1))]},e.id)};return a.map(e=>l(e,0))}(b,{activeConversationId:n,onOpenConversation:(t,n)=>{c?c(e.id,t,n):d(t,n)},onOpenConversationSettings:u,onDelete:k,onFork:N,subagentTree:m,activeSubagentPath:p,onOpenSubagent:g}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s?.(e.id),title:Q7.projectNewConversation,className:"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[13px] text-muted-foreground/80 transition-colors hover:bg-muted hover:text-foreground",children:[(0,eb.jsx)(lJ,{className:"size-4 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:Q7.projectNewConversation})]})]})})})]})}function eaz({icon:e,label:t,onClick:n}){return(0,eb.jsxs)("button",{type:"button",onClick:n,className:"flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-[13px] text-foreground/80 transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",children:[e,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]})}let eaI="__all__",eaA={status:"all",location:eaI,sort:"recent"};function eaT({activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a,subagentTree:i,activeSubagentPath:o,onOpenSubagent:l}){let{recents:s,refresh:c,loading:d,machineNames:u}=function(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState({}),o=ew.useRef(!0),l=ew.useCallback(async()=>{try{let{conversations:e,machineNames:n}=await sO();if(!o.current)return;let r=[...e].filter(e=>!e.projectId).sort((e,t)=>t.updatedAt>e.updatedAt?1:-1);t(r),i(n)}catch{}finally{o.current&&r(!1)}},[]);return ew.useEffect(()=>{o.current=!0,l();let e=setInterval(()=>void l(),1e4);return()=>{o.current=!1,clearInterval(e)}},[l]),{recents:e,refresh:()=>void l(),loading:n,machineNames:a}}(),[f,h]=ew.useState(eaA),m=ew.useMemo(()=>{let e=new Set;for(let t of s)e.add(t.ownerMachineId||sS);return Array.from(e)},[s]),p=ew.useCallback(e=>sC(e)?"本机":u[e]??e,[u]),g=ew.useMemo(()=>{let e=s.filter(e=>{let t=!0===e.running;return("running"!==f.status||!!t)&&("idle"!==f.status||!t)&&(f.location===eaI||(e.ownerMachineId||sS)===f.location)});return"name"===f.sort?e.sort((e,t)=>e.title.localeCompare(t.title,"zh-CN",{sensitivity:"base"})):e.sort((e,t)=>t.updatedAt>e.updatedAt?1:-1),e},[s,f]),x=g.filter(e=>!0===e.running),v=g.filter(e=>!0!==e.running),b=f.status!==eaA.status||f.location!==eaA.location||f.sort!==eaA.sort,y=d&&0===s.length,w=ew.useCallback(async e=>{try{await sW(e.id,e.ownerMachineId)}catch{}a?.(e.id),c()},[a,c]),j=ew.useCallback(async e=>{try{let t=await sZ(e.id,void 0,e.ownerMachineId);await c(),n(t.conversation.id,t.conversation.ownerMachineId)}catch{}},[c,n]),k=ew.useMemo(()=>new Set((o??[]).map(e=>e.id)),[o]),N=o?.[o.length-1]?.id,S=t=>{let a=new Map(t.map(e=>[e.id,e])),o=new Map,s=[];for(let e of t){let t=e.forkOriginId;if(t&&a.has(t)){let n=o.get(t)??[];n.push(e),o.set(t,n)}else s.push(e)}let c=(t,a)=>{let s=t.id!==e||(i?.length??0)===0?null:(0,eb.jsx)(eaR,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(ea$,{conversation:t,depth:a,active:t.id===e,onOpenConversation:n,onOpenConversationSettings:r,onDelete:w,onFork:j}),s?(0,eb.jsx)("div",{style:a>0?{marginLeft:14*a}:void 0,children:s}):null,(o.get(t.id)??[]).map(e=>c(e,a+1))]},t.id)};return s.map(e=>c(e,0))};return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"mb-6 space-y-0.5","data-tour":"new-conversation",children:(0,eb.jsx)(eaW,{icon:tc,label:Q7.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden pr-1",children:[x.length>0?(0,eb.jsxs)("div",{className:"mb-4",children:[(0,eb.jsxs)("div",{className:"mb-2 flex items-center gap-2 px-3",children:[(0,eb.jsx)("span",{className:"size-1.5 shrink-0 rounded-full bg-green-500"}),(0,eb.jsx)("span",{className:"text-[13px] text-muted-foreground",children:"正在运行"})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:S(x)})]}):null,(0,eb.jsxs)("div",{className:"mb-2 flex items-center justify-between px-3",children:[(0,eb.jsx)("span",{className:"text-[13px] text-muted-foreground",children:"最近"}),(0,eb.jsx)(ea_,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(eaK,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eaR({nodes:e,depth:t,ancestors:n,activeIds:r,activeLeafId:a,onOpen:i}){let o=e.filter(e=>(function e(t,n){return!!(t.running||n.has(t.id))||(t.children??[]).some(t=>e(t,n))})(e,r));return 0===o.length?null:(0,eb.jsx)("div",{className:"space-y-0.5",children:o.map(e=>{let o=Hl(e.subagentType),l=o.Icon,s=[...n,{id:e.id,ownerMachineId:e.ownerMachineId,name:e.subagentName,subagentType:e.subagentType}],c=e.id===a;return(0,eb.jsxs)("div",{children:[(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-xs transition-colors",c?"bg-accent text-accent-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"),style:{paddingLeft:18+14*t},onClick:()=>i?.(s),title:e.subagentName||o.label,children:[(0,eb.jsx)("span",{className:"shrink-0 text-muted-foreground/40",children:"└"}),(0,eb.jsx)(l,{className:(0,eI.cn)("size-3.5 shrink-0",o.color)}),(0,eb.jsx)("span",{className:"truncate",children:e.subagentName||`${o.label}子代理`}),e.running?(0,eb.jsx)(eM,{className:"ml-auto size-3 shrink-0 animate-spin text-muted-foreground"}):null]}),(0,eb.jsx)(eaR,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eaD={all:"全部",running:"运行中",idle:"空闲"};function ea_({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===eaI?"全部":a(e.location);return(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,eI.cn)("relative rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",n&&"text-foreground"),children:[(0,eb.jsx)(QZ,{className:"size-4"}),n?(0,eb.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-2 rounded-full border border-sidebar bg-primary"}):null]})}),(0,eb.jsxs)(yJ,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(y1,{children:"筛选与排序"}),(0,eb.jsxs)(yZ,{children:[(0,eb.jsxs)(y4,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eaD[e.status]})]}),(0,eb.jsx)(y3,{children:(0,eb.jsxs)(yq,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(y0,{value:"all",children:"全部"}),(0,eb.jsx)(y0,{value:"running",children:"运行中"}),(0,eb.jsx)(y0,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(yZ,{children:[(0,eb.jsxs)(y4,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"运行位置"}),(0,eb.jsx)("span",{className:"max-w-24 truncate text-xs text-muted-foreground",children:i})]}),(0,eb.jsx)(y3,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(yq,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(y0,{value:eaI,children:"全部"}),r.map(e=>(0,eb.jsx)(y0,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(y2,{}),(0,eb.jsx)(y1,{children:"排序"}),(0,eb.jsxs)(yq,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(y0,{value:"recent",children:"最近活动"}),(0,eb.jsx)(y0,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y2,{}),(0,eb.jsx)(yQ,{onSelect:()=>t(eaA),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eaL({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,eI.cn)("relative inline-flex shrink-0 select-none items-center justify-center rounded px-1 py-px text-[9px] font-semibold leading-none tracking-wide",t?"bg-violet-500/15 text-violet-600 dark:bg-violet-400/20 dark:text-violet-300":"bg-sky-500/15 text-sky-600 dark:bg-sky-400/20 dark:text-sky-300"),children:[t?"CC":"RC",!t&&(0,eb.jsx)("span",{className:"absolute -right-0.5 -top-0.5 size-1.5 rounded-full bg-sky-400 dark:bg-sky-300"})]})}function ea$({conversation:e,active:t,depth:n=0,onOpenConversation:r,onOpenConversationSettings:a,onDelete:i,onFork:o}){let l=!0===e.running,s=e.settings?.engine??"vantaloom",c="vantaloom"!==s?(0,eb.jsxs)("span",{className:"flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden",children:[(0,eb.jsx)(eaL,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eaF,{title:l?`${e.title} \xb7 运行中`:e.title,label:e.title,labelNode:c,active:t,running:l,depth:n,onOpen:()=>r(e.id,e.ownerMachineId),onOpenSettings:a?()=>a(e.id,e.ownerMachineId):void 0,onDelete:i?()=>i(e):void 0,onFork:o?()=>o(e):void 0,deleteLabel:"删除会话"})}function eaF({title:e,label:t,labelNode:n,active:r,running:a,depth:i=0,onOpen:o,onOpenSettings:l,onDelete:s,onFork:c,deleteLabel:d="删除"}){let[u,f]=ew.useState(!1),h=!!(l||s||c),m=i>0,p=(0,eb.jsxs)(eb.Fragment,{children:[l?(0,eb.jsxs)(yO,{onSelect:()=>l(),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yO,{onSelect:()=>c(),children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yO,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bo,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,eI.cn)("group relative flex items-center rounded-lg text-[13px] transition-colors",r?"bg-muted text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground"),style:m?{marginLeft:14*i}:void 0,children:[(0,eb.jsxs)("button",{type:"button",title:e,onClick:o,className:"flex min-w-0 flex-1 items-center gap-3 rounded-lg px-3 py-2 text-left",children:[m?(0,eb.jsx)("span",{"aria-hidden":!0,className:"h-4 w-0.5 shrink-0 rounded-full bg-primary/40"}):null,a?(0,eb.jsx)("span",{className:"size-1.5 shrink-0 animate-pulse rounded-full bg-green-500","aria-label":"运行中"}):(0,eb.jsx)(eaG,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsx)("button",{type:"button","aria-label":"更多操作",className:"mr-1 shrink-0 rounded-md p-1 text-muted-foreground opacity-0 transition-opacity hover:bg-background/70 hover:text-foreground focus-visible:opacity-100 group-hover:opacity-100 aria-expanded:opacity-100",children:(0,eb.jsx)(lY,{className:"size-4"})})}),(0,eb.jsxs)(yJ,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(yQ,{onSelect:()=>l(),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yQ,{onSelect:()=>c(),children:[(0,eb.jsx)(Vk,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yQ,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bo,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yv,{children:[(0,eb.jsx)(yy,{asChild:!0,children:g}),(0,eb.jsx)(yE,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(d4,{open:u,onOpenChange:f,children:(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:d}),(0,eb.jsxs)(ug,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eaB({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(wT,{className:"min-h-0 flex-1",viewportClassName:"pr-1",children:(0,eb.jsx)("div",{className:"space-y-0.5",children:r.map(e=>"preferences"===e.id?(0,eb.jsx)(eaU,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eaV,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eaV({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",r?"bg-muted text-foreground [&_svg]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&_svg]:text-muted-foreground"),children:[t,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:n}),r&&(0,eb.jsx)(eaG,{active:!0})]})}let eaH=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uN,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(mZ,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uy,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eaf,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uN,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eec,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eac,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(j_,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(eas,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eai,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(Uh,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(GD,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(QG,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(QG,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(v2,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bi,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eah,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jk,{})}]}];function eaU({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eaH.map(n=>(0,eb.jsx)(eaq,{title:n.title,icon:n.icon,items:n.items,activeWorkspace:e,onItemSelect:t},n.id))})}function eaq({title:e,icon:t,items:n,activeWorkspace:r,onItemSelect:a}){let i=n.some(e=>e.id===r),[o,l]=ew.useState(!0);return(0,eb.jsxs)(eab,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaw,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",i?"text-foreground [&>svg:first-child]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&>svg:first-child]:text-muted-foreground"),children:[t,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e}),(0,eb.jsx)(xf,{className:(0,eI.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eak,{className:"mt-0.5 space-y-0.5",children:n.map(e=>{let t=e.id===r;return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e.id}}),className:(0,eI.cn)("flex w-full items-center gap-3 rounded-lg py-2 pl-9 pr-3 text-left text-[13px] transition-colors [&_svg]:size-4 [&_svg]:shrink-0",t?"bg-muted text-foreground [&_svg]:text-foreground":"text-foreground/80 hover:bg-muted hover:text-foreground [&_svg]:text-muted-foreground"),children:[e.icon,(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.label}),t&&(0,eb.jsx)(eaG,{active:!0})]},e.id)})})]})}function eaW({icon:e,label:t,onClick:n}){return(0,eb.jsxs)("button",{type:"button",onClick:n,className:"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm text-foreground transition-colors hover:bg-muted",children:[(0,eb.jsx)(e,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]})}function eaK(){return(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 px-3 py-3 text-[13px] text-muted-foreground/70",role:"status","aria-live":"polite",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),(0,eb.jsx)("span",{children:"加载中…"})]})}function eaG({active:e}){return(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function eaX({onItemSelect:e,onAccountSettings:t}){let{user:n}=tl(),r=n?.name??Q8.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(y_,{children:[(0,eb.jsx)(y$,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button","data-tour":"account-button",className:"flex w-full items-center justify-between rounded-xl p-2 transition-colors hover:bg-muted",children:[(0,eb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,eb.jsx)("span",{className:"flex size-6 shrink-0 items-center justify-center rounded-full border border-border/60 bg-muted text-[10px] font-semibold text-foreground",children:a}),(0,eb.jsx)("span",{className:"truncate text-sm text-foreground",children:r})]}),(0,eb.jsx)(m0,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(yJ,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(y1,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(yQ,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eec,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(yQ,{disabled:!0,children:[(0,eb.jsx)(eaa,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(yQ,{disabled:!0,children:[(0,eb.jsx)(H7,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(y2,{}),(0,eb.jsxs)(yQ,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Ge,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(eaZ,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y2,{}),(0,eb.jsx)(eaJ,{})]})]})]})})}let eaY=["light","dark","jelly"];function eaZ(){let{resolvedTheme:e,setTheme:t}=(0,hO.useTheme)(),[n,r]=ew.useState(eaC.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaC.appearanceThemeStorageKey)??eaC.defaultAppearanceTheme;r(e),(0,eaC.applyAppearanceTheme)({theme:e})},[]);let a=n===eaC.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=eaY[(eaY.indexOf(a)+1)%eaY.length]??"light";function o(e){r(e),window.localStorage.setItem(eaC.appearanceThemeStorageKey,e),(0,eaC.applyAppearanceTheme)({theme:e})}let l="dark"===a?eal:eau;return(0,eb.jsxs)(yQ,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(eaC.jellyAppearanceTheme);return}o(eaC.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:Q8.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function eaJ(){let{logout:e}=tl();return(0,eb.jsxs)(yQ,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eao,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let eaQ=ew.default.createContext({drawerRef:{current:null},overlayRef:{current:null},onPress:()=>{},onRelease:()=>{},onDrag:()=>{},onNestedDrag:()=>{},onNestedOpenChange:()=>{},onNestedRelease:()=>{},openProp:void 0,dismissible:!1,isOpen:!1,isDragging:!1,keyboardIsOpen:{current:!1},snapPointsOffset:null,snapPoints:null,handleOnly:!1,modal:!1,shouldFade:!1,activeSnapPoint:null,onOpenChange:()=>{},setActiveSnapPoint:()=>{},closeDrawer:()=>{},direction:"bottom",shouldAnimate:{current:!0},shouldScaleBackground:!1,setBackgroundColorOnScale:!0,noBodyStyles:!1,container:null,autoFocus:!1}),ea0=()=>{let e=ew.default.useContext(eaQ);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function ea1(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function ea2(){return ea5(/^iPhone/)||ea5(/^iPad/)||ea5(/^Mac/)&&navigator.maxTouchPoints>1}function ea5(e){return"u">typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}!function(e){if(!e||"u"<typeof document)return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}("[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\n[data-state=closed]\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}");let ea4="u">typeof window?ew.useLayoutEffect:ew.useEffect;function ea3(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let ea6="u">typeof document&&window.visualViewport;function ea8(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function ea7(e){for(ea8(e)&&(e=e.parentElement);e&&!ea8(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let ea9=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eie=0;function eit(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function ein(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=ea7(e);if(t!==document.documentElement&&t!==document.body&&t!==e){let n=t.getBoundingClientRect().top,r=e.getBoundingClientRect().top;e.getBoundingClientRect().bottom>t.getBoundingClientRect().bottom+24&&(t.scrollTop+=r-n)}e=t.parentElement}}function eir(e){return e instanceof HTMLInputElement&&!ea9.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eia(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eii=new WeakMap;function eio(e,t,n=!1){if(!e||!(e instanceof HTMLElement))return;let r={};Object.entries(t).forEach(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):(r[t]=e.style[t],e.style[t]=n)}),n||eii.set(e,r)}let eil=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function eis(e,t){if(!e)return null;let n=window.getComputedStyle(e),r=n.transform||n.webkitTransform||n.mozTransform,a=r.match(/^matrix3d\((.+)\)$/);return a?parseFloat(a[1].split(", ")[eil(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eil(t)?5:4]):null}function eic(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let eid=[.32,.72,0,1],eiu="vaul-dragging";function eif(e){let t=ew.default.useRef(e);return ew.default.useEffect(()=>{t.current=e}),ew.default.useMemo(()=>(...e)=>null==t.current?void 0:t.current.call(t,...e),[])}function eih({prop:e,defaultProp:t,onChange:n=()=>{}}){let[r,a]=function({defaultProp:e,onChange:t}){let n=ew.default.useState(e),[r]=n,a=ew.default.useRef(r),i=eif(t);return ew.default.useEffect(()=>{a.current!==r&&(i(r),a.current=r)},[r,a,i]),n}({defaultProp:t,onChange:n}),i=void 0!==e,o=i?e:r,l=eif(n);return[o,ew.default.useCallback(t=>{if(i){let n="function"==typeof t?t(e):t;n!==e&&l(n)}else a(t)},[i,e,a,l])]}let eim=()=>()=>{},eip=null,eig=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=ea0(),c=eia(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dT,{onMouseUp:u,ref:c,"data-vaul-overlay":"","data-vaul-snap-points":o&&d?"true":"false","data-vaul-snap-points-overlay":o&&i?"true":"false","data-vaul-animate":(null==s?void 0:s.current)?"true":"false",...e})});eig.displayName="Drawer.Overlay";let eix=ew.default.forwardRef(function({onPointerDownOutside:e,style:t,onOpenAutoFocus:n,...r},a){let{drawerRef:i,onPress:o,onRelease:l,onDrag:s,keyboardIsOpen:c,snapPointsOffset:d,activeSnapPointIndex:u,modal:f,isOpen:h,direction:m,snapPoints:p,container:g,handleOnly:x,shouldAnimate:v,autoFocus:b}=ea0(),[y,w]=ew.default.useState(!1),j=eia(a,i),k=ew.default.useRef(null),N=ew.default.useRef(null),S=ew.default.useRef(!1),C=p&&p.length>0;function M(e){k.current=null,S.current=!1,l(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:r,noBodyStyles:a}=ea0(),i=ew.default.useRef(null),o=(0,ew.useMemo)(()=>document.body.style.backgroundColor,[]);function l(){return(window.innerWidth-26)/window.innerWidth}ew.default.useEffect(()=>{if(t&&n){i.current&&clearTimeout(i.current);let t=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");if(!t)return;!function(...e){}(r&&!a?eic(document.body,{background:"black"}):eim,eic(t,{transformOrigin:eil(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eid.join(",")})`}));let n=eic(t,{borderRadius:"8px",overflow:"hidden",...eil(e)?{transform:`scale(${l()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`}:{transform:`scale(${l()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`}});return()=>{n(),i.current=window.setTimeout(()=>{o?document.body.style.background=o:document.body.style.removeProperty("background")},500)}}},[t,n,o])}(),ew.default.useEffect(()=>{C&&window.requestAnimationFrame(()=>{w(!0)})},[]),ew.default.createElement(dL,{"data-vaul-drawer-direction":m,"data-vaul-drawer":"","data-vaul-delayed-snap-points":y?"true":"false","data-vaul-snap-points":h&&C?"true":"false","data-vaul-custom-container":g?"true":"false","data-vaul-animate":(null==v?void 0:v.current)?"true":"false",...r,ref:j,style:d&&d.length>0?{"--snap-point-height":`${d[null!=u?u:0]}px`,...t}:t,onPointerDown:e=>{x||(null==r.onPointerDown||r.onPointerDown.call(r,e),k.current={x:e.pageX,y:e.pageY},o(e))},onOpenAutoFocus:e=>{null==n||n(e),b||e.preventDefault()},onPointerDownOutside:t=>{(null==e||e(t),!f||t.defaultPrevented)?t.preventDefault():c.current&&(c.current=!1)},onFocusOutside:e=>{if(!f)return void e.preventDefault()},onPointerMove:e=>{if(N.current=e,x||(null==r.onPointerMove||r.onPointerMove.call(r,e),!k.current))return;let t=e.pageY-k.current.y,n=e.pageX-k.current.x,a="touch"===e.pointerType?10:2;((e,t,n=0)=>{if(S.current)return!0;let r=Math.abs(e.y),a=Math.abs(e.x),i=a>r,o=["bottom","right"].includes(t)?1:-1;if("left"===t||"right"===t){if(!(e.x*o<0)&&a>=0&&a<=n)return i}else if(!(e.y*o<0)&&r>=0&&r<=n)return!i;return S.current=!0,!0})({x:n,y:t},m,a)?s(e):(Math.abs(n)>a||Math.abs(t)>a)&&(k.current=null)},onPointerUp:e=>{null==r.onPointerUp||r.onPointerUp.call(r,e),k.current=null,S.current=!1,l(e)},onPointerOut:e=>{null==r.onPointerOut||r.onPointerOut.call(r,e),M(N.current)},onContextMenu:e=>{null==r.onContextMenu||r.onContextMenu.call(r,e),N.current&&M(N.current)}})});eix.displayName="Drawer.Content",ew.default.forwardRef(function({preventCycle:e=!1,children:t,...n},r){let{closeDrawer:a,isDragging:i,snapPoints:o,activeSnapPoint:l,setActiveSnapPoint:s,dismissible:c,handleOnly:d,isOpen:u,onPress:f,onDrag:h}=ea0(),m=ew.default.useRef(null),p=ew.default.useRef(!1);function g(){m.current&&window.clearTimeout(m.current),p.current=!1}return ew.default.createElement("div",{onClick:function(){p.current?g():window.setTimeout(()=>{!function(){if(i||e||p.current)return g();if(g(),!o||0===o.length){c||a();return}if(l===o[o.length-1]&&c)return a();let t=o.findIndex(e=>e===l);-1===t||s(o[t+1])}()},120)},onPointerCancel:g,onPointerDown:e=>{d&&f(e),m.current=window.setTimeout(()=>{p.current=!0},250)},onPointerMove:e=>{d&&h(e)},ref:r,"data-vaul-drawer-visible":u?"true":"false","data-vaul-handle":"","aria-hidden":"true",...n},ew.default.createElement("span",{"data-vaul-handle-hitarea":"","aria-hidden":"true"},t))}).displayName="Drawer.Handle";let eiv=function({open:e,onOpenChange:t,children:n,onDrag:r,onRelease:a,snapPoints:i,shouldScaleBackground:l=!1,setBackgroundColorOnScale:s=!0,closeThreshold:c=.25,scrollLockTimeout:d=100,dismissible:u=!0,handleOnly:f=!1,fadeFromIndex:h=i&&i.length-1,activeSnapPoint:m,setActiveSnapPoint:p,fixed:g,modal:x=!0,onClose:v,nested:b,noBodyStyles:y=!1,direction:w="bottom",defaultOpen:j=!1,disablePreventScroll:k=!0,snapToSequentialPoint:N=!1,preventScrollRestoration:S=!1,repositionInputs:C=!0,onAnimationEnd:M,container:E,autoFocus:O=!1}){var P,z;let[I=!1,A]=eih({defaultProp:j,prop:e,onChange:e=>{null==t||t(e),e||b||ed(),setTimeout(()=>{null==M||M(e)},500),e&&!x&&"u">typeof window&&window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"}),e||(document.body.style.pointerEvents="auto")}}),[T,R]=ew.default.useState(!1),[D,_]=ew.default.useState(!1),[L,$]=ew.default.useState(!1),F=ew.default.useRef(null),B=ew.default.useRef(null),V=ew.default.useRef(null),H=ew.default.useRef(null),U=ew.default.useRef(null),q=ew.default.useRef(!1),W=ew.default.useRef(null),K=ew.default.useRef(0),G=ew.default.useRef(!1),X=ew.default.useRef(!j),Y=ew.default.useRef(0),Z=ew.default.useRef(null),J=ew.default.useRef((null==(P=Z.current)?void 0:P.getBoundingClientRect().height)||0),Q=ew.default.useRef((null==(z=Z.current)?void 0:z.getBoundingClientRect().width)||0),ee=ew.default.useRef(0),et=ew.default.useCallback(e=>{i&&e===eo.length-1&&(B.current=new Date)},[]),{activeSnapPoint:en,activeSnapPointIndex:er,setActiveSnapPoint:ea,onRelease:ei,snapPointsOffset:eo,onDrag:el,shouldFade:es,getPercentageDragged:ec}=function({activeSnapPointProp:e,setActiveSnapPointProp:t,snapPoints:n,drawerRef:r,overlayRef:a,fadeFromIndex:i,onSnapPointChange:o,direction:l="bottom",container:s,snapToSequentialPoint:c}){let[d,u]=eih({prop:e,defaultProp:null==n?void 0:n[0],onChange:t}),[f,h]=ew.default.useState("u">typeof window?{innerWidth:window.innerWidth,innerHeight:window.innerHeight}:void 0);ew.default.useEffect(()=>{function e(){h({innerWidth:window.innerWidth,innerHeight:window.innerHeight})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let m=ew.default.useMemo(()=>d===(null==n?void 0:n[n.length-1])||null,[n,d]),p=ew.default.useMemo(()=>{var e;return null!=(e=null==n?void 0:n.findIndex(e=>e===d))?e:null},[n,d]),g=n&&n.length>0&&(i||0===i)&&!Number.isNaN(i)&&n[i]===d||!n,x=ew.default.useMemo(()=>{var e;let t=s?{width:s.getBoundingClientRect().width,height:s.getBoundingClientRect().height}:"u">typeof window?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0};return null!=(e=null==n?void 0:n.map(e=>{let n="string"==typeof e,r=0;if(n&&(r=parseInt(e,10)),eil(l)){let a=n?r:f?e*t.height:0;return f?"bottom"===l?t.height-a:-t.height+a:a}let a=n?r:f?e*t.width:0;return f?"right"===l?t.width-a:-t.width+a:a}))?e:[]},[n,f,s]),v=ew.default.useMemo(()=>null!==p?null==x?void 0:x[p]:null,[x,p]),b=ew.default.useCallback(e=>{var t;let s=null!=(t=null==x?void 0:x.findIndex(t=>t===e))?t:null;o(s),eio(r.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"0"}):eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"1"}),u(null==n?void 0:n[Math.max(s,0)])},[r.current,n,x,i,a,u]);return ew.default.useEffect(()=>{if(d||e){var t;let r=null!=(t=null==n?void 0:n.findIndex(t=>t===e||t===d))?t:-1;x&&-1!==r&&"number"==typeof x[r]&&b(x[r])}},[d,e,n,x,b]),{isLastSnapPoint:m,activeSnapPoint:d,shouldFade:g,getPercentageDragged:function(e,t){if(!n||"number"!=typeof p||!x||void 0===i)return null;let r=p===i-1;if(p>=i&&t)return 0;if(r&&!t)return 1;if(!g&&!r)return null;let a=r?p+1:p-1,o=e/Math.abs(r?x[a]-x[a-1]:x[a+1]-x[a]);return r?1-o:o},setActiveSnapPoint:u,activeSnapPointIndex:p,onRelease:function({draggedDistance:e,closeDrawer:t,velocity:r,dismissible:o}){if(void 0===i)return;let s="bottom"===l||"right"===l?(null!=v?v:0)-e:(null!=v?v:0)+e,d=p===i-1,u=0===p,f=e>0;if(d&&eio(a.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`}),!c&&r>2&&!f)return void(o?t():b(x[0]));if(!c&&r>2&&f&&x&&n)return void b(x[n.length-1]);let h=null==x?void 0:x.reduce((e,t)=>"number"!=typeof e||"number"!=typeof t?e:Math.abs(t-s)<Math.abs(e-s)?t:e),g=eil(l)?window.innerHeight:window.innerWidth;if(r>.4&&Math.abs(e)<.4*g){let e=f?1:-1;return e>0&&m&&n?void b(x[n.length-1]):void(u&&e<0&&o&&t(),null===p||b(x[p+e]))}b(h)},onDrag:function({draggedDistance:e}){if(null===v)return;let t="bottom"===l||"right"===l?v-e:v+e;("bottom"===l||"right"===l)&&t<x[x.length-1]||("top"===l||"left"===l)&&t>x[x.length-1]||eio(r.current,{transform:eil(l)?`translate3d(0, ${t}px, 0)`:`translate3d(${t}px, 0, 0)`})},snapPointsOffset:x}}({snapPoints:i,activeSnapPointProp:m,setActiveSnapPointProp:p,drawerRef:Z,fadeFromIndex:h,overlayRef:F,onSnapPointChange:et,direction:w,container:E,snapToSequentialPoint:N});!function(e={}){let{isDisabled:t}=e;ea4(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eie&&ea2()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=ea3((e=document.documentElement,n="paddingRight",r=`${window.innerWidth-document.documentElement.clientWidth}px`,t=e.style[n],e.style[n]=r,()=>{e.style[n]=t})),window.scrollTo(0,0),d=ea3(eit(document,"touchstart",e=>{((a=ea7(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eit(document,"touchmove",e=>{if(!a||a===document.documentElement||a===document.body)return void e.preventDefault();let t=e.changedTouches[0].pageY,n=a.scrollTop,r=a.scrollHeight-a.clientHeight;0!==r&&((n<=0&&t>i||n>=r&&t<i)&&e.preventDefault(),i=t)},{passive:!1,capture:!0}),eit(document,"touchend",e=>{let t=e.target;eir(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eit(document,"focus",e=>{let t=e.target;eir(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",ea6&&(ea6.height<window.innerHeight?requestAnimationFrame(()=>{ein(t)}):ea6.addEventListener("resize",()=>ein(t),{once:!0}))}))},!0),eit(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eie&&(null==o||o())}}},[t])}({isDisabled:!I||D||!x||L||!T||!C||!k});let{restorePositionSetting:ed}=function({isOpen:e,modal:t,nested:n,hasBeenOpened:r,preventScrollRestoration:a,noBodyStyles:i}){let[o,l]=ew.default.useState(()=>"u">typeof window?window.location.href:""),s=ew.default.useRef(0),c=ew.default.useCallback(()=>{if(ea1()&&null===eip&&e&&!i){eip={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,height:document.body.style.height,right:"unset"};let{scrollX:e,innerHeight:t}=window;document.body.style.setProperty("position","fixed","important"),Object.assign(document.body.style,{top:`${-s.current}px`,left:`${-e}px`,right:"0px",height:"auto"}),window.setTimeout(()=>window.requestAnimationFrame(()=>{let e=t-window.innerHeight;e&&s.current>=t&&(document.body.style.top=`${-(s.current+e)}px`)}),300)}},[e]),d=ew.default.useCallback(()=>{if(ea1()&&null!==eip&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eip),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eip=null}},[o]);return ew.default.useEffect(()=>{function e(){s.current=window.scrollY}return e(),window.addEventListener("scroll",e),()=>{window.removeEventListener("scroll",e)}},[]),ew.default.useEffect(()=>{if(t)return()=>{"u"<typeof document||document.querySelector("[data-vaul-drawer]")||d()}},[t,d]),ew.default.useEffect(()=>{!n&&r&&(e?(window.matchMedia("(display-mode: standalone)").matches||c(),t||window.setTimeout(()=>{d()},500)):d())},[e,r,o,t,n,c,d]),{restorePositionSetting:d}}({isOpen:I,modal:x,nested:null!=b&&b,hasBeenOpened:T,preventScrollRestoration:S,noBodyStyles:y});function eu(){return(window.innerWidth-26)/window.innerWidth}function ef(e,t){var n;let r=e,a=null==(n=window.getSelection())?void 0:n.toString(),i=Z.current?eis(Z.current,w):null,o=new Date;if("SELECT"===r.tagName||r.hasAttribute("data-vaul-no-drag")||r.closest("[data-vaul-no-drag]"))return!1;if("right"===w||"left"===w)return!0;if(B.current&&o.getTime()-B.current.getTime()<500)return!1;if(null!==i&&("bottom"===w?i>0:i<0))return!0;if(a&&a.length>0)return!1;if(U.current&&o.getTime()-U.current.getTime()<d&&0===i||t)return U.current=o,!1;for(;r;){if(r.scrollHeight>r.clientHeight){if(0!==r.scrollTop)return U.current=new Date,!1;if("dialog"===r.getAttribute("role"))break}r=r.parentNode}return!0}function eh(e){D&&Z.current&&(Z.current.classList.remove(eiu),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||A(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=eis(Z.current,w);eio(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${eid.join(",")})`}),eio(F.current,{transition:`opacity 0.5s cubic-bezier(${eid.join(",")})`,opacity:"1"}),l&&t&&t>0&&I&&eio(e,{borderRadius:"8px",overflow:"hidden",...eil(w)?{transform:`scale(${eu()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,transformOrigin:"top"}:{transform:`scale(${eu()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,transformOrigin:"left"},transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eid.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eir(document.activeElement)||G.current)){var e;let t=(null==(e=window.visualViewport)?void 0:e.height)||0,n=window.innerHeight,r=n-t,a=Z.current.getBoundingClientRect().height||0;ee.current||(ee.current=a);let o=Z.current.getBoundingClientRect().top;if(Math.abs(Y.current-r)>60&&(G.current=!G.current),i&&i.length>0&&eo&&er&&(r+=eo[er]||0),Y.current=r,a>t||G.current){let e=Z.current.getBoundingClientRect().height,i=e;e>t&&(i=t-(a>.8*n?o:26)),g?Z.current.style.height=`${e-Math.max(r,0)}px`:Z.current.style.height=`${Math.max(i,t-o)}px`}else{let e;e=navigator.userAgent,"u">typeof window&&(/Firefox/.test(e)&&/Mobile/.test(e)||/FxiOS/.test(e))||(Z.current.style.height=`${ee.current}px`)}i&&i.length>0&&!G.current?Z.current.style.bottom="0px":Z.current.style.bottom=`${Math.max(r,0)}px`}}return null==(e=window.visualViewport)||e.addEventListener("resize",t),()=>{var e;return null==(e=window.visualViewport)?void 0:e.removeEventListener("resize",t)}},[er,i,eo]),ew.default.useEffect(()=>(I&&(eio(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eii.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[I]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dC,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),A(e))},open:I},ew.default.createElement(eaQ.Provider,{value:{activeSnapPoint:en,snapPoints:i,setActiveSnapPoint:ea,drawerRef:Z,overlayRef:F,onOpenChange:t,onPress:function(e){var t,n;!u&&!i||(!Z.current||Z.current.contains(e.target))&&(J.current=(null==(t=Z.current)?void 0:t.getBoundingClientRect().height)||0,Q.current=(null==(n=Z.current)?void 0:n.getBoundingClientRect().width)||0,_(!0),V.current=new Date,ea2()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eil(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eiu),q.current=!1,_(!1),H.current=new Date;let r=eis(Z.current,w);if(!e||!ef(e.target,!1)||!r||Number.isNaN(r)||null===V.current)return;let o=H.current.getTime()-V.current.getTime(),l=K.current-(eil(w)?e.pageY:e.pageX),s=Math.abs(l)/o;if(s>.05&&($(!0),setTimeout(()=>{$(!1)},200)),i){ei({draggedDistance:l*("bottom"===w||"right"===w?1:-1),closeDrawer:eh,velocity:s,dismissible:u}),null==a||a(e,!0);return}if("bottom"===w||"right"===w?l>0:l<0){em(),null==a||a(e,!0);return}if(s>.4){eh(),null==a||a(e,!1);return}let d=Math.min(null!=(t=Z.current.getBoundingClientRect().height)?t:0,window.innerHeight),f=Math.min(null!=(n=Z.current.getBoundingClientRect().width)?n:0,window.innerWidth);if(Math.abs(r)>=("left"===w||"right"===w?f:d)*c){eh(),null==a||a(e,!1);return}null==a||a(e,!0),em()},onDrag:function(e){if(Z.current&&D){let t="bottom"===w||"right"===w?1:-1,n=(K.current-(eil(w)?e.pageY:e.pageX))*t,a=n>0,o=i&&!u&&!a;if(o&&0===er)return;let s=Math.abs(n),c=document.querySelector("[data-vaul-drawer-wrapper]"),d=s/("bottom"===w||"top"===w?J.current:Q.current),f=ec(s,a);if(null!==f&&(d=f),o&&d>=1||!q.current&&!ef(e.target,a))return;if(Z.current.classList.add(eiu),q.current=!0,eio(Z.current,{transition:"none"}),eio(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eio(Z.current,{transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`});return}let m=1-d;if((es||h&&er===h-1)&&(null==r||r(e,d),eio(F.current,{opacity:`${m}`,transition:"none"},!0)),c&&F.current&&l){let e=Math.min(eu()+d*(1-eu()),1),t=8-8*d,n=Math.max(0,14-14*d);eio(c,{borderRadius:`${t}px`,transform:eil(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eio(Z.current,{transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:I,isDragging:D,shouldFade:es,closeDrawer:eh,onNestedDrag:function(e,t){if(t<0)return;let n=(window.innerWidth-16)/window.innerWidth,r=n+t*(1-n),a=-16+16*t;eio(Z.current,{transform:eil(w)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`,transition:"none"})},onNestedOpenChange:function(e){let t=e?(window.innerWidth-16)/window.innerWidth:1,n=e?-16:0;W.current&&window.clearTimeout(W.current),eio(Z.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=eis(Z.current,w);eio(Z.current,{transition:"none",transform:eil(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eil(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eio(Z.current,{transition:`transform 0.5s cubic-bezier(${eid.join(",")})`,transform:eil(w)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`})},keyboardIsOpen:G,modal:x,snapPointsOffset:eo,activeSnapPointIndex:er,direction:w,shouldScaleBackground:l,setBackgroundColorOnScale:s,noBodyStyles:y,container:E,autoFocus:O}},n))},eib=function(e){let t=ea0(),{container:n=t.container,...r}=e;return ew.default.createElement(dI,{container:n,...r})};function eiy({className:e,...t}){return(0,eb.jsx)(eig,{"data-slot":"drawer-overlay",className:(0,eI.cn)("vtl-overlay fixed inset-0 z-50 animate-in fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0",e),...t})}function eiw({className:e,children:t,...n}){return(0,eb.jsxs)(eib,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiy,{}),(0,eb.jsxs)(eix,{"data-slot":"drawer-content",className:(0,eI.cn)("vtl-surface-modal group/drawer-content fixed z-50 flex h-auto flex-col border outline-none","data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-t-0","data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-b-0","data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-r-0 data-[vaul-drawer-direction=right]:sm:max-w-sm","data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-l-0 data-[vaul-drawer-direction=left]:sm:max-w-sm",e),...n,children:[(0,eb.jsx)("div",{className:"mx-auto mt-3 hidden h-1.5 w-16 shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block"}),t]})]})}function eij({className:e,...t}){return(0,eb.jsx)(dH,{"data-slot":"drawer-title",className:(0,eI.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eik({navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:i,onOpenConversation:o,onOpenProjectCanvas:l,onOpenProjectOverview:s,onOpenProjectKanban:c,onOpenProjectSettings:d,onNewProjectConversation:u,onOpenProjectConversation:f,onNewProject:h,onOpenConversationSettings:m,onConversationDeleted:p,onAccountSettings:g,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b,title:y,trailing:w}){let[j,k]=ew.useState(!1),N=ew.useCallback(()=>k(!1),[]),S=ew.useCallback(e=>{N(),i(e)},[N,i]),C=ew.useCallback((e,t)=>{N(),o(e,t)},[N,o]),M=ew.useCallback(e=>{N(),b?.(e)},[N,b]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eiN,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiv,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiw,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eij,{className:"sr-only",children:"导航"}),(0,eb.jsx)(eaE,{hideCanvas:!0,navItems:e,contents:t,activeWorkspace:n,activeConversationId:r,activeProjectId:a,onItemSelect:S,onOpenConversation:C,onOpenCanvas:()=>{},onOpenProjectCanvas:(e,t)=>{N(),l?.(e,t)},onOpenProjectOverview:e=>{N(),s?.(e)},onOpenProjectKanban:e=>{N(),c?.(e)},onOpenProjectSettings:e=>{N(),d?.(e)},onNewProjectConversation:e=>{N(),u?.(e)},onOpenProjectConversation:(e,t,n)=>{N(),f?.(e,t,n)},onNewProject:()=>{N(),h?.()},onOpenConversationSettings:(e,t)=>{N(),m?.(e,t)},onConversationDeleted:p,onAccountSettings:()=>{N(),g?.()},subagentTree:x,activeSubagentPath:v,onOpenSubagent:M,className:"h-full w-full rounded-none border-0 p-3 pt-[max(0.75rem,env(safe-area-inset-top))] shadow-none"})]})})]})}function eiN({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,eI.cn)("fixed inset-x-0 top-0 z-40 flex h-12 items-center gap-1 border-b border-border bg-sidebar/95 px-1.5 pt-[env(safe-area-inset-top)] backdrop-blur",r),style:{height:"calc(3rem + env(safe-area-inset-top))"},children:[(0,eb.jsx)("button",{type:"button","aria-label":"展开导航",onClick:e,className:"flex size-9 shrink-0 items-center justify-center rounded-lg text-foreground/80 transition-colors hover:bg-muted hover:text-foreground [&_svg]:size-5",children:(0,eb.jsx)(s8,{})}),t?(0,eb.jsx)("div",{className:"min-w-0 flex-1 truncate text-center text-sm font-medium text-foreground",children:t}):(0,eb.jsx)("div",{className:"min-w-0 flex-1"}),(0,eb.jsx)("div",{className:"flex shrink-0 items-center",children:n})]})}let eiS=(0,ek.default)("message-square-text",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M7 11h10",key:"1twpyw"}],["path",{d:"M7 15h6",key:"d9of3u"}],["path",{d:"M7 7h8",key:"af5zfr"}]]),eiC=[{id:"canvas",label:Q7.canvas,icon:(0,eb.jsx)(uw,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uy,{})},{id:"settings",label:Q7.settings,icon:(0,eb.jsx)(eec,{})}],eiM=[{id:"canvas",title:Q7.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:Q7.canvas,items:[{id:"open-recent-canvas",label:Q7.canvasRecent,icon:(0,eb.jsx)(uw,{})},{id:"new-canvas",label:Q7.canvasNew,icon:(0,eb.jsx)(lJ,{})},{id:"all-canvases",label:Q7.canvasAll,icon:(0,eb.jsx)(uS,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:Q7.conversationRecent,icon:(0,eb.jsx)(eiS,{})},{id:"new-agent-conversation",label:Q7.conversationNew,icon:(0,eb.jsx)(uy,{})}]}]},{id:"settings",title:Q7.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eec,{})}]}]}],eiE=(0,ek.default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),eiO=(0,ek.default)("unplug",[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]]),eiP=(0,ek.default)("wifi",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]),eiz=(0,ek.default)("wifi-off",[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);function eiI(){let{user:e,machine:t,logout:n,unbind:r,refreshUser:a}=tl(),[i,o]=ew.useState(!1),[l,s]=ew.useState(!1),[c,d]=ew.useState(t),[u,f]=ew.useState(!1),[h,m]=ew.useState(""),[p,g]=ew.useState(!1),[x,v]=ew.useState(null);async function b(){o(!0);try{await eJ("online");let e=eq();d(e),await a()}catch{}finally{o(!1)}}async function y(){let e=h.trim();if(!e)return void v("名称不能为空");g(!0),v(null);try{let t=await e0(e);d(e=>e?{...e,name:t}:e),f(!1)}catch(e){v(e instanceof Error?e.message:"重命名失败")}finally{g(!1)}}async function w(){s(!0);try{await r()}catch{s(!1)}}async function j(){await n()}return ew.useEffect(()=>{d(t)},[t]),e?(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)("div",{className:"flex items-center justify-between gap-3","data-tour":"hub-account",children:(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"Vantaloom Hub 账户"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"管理你的 Hub 连接和设备绑定"})]})}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户信息"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"你的 Vantaloom Hub 账户详情。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,eb.jsx)("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-primary/10",children:(0,eb.jsx)("span",{className:"text-base font-semibold text-primary",children:e.name.charAt(0).toUpperCase()})}),(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:e.name}),(0,eb.jsx)("p",{className:"truncate text-xs text-muted-foreground",children:e.email})]})]}),(0,eb.jsxs)(Bu,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(jD,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"用户 ID"}),(0,eb.jsxs)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:[e.id.slice(0,8),"..."]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"注册时间"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(e.createdAt).toLocaleDateString("zh-CN")})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"设备绑定"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"此设备已自动注册到你的 Hub 账户。"})]}),c?(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:b,disabled:i,children:[i?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bi,{}),i?"刷新中...":"刷新状态"]}):null]}),c?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[u?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(eA,{value:h,onChange:e=>m(e.target.value),maxLength:64,autoFocus:!0,placeholder:"机器名称",className:"h-8 text-sm",onKeyDown:e=>{"Enter"===e.key&&y(),"Escape"===e.key&&f(!1)}}),(0,eb.jsx)(ez.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>void y(),disabled:p,"aria-label":"保存名称",children:p?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(mJ,{})}),(0,eb.jsx)(ez.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>f(!1),disabled:p,"aria-label":"取消",children:(0,eb.jsx)(fg.XIcon,{})})]}):(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)("p",{className:"truncate text-sm font-medium",children:c.name}),(0,eb.jsx)("button",{type:"button",onClick:function(){m(c?.name??""),v(null),f(!0)},title:"重命名",className:"shrink-0 rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:(0,eb.jsx)(HA,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bu,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(eiP,{className:"size-3"}):(0,eb.jsx)(eiz,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"设备 ID"}),(0,eb.jsxs)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:[c.id.slice(0,8),"..."]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"连接方式"}),(0,eb.jsx)("span",{className:"text-sm",children:c.connectivity||"直连"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"本机 IP"}),(0,eb.jsx)("code",{className:"rounded bg-muted px-2 py-0.5 font-mono text-xs",children:c.localIp})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"最后心跳"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(c.lastHeartbeat).toLocaleString("zh-CN")})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"注册时间"}),(0,eb.jsx)("span",{className:"text-sm",children:new Date(c.createdAt).toLocaleString("zh-CN")})]})]}):(0,eb.jsxs)("div",{className:"flex flex-col items-center gap-3 py-6 text-center",children:[(0,eb.jsx)(eiz,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsxs)("div",{children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"设备未绑定"}),(0,eb.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"设备注册异常,请尝试重新登录"})]})]})]}),(0,eb.jsx)(eiA,{}),(0,eb.jsx)(eiT,{}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"hub-account-danger",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold text-destructive",children:"危险操作"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"以下操作不可逆,请谨慎执行。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"解除设备绑定"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"将此设备从你的 Hub 账户中移除,并退出登录。设备数据不会受到影响。"})]}),(0,eb.jsxs)(d4,{children:[(0,eb.jsx)(d3,{asChild:!0,children:(0,eb.jsxs)(ez.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(eiO,{}),"解除绑定"]})}),(0,eb.jsxs)(uf,{children:[(0,eb.jsxs)(uh,{children:[(0,eb.jsx)(up,{children:"确认解除设备绑定?"}),(0,eb.jsx)(ug,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(um,{children:[(0,eb.jsx)(uv,{children:"取消"}),(0,eb.jsx)(ux,{onClick:w,disabled:l,className:"bg-destructive text-white hover:bg-destructive/90",children:l?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"animate-spin"}),"处理中..."]}):"确认解除"})]})]})]})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium",children:"退出登录"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"退出当前 Hub 账户但保留设备在云端的注册。下次登录时无需重新绑定。"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:j,children:[(0,eb.jsx)(eao,{}),"退出登录"]})]})]})]})})}):null}function eiA(){let[e,t]=ew.useState(""),[n,r]=ew.useState(""),[a,i]=ew.useState(""),[o,l]=ew.useState(!1),[s,c]=ew.useState(null);async function d(){if(c(null),n.length<8)return void c({kind:"err",text:"新密码至少 8 位"});if(n!==a)return void c({kind:"err",text:"两次输入的新密码不一致"});l(!0);try{await e1(e,n),c({kind:"ok",text:"密码已更新"}),t(""),r(""),i("")}catch(e){c({kind:"err",text:e instanceof Error?e.message:"修改失败,请重试"})}finally{l(!1)}}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eiE,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"修改密码"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"更改你的 Vantaloom Hub 登录密码。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(eA,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"确认新密码",autoComplete:"new-password",value:a,onChange:e=>i(e.target.value)})]}),s?(0,eb.jsx)("p",{className:"ok"===s.kind?"text-xs text-primary":"text-xs text-destructive",children:s.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(ez.Button,{size:"sm",onClick:d,disabled:o||!e||!n,children:o?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"animate-spin"}),"保存中..."]}):"更新密码"})})]})}function eiT(){let[e,t]=ew.useState(!1),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(null);async function s(n){if(!a){t(n),i(!0),l(null);try{let e=await jd({telemetry:{enabled:n}});t(e.telemetry?.enabled??n)}catch(n){t(e),l(n instanceof Error?n.message:"保存失败,请重试")}finally{i(!1)}}}return ew.useEffect(()=>{let e=!1;return async function(){try{let n=await jc();e||t(n.telemetry?.enabled??!1)}catch{}finally{e||r(!1)}}(),()=>{e=!0}},[]),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(ub,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"错误诊断上报"})]}),(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["默认",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"关闭"}),"。开启后,",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"仅当出现网络错误时"}),",应用会把少量非隐私设备信息(系统 / 架构 / 版本 / 代理模式 / 网络开关 等) 与",(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"完整错误文本"}),"上报到 Hub,用于协助排查连接问题。"]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(vJ,{checked:e,disabled:n||a,onCheckedChange:e=>void s(e)})]}),(0,eb.jsx)("div",{className:"rounded-md bg-muted/50 px-3 py-2",children:(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"绝不会上报:API 密钥、代理地址、文件路径、对话内容,以及你的 Hub 身份。"})}),o?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:o}):null]})}var eiR=["PageUp","PageDown"],eiD=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ei_={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eiL="Slider",[ei$,eiF,eiB]=hK(eiL),[eiV,eiH]=cr(eiL,[eiB]),[eiU,eiq]=eiV(eiL),eiW=ew.forwardRef((e,t)=>{let{name:n,min:r=0,max:a=100,step:i=1,orientation:o="horizontal",disabled:l=!1,minStepsBetweenThumbs:s=0,defaultValue:c=[r],value:d,onValueChange:u=()=>{},onValueCommit:f=()=>{},inverted:h=!1,form:m,...p}=e,g=ew.useRef(new Set),x=ew.useRef(0),v="horizontal"===o,[b=[],y]=cu({prop:d,defaultProp:c,onChange:e=>{let t=[...g.current];t[x.current]?.focus(),u(e)}}),w=ew.useRef(b);function j(e,t,{commit:n}={commit:!1}){let o,l=(String(i).split(".")[1]||"").length,c=m5(Math.round((Math.round((e-r)/i)*i+r)*(o=Math.pow(10,l)))/o,[r,a]);y((e=[])=>{let r=function(e=[],t,n){let r=[...e];return r[n]=t,r.sort((e,t)=>e-t)}(e,c,t);if(!function(e,t){if(t>0)return Math.min(...e.slice(0,-1).map((t,n)=>e[n+1]-t))>=t;return!0}(r,s*i))return e;{x.current=r.indexOf(c);let t=String(r)!==String(e);return t&&n&&f(r),t?r:e}})}return(0,eb.jsx)(eiU,{scope:e.__scopeSlider,name:n,disabled:l,min:r,max:a,valueIndexToChangeRef:x,thumbs:g.current,values:b,orientation:o,form:m,children:(0,eb.jsx)(ei$.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(ei$.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?eiX:eiY,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:ci(p.onPointerDown,()=>{l||(w.current=b)}),min:r,max:a,inverted:h,onSlideStart:l?void 0:function(e){let t=function(e,t){if(1===e.length)return 0;let n=e.map(e=>Math.abs(e-t)),r=Math.min(...n);return n.indexOf(r)}(b,e);j(e,t)},onSlideMove:l?void 0:function(e){j(e,x.current)},onSlideEnd:l?void 0:function(){let e=w.current[x.current];b[x.current]!==e&&f(b)},onHomeKeyDown:()=>!l&&j(r,0,{commit:!0}),onEndKeyDown:()=>!l&&j(a,b.length-1,{commit:!0}),onStepKeyDown:({event:e,direction:t})=>{if(!l){let n=eiR.includes(e.key)||e.shiftKey&&eiD.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});eiW.displayName=eiL;var[eiK,eiG]=eiV(eiL,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eiX=ew.forwardRef((e,t)=>{let{min:n,max:r,dir:a,inverted:i,onSlideStart:o,onSlideMove:l,onSlideEnd:s,onStepKeyDown:c,...d}=e,[u,f]=ew.useState(null),h=(0,ca.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=hJ(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=ei8([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(eiK,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(eiZ,{dir:p,"data-orientation":"horizontal",...d,ref:h,style:{...d.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:e=>{let t=v(e.clientX);o?.(t)},onSlideMove:e=>{let t=v(e.clientX);l?.(t)},onSlideEnd:()=>{m.current=void 0,s?.()},onStepKeyDown:e=>{let t=ei_[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),eiY=ew.forwardRef((e,t)=>{let{min:n,max:r,inverted:a,onSlideStart:i,onSlideMove:o,onSlideEnd:l,onStepKeyDown:s,...c}=e,d=ew.useRef(null),u=(0,ca.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=ei8([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(eiK,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(eiZ,{"data-orientation":"vertical",...c,ref:u,style:{...c.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:e=>{let t=m(e.clientY);i?.(t)},onSlideMove:e=>{let t=m(e.clientY);o?.(t)},onSlideEnd:()=>{f.current=void 0,l?.()},onStepKeyDown:e=>{let t=ei_[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),eiZ=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=eiq(eiL,n);return(0,eb.jsx)(cp.span,{...c,ref:t,onKeyDown:ci(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eiR.concat(eiD).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:ci(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:ci(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:ci(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),eiJ="SliderTrack",eiQ=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiq(eiJ,n);return(0,eb.jsx)(cp.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});eiQ.displayName=eiJ;var ei0="SliderRange",ei1=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiq(ei0,n),i=eiG(ei0,n),o=ew.useRef(null),l=(0,ca.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>ei6(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cp.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});ei1.displayName=ei0;var ei2="SliderThumb",ei5=ew.forwardRef((e,t)=>{let n=eiF(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,ca.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(ei4,{...e,ref:i,index:o})}),ei4=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=eiq(ei2,c),m=eiG(ei2,c),[p,g]=ew.useState(null),x=(0,ca.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=gt(p),y=h.values[d],w=void 0===y?0:ei6(y,h.min,h.max),j=(n=d,(r=h.values.length)>2?`Value ${n+1} of ${r}`:2===r?["Minimum","Maximum"][n]:void 0),k=b?.[m.size],N=k?(a=k,i=w,o=m.direction,s=ei8([0,50],[0,l=a/2]),(l-s(i)*o)*o):0;return ew.useEffect(()=>{if(p)return h.thumbs.add(p),()=>{h.thumbs.delete(p)}},[p,h.thumbs]),(0,eb.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[m.startEdge]:`calc(${w}% + ${N}px)`},children:[(0,eb.jsx)(ei$.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cp.span,{role:"slider","aria-label":e["aria-label"]||j,"aria-valuemin":h.min,"aria-valuenow":y,"aria-valuemax":h.max,"aria-orientation":h.orientation,"data-orientation":h.orientation,"data-disabled":h.disabled?"":void 0,tabIndex:h.disabled?void 0:0,...f,ref:x,style:void 0===y?{display:"none"}:e.style,onFocus:ci(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(ei3,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});ei5.displayName=ei2;var ei3=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,ca.useComposedRefs)(a,r),o=gy(t);return ew.useEffect(()=>{let e=a.current;if(!e)return;let n=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(o!==t&&n){let r=new Event("input",{bubbles:!0});n.call(e,t),e.dispatchEvent(r)}},[o,t]),(0,eb.jsx)(cp.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function ei6(e,t,n){return m5(100/(n-t)*(e-t),[0,100])}function ei8(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function ei7(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function ei9({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>ei7(n)??ei7(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(eiW,{"data-slot":"slider",defaultValue:ei7(t),value:ei7(n),min:r,max:a,className:(0,eI.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...i,children:[(0,eb.jsx)(eiQ,{"data-slot":"slider-track",className:"relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1",children:(0,eb.jsx)(ei1,{"data-slot":"slider-range",className:"absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"})}),o.map((e,t)=>(0,eb.jsx)(ei5,{"data-slot":"slider-thumb",className:"relative block size-3 shrink-0 rounded-full border border-ring bg-white shadow-sm transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 hover:ring-ring/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-hidden active:ring-3 active:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 dark:bg-primary-foreground"},t))]})}ei3.displayName="RadioBubbleInput";let eoe=[1e4,3e4,12e4,3e5,6e5];function eot(e){return{compression:{...e.compression},summary:{...e.summary},approval:{...e.approval},behavior:{maxToolCalls:e.behavior?.maxToolCalls??0,retryCount:e.behavior?.retryCount??0,retryDelaysMs:e.behavior?.retryDelaysMs??[]}}}function eon(e){return(e&&e.length?e:eoe).map(e=>Math.round(e/1e3)).join(", ")}function eor(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1),[f,h]=ew.useState("");function m(e,n){t(t=>t?{...t,[e]:{...t[e],...n}}:t),u(!0)}async function p(){if(e&&!o){l(!0),c("");try{let n=await jd({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eot(n)),h(eon(n.behavior?.retryDelaysMs)),u(!1)}catch(e){c(e instanceof Error?e.message:"Save failed")}finally{l(!1)}}}return(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jc(),xB()]);t(eot(e)),h(eon(e.behavior?.retryDelaysMs)),r(n.models)}catch(e){c(e instanceof Error?e.message:"Failed to load config")}finally{i(!1)}}()},[]),a)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取代理配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"代理配置"})}),d&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void p(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-compression",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"压缩上下文"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"当对话 token 达到模型上下文窗口的指定百分比时自动压缩。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(ei9,{value:[e.compression.autoThresholdPercent],onValueChange:([e])=>m("compression",{autoThresholdPercent:e}),min:0,max:100,step:5}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"0% 表示禁用自动压缩。建议设为 70%-85%。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eoa,{models:n,value:e.compression.modelRef,onValueChange:e=>m("compression",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于执行上下文压缩的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-summary",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"对话摘要"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(vJ,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(vJ,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoa,{models:n,value:e.summary.modelRef,onValueChange:e=>m("summary",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于生成对话摘要的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自动重试与工具调用上限"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本机(vantaloom)agent 单次运行的工具调用上限,以及请求失败后的自动重试。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.maxToolCalls,onChange:e=>m("behavior",{maxToolCalls:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"单次运行累计调用工具达到该次数后强制暂停(可点击“继续”恢复)。设为 0 表示不限次(默认)。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.retryCount,onChange:e=>m("behavior",{retryCount:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型/服务商请求失败时自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(eA,{value:f,onChange:e=>{let t=e.currentTarget.value;h(t),m("behavior",{retryDelaysMs:t.split(/[,,\s]+/).map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e)})},placeholder:"10, 30, 120, 300, 600"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用逗号分隔每次重试的等待秒数(指数级递增),例如 10, 30, 120, 300, 600。超出列表长度时使用最后一项。留空使用内置默认梯度。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-approval",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"命令审批"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在 Auto 权限模式下,使用 AI 模型审批 Agent 发起的命令是否可以自动执行。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eoa,{models:n,value:e.approval.modelRef,onValueChange:e=>m("approval",{modelRef:e}),placeholder:"未配置(全部放行)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空表示 Auto 模式下不进行 AI 审批,所有非危险命令自动放行。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(y6,{value:e.approval.prompt,onChange:e=>m("approval",{prompt:e.currentTarget.value}),placeholder:"可选:给审批模型的额外指导,例如允许哪些操作、拒绝哪些操作",rows:4,className:"resize-none text-sm"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"与系统提示词一起发送给审批模型,帮助它判断命令是否安全。"})]})]})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载代理配置"})]})}function eoa({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.label},e.id))]})]})}let eoi=(0,ek.default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);var eoo="Accordion",eol=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eos,eoc,eod]=hK(eoo),[eou,eof]=cr(eoo,[eod,eag]),eoh=eag(),eom=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eos.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoy,{...r,ref:t}):(0,eb.jsx)(eob,{...r,ref:t})})});eom.displayName=eoo;var[eop,eog]=eou(eoo),[eox,eov]=eou(eoo,{collapsible:!1}),eob=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=cu({prop:n,defaultProp:r??"",onChange:a,caller:eoo});return(0,eb.jsx)(eop,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eox,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eok,{...o,ref:t})})})}),eoy=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=cu({prop:n,defaultProp:r??[],onChange:a,caller:eoo}),s=ew.default.useCallback(e=>l((t=[])=>[...t,e]),[l]),c=ew.default.useCallback(e=>l((t=[])=>t.filter(t=>t!==e)),[l]);return(0,eb.jsx)(eop,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eox,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eok,{...i,ref:t})})})}),[eow,eoj]=eou(eoo),eok=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,ca.useComposedRefs)(l,t),c=eoc(n),d="ltr"===hJ(a),u=ci(e.onKeyDown,e=>{if(!eol.includes(e.key))return;let t=e.target,n=c().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),a=n.length;if(-1===r)return;e.preventDefault();let o=r,l=a-1,s=()=>{(o=r+1)>l&&(o=0)},u=()=>{(o=r-1)<0&&(o=l)};switch(e.key){case"Home":o=0;break;case"End":o=l;break;case"ArrowRight":"horizontal"===i&&(d?s():u());break;case"ArrowDown":"vertical"===i&&s();break;case"ArrowLeft":"horizontal"===i&&(d?u():s());break;case"ArrowUp":"vertical"===i&&u()}let f=o%a;n[f].ref.current?.focus()});return(0,eb.jsx)(eow,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eos.Slot,{scope:n,children:(0,eb.jsx)(cp.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoN="AccordionItem",[eoS,eoC]=eou(eoN),eoM=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoj(eoN,n),o=eog(eoN,n),l=eoh(n),s=cc(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eoS,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eab,{"data-orientation":i.orientation,"data-state":eoT(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eoM.displayName=eoN;var eoE="AccordionHeader",eoO=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoE,n);return(0,eb.jsx)(cp.h3,{"data-orientation":a.orientation,"data-state":eoT(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eoO.displayName=eoE;var eoP="AccordionTrigger",eoz=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoP,n),o=eov(eoP,n),l=eoh(n);return(0,eb.jsx)(eos.ItemSlot,{scope:n,children:(0,eb.jsx)(eaw,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eoz.displayName=eoP;var eoI="AccordionContent",eoA=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoj(eoo,n),i=eoC(eoI,n),o=eoh(n);return(0,eb.jsx)(eak,{role:"region","aria-labelledby":i.triggerId,"data-orientation":a.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});function eoT(e){return e?"open":"closed"}function eoR({...e}){return(0,eb.jsx)(eom,{"data-slot":"accordion",...e})}function eoD({className:e,...t}){return(0,eb.jsx)(eoM,{"data-slot":"accordion-item",className:(0,eI.cn)("border-b last:border-b-0",e),...t})}function eo_({className:e,children:t,...n}){return(0,eb.jsx)(eoO,{className:"flex",children:(0,eb.jsxs)(eoz,{"data-slot":"accordion-trigger",className:(0,eI.cn)("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",e),...n,children:[t,(0,eb.jsx)(xf,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function eoL({className:e,children:t,...n}){return(0,eb.jsx)(eoA,{"data-slot":"accordion-content",className:"overflow-hidden text-sm data-[state=closed]:animate-out data-[state=open]:animate-in",...n,children:(0,eb.jsx)("div",{className:(0,eI.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eoA.displayName=eoI;let eo$={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eoF(e){return{...e.claudeCode??{}}}function eoB(e,t){if(e.reclaudeExecutable)return e;let n=t.find(e=>"reclaude"===e.engine);return n?.available&&n.detail?{...e,reclaudeExecutable:n.detail}:e}function eoV(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState([]),[o,l]=ew.useState(!0),[s,c]=ew.useState(!1),[d,u]=ew.useState(!1),[f,h]=ew.useState(""),[m,p]=ew.useState(!1);async function g(){if(!d){u(!0),h("");try{let e=(await jf()).engines??[];r(e),t(t=>t?eoB(t,e):t)}catch(e){h(e instanceof Error?e.message:"适配器安装失败")}finally{u(!1)}}}function x(e){t(t=>t?{...t,...e}:t),p(!0)}ew.useEffect(()=>{!async function(){try{let[e,n,a]=await Promise.all([jc(),ju(),xB()]),o=n.engines??[];t(eoB(eoF(e),o)),r(o),i(a.models)}catch(e){h(e instanceof Error?e.message:"Failed to load config")}finally{l(!1)}}()},[]);let v=e?.adapterArgs?.[0]??"";async function b(){if(e&&!s){c(!0),h("");try{let n=await jd({claudeCode:e});t(eoF(n)),p(!1)}catch(e){h(e instanceof Error?e.message:"Save failed")}finally{c(!1)}}}return o?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取引擎配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"CC 引擎"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"配置 Claude Code / reclaude 引擎。展开下方分组按需修改,留空项将自动发现。"})]}),m&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void b(),disabled:s,children:[(0,eb.jsx)(Gr,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:f})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"检测到的引擎"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"本机当前可用的 Agent 运行引擎。不可用的引擎会说明原因。"})]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>void g(),disabled:d,children:[d?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):(0,eb.jsx)(v2,{className:"size-4"}),d?"安装中…":"下载/安装适配器"]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"Claude Code / reclaude 需要 ACP 适配器。运行时不再内置它(以减小体积), 点击上方按钮即可在后台静默下载安装;安装后无需手填路径即可使用。"}),(0,eb.jsx)("div",{className:"grid gap-2",children:0===n.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未检测到引擎信息。"}):n.map(e=>(0,eb.jsxs)("div",{className:"grid gap-1 rounded-md border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsx)("span",{className:"text-sm font-medium",children:eo$[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,eI.cn)("inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium [&_svg]:size-3",e.available?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-destructive/10 text-destructive"),children:[e.available?(0,eb.jsx)(eO,{}):(0,eb.jsx)(eoi,{}),e.available?"可用":"不可用"]})]}),e.reason?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e.reason}):null,e.detail?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:e.detail}):null]},e.engine))})]}),(0,eb.jsx)("section",{className:"rounded-lg border bg-card px-4",children:(0,eb.jsxs)(eoR,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(eoD,{value:"adapter",children:[(0,eb.jsx)(eo_,{children:"适配器"}),(0,eb.jsxs)(eoL,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"适配器命令"}),(0,eb.jsx)(eA,{value:e.adapterCommand??"",onChange:e=>x({adapterCommand:e.currentTarget.value}),placeholder:"node"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动使用 node 运行适配器。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"适配器入口 (…/@zed-industries/claude-code-acp/dist/index.js)"}),(0,eb.jsx)(eA,{value:v,onChange:e=>{let t=e.currentTarget.value;x({adapterArgs:t?[t]:[]})},placeholder:"…/@zed-industries/claude-code-acp/dist/index.js"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动发现(随运行时安装或环境变量 VANTALOOM_CC_ADAPTER)。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(eA,{value:e.gitBashPath??"",onChange:e=>x({gitBashPath:e.currentTarget.value}),placeholder:"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Windows 专用,留空自动发现。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(eA,{value:e.reclaudeExecutable??"",onChange:e=>x({reclaudeExecutable:e.currentTarget.value}),placeholder:"reclaude"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"reclaude 可执行文件(或 node shim)路径;自动发现到 reclaude 时会自动填入, 会通过内置 shim 启动。留空则自动发现。"})]})]})]}),(0,eb.jsxs)(eoD,{value:"auth",children:[(0,eb.jsx)(eo_,{children:"认证"}),(0,eb.jsxs)(eoL,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.apiKey??"",onChange:e=>x({apiKey:e.currentTarget.value}),placeholder:"claude-code 引擎用;留空可用 claude /login"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"claude-code 引擎用;留空可使用 claude /login 登录。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.oauthToken??"",onChange:e=>x({oauthToken:e.currentTarget.value}),placeholder:"留空使用其它认证方式"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"可选的 OAuth Token,作为 API Key 之外的认证方式。"})]})]})]}),(0,eb.jsxs)(eoD,{value:"summary",children:[(0,eb.jsx)(eo_,{children:"摘要模型"}),(0,eb.jsx)(eoL,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoH,{models:a,value:e.summaryModelRef??"",onValueChange:e=>x({summaryModelRef:e}),placeholder:"使用默认"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"CC 会话标题/摘要用的 Vantaloom 模型路由。"})]})})]})]})})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:f||"无法加载引擎配置"})]})}function eoH({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.label},e.id))]})]})}let eoU=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eai,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(Uc,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eP,{})}],eoq=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(s8,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(s9,{})}];function eoW(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=J2();t(e.mode),r(e.agentSide)},[]),(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"布局排版"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅电脑端生效。切换 Agent 工作区的窗口布局与 Agent 对话的位置,设置即时应用到所有会话。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"布局模式"}),(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-3",children:eoU.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),J5({mode:e})},className:(0,eI.cn)("flex flex-col gap-2 rounded-lg border p-3 text-left transition-colors [&_svg]:size-5",r?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground"),"aria-pressed":r,children:[(0,eb.jsx)("span",{className:(0,eI.cn)("grid size-9 place-items-center rounded-md",r?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"),children:n.icon}),(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:n.label}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:n.description})]},n.id)})})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"Agent 对话位置"}),(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:eoq.map(e=>{let t=n===e.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var t;r(t=e.id),J5({agentSide:t})},className:(0,eI.cn)("inline-flex items-center gap-2 rounded-lg border px-3 py-2 text-sm transition-colors [&_svg]:size-4",t?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground"),"aria-pressed":t,children:[e.icon,e.label]},e.id)})})]})]})}function eoK(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function eoG(){let[e,t]=ew.useState(null),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1);function d(e){t(t=>t?{...t,...e}:t),c(!0)}async function u(){if(e&&!a){i(!0),l("");try{let n=await jd({memory:e});t(eoK(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jc();t(eoK(e))}catch(e){l(e instanceof Error?e.message:"读取记忆配置失败")}finally{r(!1)}}()},[]),n)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取记忆配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"记忆"}),s?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:o})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"总开关"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(vJ,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(ei9,{value:[e.injectBudgetTokens],onValueChange:([e])=>d({injectBudgetTokens:e}),min:200,max:8e3,step:100}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次运行自动注入的相关记忆正文上限。超出按相关性截断。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(vJ,{checked:e.autoCapture,onCheckedChange:e=>d({autoCapture:e})})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"记忆看板"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"浏览、新增、编辑与删除全局记忆。项目记忆与对话记忆需在对应对话的设置中查看(它们依赖该对话的工作区与上下文)。"}),(0,eb.jsx)(QC,{scopes:["global"]})]})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:o||"无法加载记忆配置"})]})}let eoX=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function eoY(e){return{id:e.id,providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:"",models:e.models,selectedModelIds:e.selectedModelIds,builtin:e.builtin,loadingModels:!1,saving:!1,error:e.lastError??"",savedKeyAvailable:!0,editing:!1}}function eoZ(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await xB();t(e.routes.map(eoY))}catch(e){i(e instanceof Error?e.message:"模型路由读取失败")}finally{r(!1)}},[]);function l(e,n){t(t=>t.map((t,r)=>r===e?n(t):t))}async function s(t){let n=e[t];if(n&&!n.saving){l(t,e=>({...e,saving:!0,error:""}));try{let e=await xH({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>eoY(e))}catch(e){l(t,t=>({...t,saving:!1,error:e instanceof Error?e.message:"保存失败"}))}}}async function c(n){let r=e[n];if(r&&!r.saving){if(!r.id)return void t(e=>e.filter((e,t)=>t!==n));l(n,e=>({...e,saving:!0,error:""}));try{await xU(r.id),t(e=>e.filter((e,t)=>t!==n))}catch(e){l(n,t=>({...t,saving:!1,error:e instanceof Error?e.message:"删除失败"}))}}}return ew.useEffect(()=>{o()},[o]),ew.useEffect(()=>{let e=!1,n=window.setInterval(()=>{(async()=>{try{let n=await xB();if(e)return;let r=n.routes.find(e=>e.builtin);t(e=>{let t=e.some(e=>e.builtin);return r?t?e.map(e=>e.builtin?{...e,providerName:r.providerName,models:r.models,selectedModelIds:r.selectedModelIds,error:r.lastError??""}:e):[eoY(r),...e]:t?e.filter(e=>!e.builtin):e})}catch{}})()},3e4);return()=>{e=!0,window.clearInterval(n)}},[]),(0,eb.jsxs)("div",{className:"grid gap-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"模型路由"})}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:function(){t(e=>[{providerName:"",protocol:"openai-v1",endpointUrl:"",apiKey:"",models:[],selectedModelIds:[],loadingModels:!1,saving:!1,error:"",editing:!0},...e])},"data-tour":"add-model-route",children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加模型路由"]})]}),a?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:a})]}):null,n?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取模型路由"}):0===e.length?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"还没有模型路由。"}):(0,eb.jsx)("div",{className:"grid gap-3",children:e.map((e,t)=>(0,eb.jsx)(eoJ,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function eoJ({draft:e,onDraftChange:t,onSave:n,onDelete:r}){let a=ew.useRef(e),i=ew.useRef(t),o=[e.providerName,e.protocol,e.endpointUrl,e.apiKey||(e.savedKeyAvailable?"saved":"")].join("\n"),l=e.providerName.trim()&&e.endpointUrl.trim()&&e.apiKey.trim(),s=e.providerName.trim()&&e.endpointUrl.trim()&&(e.apiKey.trim()||e.savedKeyAvailable)&&e.selectedModelIds.length>0&&!e.saving;function c(n){t({...e,...n})}if(ew.useEffect(()=>{a.current=e,i.current=t},[e,t]),ew.useEffect(()=>{if(!l)return;let e=window.setTimeout(async()=>{let e=a.current;i.current({...e,loadingModels:!0,error:""});try{let t=await xV({providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:e.apiKey}),n=e.selectedModelIds.filter(e=>t.models.some(t=>t.id===e));i.current({...e,models:t.models,selectedModelIds:n,loadingModels:!1,error:""})}catch(t){i.current({...e,loadingModels:!1,error:t instanceof Error?t.message:"模型拉取失败"})}},650);return()=>window.clearTimeout(e)},[l,o]),!e.editing||e.builtin){let t=e.selectedModelIds.map(t=>e.models.find(e=>e.id===t)?.displayName||t).filter(Boolean),n=eoX.find(t=>t.value===e.protocol)?.label??e.protocol;return(0,eb.jsxs)("section",{className:"grid min-h-16 grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-lg border bg-card px-3 py-2.5",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[e.builtin?(0,eb.jsx)(lK,{className:"size-3.5 shrink-0 text-muted-foreground"}):null,(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.providerName}),e.builtin?(0,eb.jsx)("span",{className:"ui-text-kbd rounded-full bg-muted px-2 py-0.5 text-muted-foreground",children:"官渠"}):null,(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:n})]}),(0,eb.jsx)("div",{className:"mt-1 truncate text-xs text-muted-foreground",children:t.length>0?t.join(", "):"未选择模型"})]}),e.builtin?null:(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>c({editing:!0}),children:[(0,eb.jsx)(HA,{className:"size-4"}),"编辑"]})]})}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-3","data-tour":"model-route-form",children:[(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_11rem]",children:[(0,eb.jsx)(eA,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gR,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:eoX.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_minmax(0,18rem)]",children:[(0,eb.jsx)(eA,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(eA,{value:e.apiKey,type:"password",placeholder:e.savedKeyAvailable?"已保存,留空沿用":"API Key",onChange:e=>c({apiKey:e.currentTarget.value})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-h-6 items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"flex min-w-0 items-center gap-2 text-sm font-medium",children:[(0,eb.jsx)(mZ,{className:"size-4 text-muted-foreground"}),"可用模型"]}),e.loadingModels?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"拉取中"}):null]}),e.models.length>0?(0,eb.jsx)("div",{className:"grid max-h-64 gap-1 overflow-auto pr-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:e.models.map(t=>{let n=e.selectedModelIds.includes(t.id);return(0,eb.jsxs)("div",{className:(0,eI.cn)("grid min-h-8 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-md px-2 text-sm hover:bg-muted/60",n&&"bg-muted/70"),children:[(0,eb.jsxs)("label",{className:"flex cursor-pointer items-center gap-2",children:[(0,eb.jsx)(xF,{checked:n,onCheckedChange:n=>{var r;return r=t.id,void c({selectedModelIds:!0===n?[...e.selectedModelIds,r]:e.selectedModelIds.filter(e=>e!==r)})}}),(0,eb.jsx)("span",{className:"truncate",children:t.displayName||t.id})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(eA,{type:"number",className:"h-6 w-16 px-1.5 text-center text-xs tabular-nums",value:t.contextLength||200,min:1,max:1e4,onChange:n=>{var r,a;return r=t.id,a=Number.parseInt(n.currentTarget.value,10)||0,void c({models:e.models.map(e=>e.id===r?{...e,contextLength:a>0?a:void 0}:e)})}}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"k"})]})]},t.id)})}):(0,eb.jsx)("div",{className:"rounded-md border border-dashed px-3 py-4 text-sm text-muted-foreground",children:"填写端点和密钥后会自动拉取模型。"})]}),e.error?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"模型路由错误"}),(0,eb.jsx)(QT,{className:"break-words",children:e.error})]}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsxs)(ez.Button,{type:"button",variant:"destructive",onClick:r,disabled:e.saving,children:[(0,eb.jsx)(bo,{className:"size-4"}),"删除"]}),(0,eb.jsx)(ez.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function eoQ(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function eo0(){let[e,t]=ew.useState(null),[n,r]=ew.useState([]),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1),[f,h]=ew.useState(""),[m,p]=ew.useState("");function g(e){t(t=>t?{...t,...e}:t),u(!0)}async function x(){if(e&&!o){l(!0),c("");try{let n=await jd({skills:e});t(eoQ(n)),r(await Qv()),u(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{l(!1)}}}if(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jc(),Qv()]);t(eoQ(e)),r(n)}catch(e){c(e instanceof Error?e.message:"读取技能配置失败")}finally{i(!1)}}()},[]),a)return(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取技能配置"});if(!e)return(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载技能配置"})]});let v=n.filter(e=>e.readOnly);return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"技能"}),d?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void x(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"总开关"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(vJ,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(ei9,{value:[e.listingBudgetTokens],onValueChange:([e])=>g({listingBudgetTokens:e}),min:200,max:6e3,step:100}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次运行注入到系统提示词的技能清单上限(只计名称+描述+何时使用)。超出按相关性截断。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"技能源"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"配置可拉取技能的远程源(http / git raw URL)。内置 local 源与 Hub 官方源为只读。"}),v.length>0?(0,eb.jsx)("div",{className:"grid gap-1.5",children:v.map(e=>(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md bg-muted/55 px-3 py-2 text-sm",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"font-medium",children:e.label}),e.url?(0,eb.jsx)("span",{className:"ml-2 truncate text-xs text-muted-foreground",children:e.url}):null]}),(0,eb.jsx)(Bu,{variant:"outline",children:"只读"})]},e.label))}):null,(e.sources??[]).length>0?(0,eb.jsx)("div",{className:"grid gap-1.5",children:(e.sources??[]).map((t,n)=>(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("span",{className:"font-medium",children:t.label}),(0,eb.jsx)("span",{className:"ml-2 truncate text-xs text-muted-foreground",children:t.url})]}),(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-xs",className:"size-6 opacity-55 hover:opacity-100","aria-label":`删除源 ${t.label}`,onClick:()=>{e&&g({sources:(e.sources??[]).filter((e,t)=>t!==n)})},children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})})]},`${t.label}-${n}`))}):null,(0,eb.jsxs)("div",{className:"flex flex-wrap items-end gap-2",children:[(0,eb.jsxs)("div",{className:"grid min-w-[6rem] flex-1 gap-1",children:[(0,eb.jsx)(Qd,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(eA,{value:f,onChange:e=>h(e.currentTarget.value),placeholder:"my-source",className:"h-9"})]}),(0,eb.jsxs)("div",{className:"grid min-w-[10rem] flex-[2] gap-1",children:[(0,eb.jsx)(Qd,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(eA,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:!f.trim()||!m.trim(),onClick:function(){let t=f.trim(),n=m.trim();t&&n&&e&&(g({sources:[...e.sources??[],{label:t,url:n}]}),h(""),p(""))},children:[(0,eb.jsx)(lJ,{className:"size-4"}),"添加"]})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"技能库"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"浏览全局技能库,可查看正文、删除全局技能,或从已配置的源拉取新技能。安装到具体工作区请在对话设置内操作。"}),(0,eb.jsx)(QO,{})]})]})}async function eo1(){return eo5("/api/local/subagent-config")}async function eo2(e){return eo5("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function eo5(e,t){let n=await fetch(eR(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error("string"==typeof r?.error?r.error:"subagent config api failed");return r}function eo4(e){return{explore:{...e.explore},workflow:{...e.workflow},operator:{...e.operator},custom:{...e.custom,models:[...e.custom.models??[]]}}}let eo3={explore:{title:"探索子代理",icon:(0,eb.jsx)(Vj,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uP,{className:"size-4"}),tint:"text-violet-600 dark:text-violet-400",description:"按 workflow-*.yml 严格执行可重复的多步流程,并把其中确定性的步骤自动固化为脚本、给 yml 添加批注。",tools:"阅读 / 编辑 / 终端(vantaloom_read · vantaloom_edit · vantaloom_shell)"},operator:{title:"操作员子代理",icon:(0,eb.jsx)(uO,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function eo6(){let[e,t]=ew.useState(null),{models:n,loading:r}=xK(),[a,i]=ew.useState(!0),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState(!1);async function f(){if(e&&!o){l(!0),c("");try{let n=await eo2({explore:e.explore,workflow:e.workflow,operator:e.operator,custom:e.custom});t(eo4(n)),u(!1)}catch(e){c(e instanceof Error?e.message:"Save failed")}finally{l(!1)}}}return ew.useEffect(()=>{!async function(){try{let e=await eo1();t(eo4(e))}catch(e){c(e instanceof Error?e.message:"Failed to load config")}finally{i(!1)}}()},[]),a?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取子代理配置"}):e?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"子代理配置"}),(0,eb.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"主 agent 可以派发这些子代理来分担任务。每个子代理拥有独立上下文与受限工具集,完成后只把结果汇报给主 agent。"})]}),d&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void f(),disabled:o,children:[(0,eb.jsx)(Gr,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(eo8,{tourId:`subagent-${a}`,meta:eo3[a],value:e[a],models:n,modelsLoading:r,onChange:e=>{t(t=>t?{...t,[a]:{...t[a],...e}}:t),u(!0)}},a)),(0,eb.jsx)(eo7,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:s||"无法加载子代理配置"})]})}function eo8({meta:e,value:t,models:n,modelsLoading:r,onChange:a,tourId:i}){return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":i,children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:e.tint,children:e.icon}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:e.title})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e.description}),(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:[(0,eb.jsx)("span",{className:"text-foreground/70",children:"可用工具:"}),e.tools,(0,eb.jsx)("span",{className:"ml-1 text-muted-foreground/70",children:"(固定,不可更改)"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(eo9,{models:n,value:t.modelRef,onValueChange:e=>a({modelRef:e}),placeholder:r?"读取模型中":"继承上级模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则继承派发它的上级 agent 当前使用的模型。"})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(vJ,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"系统提示词"}),t.promptOverride?(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>a({promptOverride:""}),children:"恢复默认"}):null]}),(0,eb.jsx)(y6,{value:t.promptOverride,onChange:e=>a({promptOverride:e.currentTarget.value}),placeholder:"留空使用内置默认提示词;在此输入将覆盖默认提示词(环境/工具说明仍会自动附加)。",rows:t.promptOverride?10:3,className:"resize-y text-sm"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"覆盖该官方子代理的预设系统提示词。派发时还会自动附加工作区、操作系统与工具使用说明。"})]})]})}function eo7({value:e,models:t,modelsLoading:n,onChange:r}){let a=ew.useCallback(e=>t.find(t=>t.value===e)?.label??e,[t]);return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"subagent-custom",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:(0,eb.jsx)(uy,{className:"size-4"})}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自定义子代理"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"主 agent 可以自取名字、从下面的模型池中选一个模型来召唤自定义子代理,并可选择是否继承当前对话上下文。自定义子代理拥有完整工具集,还能进一步派发上面三种官方子代理。"}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(vZ,{variant:"list-combobox",value:e.models,onValueChange:e=>r({models:e}),options:t,placeholder:n?"读取模型中":"选择可供自定义子代理使用的模型",searchPlaceholder:"搜索模型...",emptyText:"没有可用模型",renderItem:a}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"主 agent 召唤自定义子代理时会从这个池中选择一个模型。留空则沿用上级 agent 的模型。"})]})]})}function eo9({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gR,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{placeholder:r})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))]})]})}function ele(){let[e,t]=ew.useState(""),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(!1),[s,c]=ew.useState("");async function d(){if(!a){i(!0),c("");try{await jd({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jc();t(e.systemPrompt?.userPrompt??"")}catch(e){c(e instanceof Error?e.message:"加载失败")}finally{r(!1)}})()},[]),n)?(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取系统提示词配置"}):(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"兜底系统提示词"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅对 vantaloom 引擎对话生效。当某个对话未检测到任何项目文档(CLAUDE.md / AGENTS.md / vantaloom.md),也没有在该对话的“系统提示词”里单独设置时, 才使用这里的内容作为兜底。各对话独立的系统提示词请到对话设置 → 系统提示词中配置。"})]}),o?(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void d(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:s})]}):null,(0,eb.jsx)(y6,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elt({section:e}={}){return(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":`preferences-${e??"model-routes"}`,children:"agent-config"===e?(0,eb.jsx)(eor,{}):"subagent-config"===e?(0,eb.jsx)(eo6,{}):"cc-engine-config"===e?(0,eb.jsx)(eoV,{}):"system-prompt"===e?(0,eb.jsx)(ele,{}):"skills"===e?(0,eb.jsx)(eo0,{}):"memory"===e?(0,eb.jsx)(eoG,{}):"layout"===e?(0,eb.jsx)(eoW,{}):(0,eb.jsx)(eoZ,{})})})}let eln=(0,ek.default)("circle-arrow-up",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 12-4-4-4 4",key:"177agl"}],["path",{d:"M12 16V8",key:"1sbj14"}]]);function elr(e,t){if(e.isLocal)return eR(t);let n=t.replace(/^\/v1(?=\/)/,"");return eR(`/v1/remote/${e.id}${n}`)}async function ela(e){try{let t=await fetch(`https://registry.npmjs.org/@vantaloom/runtime-${e}`,{headers:{Accept:"application/vnd.npm.install-v1+json"},cache:"no-store"});if(!t.ok)return;let n=await t.json();return n?.["dist-tags"]?.latest}catch{return}}function eli(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),a=ew.useRef(!0),i=ew.useCallback((e,n)=>{t(t=>t.map(t=>t.machine.id===e?{...t,...n}:t))},[]),o=ew.useCallback(async()=>{r(!0);let e=[];try{let t=await fetch(eR("/v1/remote/machines"),{cache:"no-store"});e=(await t.json()).machines??[]}catch{e=[]}a.current&&(t(e.map(e=>({machine:e,loading:!0}))),r(!1),await Promise.all(e.map(async e=>{if(!e.isLocal&&"online"!==e.status){a.current&&i(e.id,{loading:!1,error:"离线"});return}try{let t,n=await fetch(elr(e,"/v1/runtime/info"),{cache:"no-store"});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.text();try{t=JSON.parse(r)}catch{throw Error("该机器运行时过旧,不支持版本检测")}let o=await ela(t.platform);a.current&&i(e.id,{info:t,latest:o,loading:!1})}catch(t){a.current&&i(e.id,{loading:!1,error:t instanceof Error?t.message:"无法获取版本"})}})))},[i]);async function l(e){if(e.info&&!e.updating){i(e.machine.id,{updating:!0});try{await fetch(elr(e.machine,"/v1/runtime/update"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:e.latest})})}catch{}window.setTimeout(()=>{a.current&&o()},25e3)}}return ew.useEffect(()=>(a.current=!0,o(),()=>{a.current=!1}),[o]),(0,eb.jsx)("div",{className:"h-full overflow-auto px-6 py-8","data-tour":"check-update",children:(0,eb.jsxs)("div",{className:"mx-auto flex max-w-3xl flex-col gap-5",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,eb.jsxs)("div",{children:[(0,eb.jsx)("h1",{className:"text-xl font-semibold",children:"检查更新"}),(0,eb.jsx)("p",{className:"mt-1 text-sm text-muted-foreground",children:"工作组内各机器的运行时版本与可用更新。点击「立即更新」可让对应机器自动更新(该机器会短暂重启)。"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:()=>void o(),disabled:n,children:[(0,eb.jsx)(bi,{className:(0,eI.cn)("size-4",n&&"animate-spin")}),"刷新"]})]}),n&&0===e.length?(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 rounded-xl border bg-card p-8 text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"})," 正在获取机器列表…"]}):0===e.length?(0,eb.jsx)("div",{className:"rounded-xl border bg-card p-8 text-center text-sm text-muted-foreground",children:"暂无可用机器。"}):(0,eb.jsx)("div",{className:"flex flex-col gap-2",children:e.map(e=>{let t=!!e.info&&!!e.latest&&e.latest!==e.info.version;return(0,eb.jsxs)("div",{className:"flex items-center gap-4 rounded-xl border bg-card px-4 py-3",children:[(0,eb.jsx)(eP,{className:"size-5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.machine.name}),e.machine.isLocal?(0,eb.jsx)("span",{className:"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"本机"}):null]}),(0,eb.jsx)("div",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:e.loading?"读取版本中…":e.error?(0,eb.jsx)("span",{className:"text-amber-600",children:e.error}):(0,eb.jsxs)(eb.Fragment,{children:[function(e){switch(e){case"windows":return"Windows";case"darwin":return"macOS";case"linux":return"Linux";case"android":return"Android";default:return e||"未知"}}(e.info?.os??e.machine.platform??"")," · 当前 ",(0,eb.jsx)("span",{className:"font-mono",children:e.info?.version??"?"}),e.latest?(0,eb.jsxs)(eb.Fragment,{children:[" · 最新 ",(0,eb.jsx)("span",{className:"font-mono",children:e.latest})]}):null,e.info?.updatedAt?(0,eb.jsxs)(eb.Fragment,{children:[" · 更新于 ",function(e){if(!e)return"—";let t=Date.parse(e);return Number.isFinite(t)?new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(t):"—"}(e.info.updatedAt)]}):null]})})]}),e.loading?(0,eb.jsx)(eM,{className:"size-4 animate-spin text-muted-foreground"}):e.updating?(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-xs text-primary",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"})," 更新中…"]}):t?(0,eb.jsxs)(ez.Button,{size:"sm",onClick:()=>void l(e),children:[(0,eb.jsx)(eln,{className:"size-4"})," 立即更新"]}):e.info?(0,eb.jsxs)("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[(0,eb.jsx)(eO,{className:"size-4 text-emerald-500"})," 已是最新"]}):null]},e.machine.id)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/70",children:"最新版本号来自 npm(@vantaloom/runtime-<平台>)。更新过程中该机器会停止并重启运行时, 若你的手机正连着它会短暂断开,更新完成后重新连接即可。"})]})})}let elo=(0,ek.default)("gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]),ell=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),els=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elc(){let{user:e}=tl(),[t,n]=ew.useState(null),[r,a]=ew.useState(!0),[i,o]=ew.useState(null),[l,s]=ew.useState("7d"),[c,d]=ew.useState("all"),[u,f]=ew.useState([]),[h,m]=ew.useState([]),[p,g]=ew.useState(!0),[x,v]=ew.useState(""),[b,y]=ew.useState(!1),[w,j]=ew.useState(null),k=ew.useCallback(async()=>{a(!0),o(null);try{n(await e6())}catch(e){o(e instanceof Error?e.message:"读取余额失败")}finally{a(!1)}},[]);ew.useEffect(()=>{e&&(k(),e9().then(e=>f(e.models)).catch(()=>f([])))},[e,k]),ew.useEffect(()=>{if(!e)return;let t=!1;return g(!0),e8(l,"all"===c?void 0:c).then(e=>{t||m(e.points)}).catch(()=>{t||m([])}).finally(()=>{t||g(!1)}),()=>{t=!0}},[e,l,c]);let N=ew.useMemo(()=>h.reduce((e,t)=>(e.costMicro+=t.costMicro,e.requests+=t.requests,e.totalTokens+=t.totalTokens,e),{costMicro:0,requests:0,totalTokens:0}),[h]),S=ew.useMemo(()=>h.map(e=>{var t;let n;return{label:(t=e.time,n=new Date(t),"24h"===l?n.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):n.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})),cost:e.costMicro/1e6,requests:e.requests,tokens:e.totalTokens}}),[h,l]);async function C(){let e=x.trim();if(e){y(!0),j(null);try{let t=await e7(e);j({kind:"ok",text:`兑换成功,到账 ${e4(t.valueMicro)}`}),v(""),n(e=>e?{...e,balanceMicro:t.balanceMicro,balanceUsd:t.balanceMicro/1e6}:e)}catch(e){j({kind:"err",text:e instanceof Error?e.message:"兑换失败,请检查兑换码"})}finally{y(!1)}}}return e?(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsxs)("div",{className:"mx-auto grid w-full max-w-3xl gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"余额与用量"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"查看官方渠道的账户余额、调用用量,并使用兑换码充值。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eah,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户余额"})]}),(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:()=>void k(),disabled:r,children:[r?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bi,{}),"刷新"]})]}),i?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:i}):(0,eb.jsx)("p",{className:"text-3xl font-semibold tracking-tight",children:r&&!t?"—":e4(t?.balanceMicro??0,4)})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(elo,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"兑换码充值"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"输入兑换码,金额将立即计入账户余额。"}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eA,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(ez.Button,{className:"shrink-0",onClick:()=>void C(),disabled:b||!x.trim(),children:[b?(0,eb.jsx)(eM,{className:"animate-spin"}):null,"兑换"]})]}),w?(0,eb.jsx)("p",{className:(0,eI.cn)("text-xs","ok"===w.kind?"text-primary":"text-destructive"),children:w.text}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(ell,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"用量趋势"})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)(gR,{value:c,onValueChange:d,children:[(0,eb.jsx)(xm,{size:"sm",className:"w-44",children:(0,eb.jsx)(g$,{placeholder:"全部模型"})}),(0,eb.jsxs)(xx,{children:[(0,eb.jsx)(xv,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xv,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gR,{value:l,onValueChange:s,children:[(0,eb.jsx)(xm,{size:"sm",className:"w-32",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:els.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(eld,{label:"花费",value:e4(N.costMicro,4)}),(0,eb.jsx)(eld,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(eld,{label:"Tokens",value:N.totalTokens.toLocaleString("zh-CN")})]}),(0,eb.jsx)("div",{className:"h-56 w-full",children:p&&0===h.length?(0,eb.jsx)("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})}):0===S.length?(0,eb.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-muted-foreground",children:"所选区间暂无用量记录"}):(0,eb.jsx)(Cv,{width:"100%",height:"100%",children:(0,eb.jsxs)(Y4,{data:S,margin:{top:8,right:8,left:0,bottom:0},children:[(0,eb.jsx)("defs",{children:(0,eb.jsxs)("linearGradient",{id:"usageCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,eb.jsx)("stop",{offset:"5%",stopColor:"var(--color-primary)",stopOpacity:.35}),(0,eb.jsx)("stop",{offset:"95%",stopColor:"var(--color-primary)",stopOpacity:0})]})}),(0,eb.jsx)(ZO,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(Zq,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Z2,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(BK,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(YJ,{type:"monotone",dataKey:"cost",stroke:"var(--color-primary)",strokeWidth:2,fill:"url(#usageCost)"})]})})})]})]})}):(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 text-foreground",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col items-center gap-3 py-16 text-center",children:[(0,eb.jsx)(eah,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsx)("p",{className:"text-sm font-medium",children:"未登录 Hub 账户"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请先在「系统设置 · Hub 账户」中登录,再查看余额与用量。"})]})})}function eld({label:e,value:t}){return(0,eb.jsxs)("div",{className:"rounded-md bg-muted/55 px-3 py-2",children:[(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:e}),(0,eb.jsx)("p",{className:"mt-0.5 truncate text-sm font-semibold",children:t})]})}let elu=(0,ek.default)("image-plus",[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]]),elf=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elh=Object.fromEntries(elf.map(e=>[e.value,e.label])),elm={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elp(){let{user:e}=tl(),[t,n]=ew.useState(""),[r,a]=ew.useState("bug"),[i,o]=ew.useState(""),[l,s]=ew.useState([]),[c,d]=ew.useState(!1),[u,f]=ew.useState(null),[h,m]=ew.useState(!1),p=ew.useRef(null),[g,x]=ew.useState([]),[v,b]=ew.useState(!0),[y,w]=ew.useState(null),j=ew.useCallback(async()=>{b(!0);try{let e=await tt();x(e.issues)}catch{x([])}finally{b(!1)}},[]);function k(e){let t=Array.from(e).filter(e=>e.type.startsWith("image/"));f(null),s(e=>{let n=[...e];for(let e of t){if(n.length>=10){f({kind:"err",text:`最多上传 10 张图片`});break}if(e.size>8388608){f({kind:"err",text:`「${e.name}」过大(上限 8MB)`});continue}n.push({id:`${e.name}-${e.size}-${n.length}`,file:e,url:URL.createObjectURL(e)})}return n})}async function N(){if(!t.trim())return void f({kind:"err",text:"请填写标题"});d(!0),f(null);try{let{issue:e}=await te({title:t.trim(),type:r,content:i.trim()}),c=!1;for(let t of l)try{await tn(e.id,t.file)}catch{c=!0}f({kind:"ok",text:c?"反馈已提交,但部分图片上传失败,请在下方列表确认":"反馈已提交,感谢您的反馈!"}),n(""),a("bug"),o(""),l.forEach(e=>URL.revokeObjectURL(e.url)),s([]),j()}catch(e){f({kind:"err",text:e instanceof Error?e.message:"提交失败,请重试"})}finally{d(!1)}}return ew.useEffect(()=>{e&&j()},[e,j]),ew.useEffect(()=>()=>{l.forEach(e=>URL.revokeObjectURL(e.url))},[]),e?(0,eb.jsxs)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:[(0,eb.jsxs)("div",{className:"mx-auto grid w-full max-w-3xl gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"问题反馈"}),(0,eb.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"提交功能异常、建议或计费问题,我们会在看板中跟进处理。"})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"标题"}),(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),maxLength:120,placeholder:"简要描述问题"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"类型"}),(0,eb.jsxs)(gR,{value:r,onValueChange:a,children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:elf.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"详细描述"}),(0,eb.jsx)(y6,{value:i,onChange:e=>o(e.target.value),rows:5,placeholder:"详细描述问题的复现步骤、期望行为等",onPaste:e=>{let t=Array.from(e.clipboardData.files).filter(e=>e.type.startsWith("image/"));t.length>0&&(e.preventDefault(),k(t))}})]}),(0,eb.jsxs)("div",{className:(0,eI.cn)("grid gap-3 rounded-lg border border-dashed p-3 transition-colors",h?"border-primary bg-primary/5":"border-input"),onDragOver:e=>{e.preventDefault(),m(!0)},onDragLeave:()=>m(!1),onDrop:e=>{e.preventDefault(),m(!1),e.dataTransfer.files.length>0&&k(e.dataTransfer.files)},children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["可拖拽、粘贴或选择图片(最多 ",10," 张,单张 ≤ 8MB)"]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>p.current?.click(),children:[(0,eb.jsx)(elu,{}),"添加图片"]}),(0,eb.jsx)("input",{ref:p,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:e=>{e.target.files&&k(e.target.files),e.target.value=""}})]}),l.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:l.map(e=>(0,eb.jsxs)("div",{className:"relative size-16 overflow-hidden rounded-md border",children:[(0,eb.jsx)("img",{src:e.url,alt:e.file.name,className:"size-full object-cover"}),(0,eb.jsx)("button",{type:"button",onClick:()=>{var t;return t=e.id,void s(e=>{let n=e.find(e=>e.id===t);return n&&URL.revokeObjectURL(n.url),e.filter(e=>e.id!==t)})},className:"absolute right-0.5 top-0.5 rounded-full bg-black/55 p-0.5 text-white hover:bg-black/75","aria-label":"移除图片",children:(0,eb.jsx)(fg.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,eI.cn)("text-xs","ok"===u.kind?"text-primary":"text-destructive"),children:u.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(ez.Button,{onClick:()=>void N(),disabled:c||!t.trim(),children:[c?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(er_,{}),"提交反馈"]})})]}),(0,eb.jsxs)("section",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"我的反馈"}),v?(0,eb.jsx)("div",{className:"flex items-center justify-center py-8 text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})}):0===g.length?(0,eb.jsx)("p",{className:"rounded-lg border bg-card p-6 text-center text-xs text-muted-foreground",children:"你还没有提交过反馈。"}):g.map(e=>{let t=elm[e.status]??{label:e.status,variant:"secondary"};return(0,eb.jsxs)("article",{className:"grid gap-2 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsx)("p",{className:"min-w-0 flex-1 break-words text-sm font-medium",children:e.title}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,eb.jsx)(Bu,{variant:"outline",children:elh[e.type]??e.type}),(0,eb.jsx)(Bu,{variant:t.variant,children:t.label})]})]}),e.content?(0,eb.jsx)("p",{className:"whitespace-pre-wrap break-words text-xs text-muted-foreground",children:e.content}):null,e.images.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-2",children:e.images.map(t=>(0,eb.jsx)("button",{type:"button",className:"size-16 overflow-hidden rounded-md border",onClick:()=>w({issueId:e.id,imageId:t.id}),children:(0,eb.jsx)(elx,{issueId:e.id,imageId:t.id})},t.id))}):null,(0,eb.jsx)("p",{className:"text-[11px] text-muted-foreground",children:new Date(e.createdAt).toLocaleString("zh-CN")})]},e.id)})]})]}),(0,eb.jsx)(dC,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fv,{className:"max-w-3xl",children:y?(0,eb.jsx)(elv,{issueId:y.issueId,imageId:y.imageId,className:"max-h-[75vh] w-full object-contain"}):null})})]}):(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 text-foreground",children:(0,eb.jsxs)("div",{className:"mx-auto flex w-full max-w-3xl flex-col items-center gap-3 py-16 text-center",children:[(0,eb.jsx)(jk,{className:"size-8 text-muted-foreground/40"}),(0,eb.jsx)("p",{className:"text-sm font-medium",children:"未登录 Hub 账户"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请先在「系统设置 · Hub 账户」中登录,再提交问题反馈。"})]})})}function elg(e,t){let[n,r]=ew.useState(null);return ew.useEffect(()=>{let n=!0,a=null;return tr(e,t).then(e=>{a=e,n?r(e):URL.revokeObjectURL(e)}).catch(()=>{}),()=>{n=!1,a&&URL.revokeObjectURL(a)}},[e,t]),n}function elx({issueId:e,imageId:t}){let n=elg(e,t);return n?(0,eb.jsx)("img",{src:n,alt:"",className:"size-full object-cover"}):(0,eb.jsx)("div",{className:"flex size-full items-center justify-center bg-muted"})}function elv({issueId:e,imageId:t,className:n}){let r=elg(e,t);return r?(0,eb.jsx)("img",{src:r,alt:"",className:n}):(0,eb.jsx)("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:(0,eb.jsx)(eM,{className:"size-5 animate-spin"})})}let elb={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},ely={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elw(e,t){let[n,r]=ew.useState(t);return ew.useEffect(()=>{let n=!0,a=!1;async function i(){if(!a){a=!0;try{let t=await fetch(eR(e),{cache:"no-store"});if(!t.ok)return;let a=await t.json();n&&r(a)}catch{n&&r(t)}finally{a=!1}}}i();let o=window.setInterval(i,2e3);return()=>{n=!1,window.clearInterval(o)}},[t,e]),n}function elj(){let e=elw("/api/local/machines/fleet",elb),{nodes:t,links:n}=e.topology;return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"shrink-0 border-b px-6 py-4",children:[(0,eb.jsx)("h2",{className:"text-base font-semibold tracking-normal",children:"组网关系"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"系统中各机器的拓扑关系图(自动生成)。节点为机器,连线表示机器之间的连接方式与实时延迟。"}),(0,eb.jsxs)("div",{className:"mt-3 flex flex-wrap items-center gap-x-5 gap-y-1.5 text-xs text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["机器 ",e.totals.online,"/",e.totals.machines," 在线"]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-foreground"}),"直连 ",e.pathTotals.direct]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-foreground"}),"P2P ",e.pathTotals.p2p]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-muted-foreground"}),"中继 ",e.pathTotals.relay]}),(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:"size-2 rounded-full bg-destructive"}),"断开 ",e.pathTotals.broken]})]})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 p-4",children:0===t.length?(0,eb.jsx)("div",{className:"grid h-full place-items-center rounded-lg border border-dashed",children:(0,eb.jsx)("p",{className:"max-w-sm text-center text-sm text-muted-foreground",children:"暂未发现其它机器。登录 Hub 账户并把机器加入同一工作组后,这里会自动绘制组网拓扑。"})}):(0,eb.jsx)("div",{className:"h-full overflow-hidden rounded-lg border bg-card",children:(0,eb.jsx)(et5,{nodes:t,links:n})})}),(0,eb.jsx)("footer",{className:"shrink-0 border-t px-6 py-2",children:(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-[11px] text-muted-foreground",children:[(0,eb.jsx)("span",{children:"连接方式:"}),[{kind:"direct",label:"直连",className:"bg-foreground"},{kind:"p2p",label:"P2P",className:"bg-foreground"},{kind:"relay",label:"中继",className:"bg-muted-foreground"},{kind:"down",label:"断开",className:"bg-destructive"}].map(e=>(0,eb.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,eb.jsx)("span",{className:`h-0.5 w-4 rounded ${e.className}`}),e.label]},e.kind))]})})]})}let elk=[{value:"system",label:"跟随系统",help:"读取操作系统的系统代理设置(Windows 注册表 / Clash「系统代理」模式)。注意:macOS / Linux 上没有系统代理读取能力,此项等价于「仅环境变量」。"},{value:"env",label:"仅环境变量",help:"只使用 HTTP_PROXY / HTTPS_PROXY / NO_PROXY 环境变量,忽略系统代理设置。"},{value:"direct",label:"直连",help:"不使用任何代理,直接连接。在「只能走代理」的网络环境下会失败。"},{value:"custom",label:"自定义",help:"手动指定代理地址(见下方)。注意:当前仅支持 http / https 代理(CONNECT 隧道),socks5 代理可能无法生效。"}];function elN(e){let t=e.network;return{enableUTLS:t?.enableUTLS??!0,enableBrowserHeaders:t?.enableBrowserHeaders??!0,proxyMode:t?.proxyMode??"system",customProxyURL:t?.customProxyURL??"",retryCount:t?.retryCount??3,retryDelaysMs:t?.retryDelaysMs??[],enableFallback:t?.enableFallback??!0}}function elS(){let[e,t]=ew.useState(null),[n,r]=ew.useState(!0),[a,i]=ew.useState(!1),[o,l]=ew.useState(""),[s,c]=ew.useState(!1);function d(e){t(t=>t?{...t,...e}:t),c(!0)}async function u(){if(e&&!a){i(!0),l("");try{let n=await jd({network:e});t(elN(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"Save failed")}finally{i(!1)}}}if(ew.useEffect(()=>{!async function(){try{let e=await jc();t(elN(e))}catch(e){l(e instanceof Error?e.message:"Failed to load config")}finally{r(!1)}}()},[]),n)return(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取网络设置"});if(!e)return(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"读取失败"}),(0,eb.jsx)(QT,{children:o||"无法加载网络设置"})]});let f=elk.find(t=>t.value===e.proxyMode),h=function(e){if(!e)return e;try{let t=new URL(e);return(t.username||t.password)&&(t.username=t.username?"***":"",t.password=t.password?"***":""),t.toString()}catch{return e.replace(/\/\/[^/@]+@/,"//***:***@")}}(e.customProxyURL??"");return(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsx)("div",{className:"min-w-0",children:(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"网络设置"})}),s&&(0,eb.jsxs)(ez.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gr,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(QA,{children:"错误"}),(0,eb.jsx)(QT,{children:o})]}):null,(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"传输层伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模拟真实浏览器的 TLS 指纹与请求头,避免被 Cloudflare 等防护按机器人流量重置连接。"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(vJ,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(QI,{variant:"destructive",children:[(0,eb.jsx)(hE,{}),(0,eb.jsx)(QA,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(QT,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(vJ,{checked:e.enableBrowserHeaders,onCheckedChange:e=>d({enableBrowserHeaders:e})})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"代理模式"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制所有出站请求(模型列表拉取 + 对话流)如何解析代理。换机器表现不一时,通常是这里的问题。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gR,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xm,{className:"w-full",children:(0,eb.jsx)(g$,{})}),(0,eb.jsx)(xx,{children:elk.map(e=>(0,eb.jsx)(xv,{value:e.value,children:e.label},e.value))})]}),f?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:f.help}):null]}),"custom"===e.proxyMode?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(eA,{value:e.customProxyURL??"",onChange:e=>d({customProxyURL:e.currentTarget.value}),placeholder:"http://127.0.0.1:7890",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅支持 http / https 代理。若填写包含账号密码(user:pass),日志中会被脱敏处理。"}),h&&h!==e.customProxyURL?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["脱敏预览:",h]}):null]})]}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"重试与降级"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请求因网络抖动(连接重置 / 网关 5xx)失败时的自动恢复策略。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(ei9,{value:[e.retryCount],onValueChange:([e])=>d({retryCount:e}),min:0,max:10,step:1}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"可重试的请求失败后自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。默认 3。"})]}),(0,eb.jsx)(Qu,{}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(Qd,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(vJ,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function elC(){return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col text-foreground",children:[(0,eb.jsxs)("header",{className:"shrink-0 border-b px-6 py-4",children:[(0,eb.jsx)("h2",{className:"text-base font-semibold tracking-normal",children:"网络设置"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"调整出站请求的传输伪装、代理模式与失败重试,以适配不同网络环境并应对 Cloudflare 连接异常。"})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-6",children:(0,eb.jsx)("div",{className:"mx-auto max-w-2xl",children:(0,eb.jsx)(elS,{})})})]})}let elM="local",elE=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function elO(){let{machines:e}=xk(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:elM,name:"本机",online:!0,reachable:!0,isLocal:!0});else{let e="online"===r.status;t.push({id:r.id,name:r.name,online:e,reachable:r.reachable??e,isLocal:!1})}return n||t.unshift({id:elM,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(elM);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??elM)},[t,n]),(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":"preferences-official-extensions",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"官方扩展"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为指定机器安装并管理官方扩展。扩展与 Agent 运行时同机部署,按机器各自安装。"})]}),(0,eb.jsxs)(mu,{value:n,onValueChange:r,className:"grid gap-4",children:[(0,eb.jsx)("div",{className:"overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:(0,eb.jsx)(my,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mw,{value:e.id,className:"gap-1.5",children:[(0,eb.jsx)(eP,{className:"size-3.5"}),(0,eb.jsx)("span",{className:"truncate",children:e.name}),(0,eb.jsx)("span",{className:(0,eI.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(elP,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function elP({machine:e}){var t;let n=(t=e?.id??elM)===elM?void 0:t,r=e?.reachable??!0,[a,i]=ew.useState(null),[o,l]=ew.useState(!0),[s,c]=ew.useState(!1),[d,u]=ew.useState(0),[f,h]=ew.useState(!1),m=ew.useCallback(()=>u(e=>e+1),[]);ew.useEffect(()=>{if(!r){l(!1),c(!0),i(null);return}let e=!0,t=new AbortController;async function a(){try{let r=await GL(n,{signal:t.signal});if(!e)return;i(r.extensions??[]),c(!1)}catch{if(!e)return;c(!0)}finally{e&&l(!1)}}a();let o=f?window.setInterval(a,3e3):void 0;return()=>{e=!1,t.abort(),o&&window.clearInterval(o)}},[n,r,d,f]);let p=a?.find(e=>"browser"===e.id)??(a?elz:void 0);return o?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在获取扩展状态…"]}):s||!a?(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取扩展状态"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:r?"请确认该机器的运行时已启动,稍后重试。":"该机器当前不可达(离线或无连接路径)。"}),r&&(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:m,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(elI,{machineId:n,extension:p,onChanged:m,setPolling:h}):(0,eb.jsx)("div",{className:"rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:"该机器暂无可用的官方扩展。"})}let elz={id:"browser",name:"Vantaloom 浏览器",installed:!1,enabled:!1,running:!1,variant:"cloakbrowser",version:"",available:["cloakbrowser","chrome-for-testing"]};function elI({machineId:e,extension:t,onChanged:n,setPolling:r}){var a;let[i,o]=ew.useState(null),[l,s]=ew.useState(null),[c,d]=ew.useState(t.variant??"cloakbrowser");ew.useEffect(()=>{t.installed&&t.variant&&d(t.variant)},[t.installed,t.variant]);let u="install"===i;async function f(e,t,a=!1){o(e),s(null),a&&r(!0);try{await t(),n()}catch{s("操作失败,请稍后重试。")}finally{o(null),a&&r(!1)}}async function h(t){o("enable"),s(null),r(!0);try{await GH(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await GL(e,{timeoutMs:6e3})).extensions.find(e=>"browser"===e.id);if(n&&n.running===t)break}catch{}}n()}catch{s(t?"启动失败,请稍后重试。":"停止失败,请稍后重试。")}finally{o(null),r(!1)}}let m="enable"===i,p=m&&!t.running||t.enabled&&!t.running,g=m&&t.running,x=t.installed?t.running?(0,eb.jsx)(Bu,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bu,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bu,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bu,{variant:"outline",children:"未安装"}),v=elE.filter(e=>!t.available?.length||t.available.includes(e.id));return(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex items-start gap-3",children:[(0,eb.jsx)("span",{className:"grid size-10 shrink-0 place-items-center rounded-md bg-primary/10 text-primary [&_svg]:size-5",children:(0,eb.jsx)(Uh,{})}),(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold text-foreground",children:"Vantaloom 浏览器"}),x,t.installed&&t.version&&(0,eb.jsxs)("span",{className:"text-xs text-muted-foreground",children:["v",t.version]})]}),(0,eb.jsx)("p",{className:"mt-1 text-xs leading-relaxed text-muted-foreground",children:"让 Agent 可操作真实浏览器:网站预览直连真实浏览器,可在指定机器上运行并远程观看 Agent 的操作过程。"})]})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"浏览器内核"}),(0,eb.jsx)("div",{className:"grid gap-2 sm:grid-cols-2",children:v.map(e=>{let n=c===e.id,r=t.installed;return(0,eb.jsxs)("button",{type:"button",disabled:r||null!==i,onClick:()=>d(e.id),className:(0,eI.cn)("flex flex-col gap-1 rounded-lg border p-3 text-left transition-colors",n?"border-primary bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground hover:bg-muted/60 hover:text-foreground",(r||null!==i)&&"opacity-60"),"aria-pressed":n,children:[(0,eb.jsx)("span",{className:"text-sm font-medium text-foreground",children:e.label}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:e.description})]},e.id)})}),t.installed&&(0,eb.jsxs)("p",{className:"text-[11px] text-muted-foreground",children:["已安装的内核为 ",(a=t.variant,elE.find(e=>e.id===a)?.label??a),",如需更换请先卸载。"]})]}),(0,eb.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:t.installed?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(ez.Button,{size:"sm",disabled:null!==i,onClick:()=>h(!t.running),children:[m?(0,eb.jsx)(Vz,{className:"size-3.5"}):t.running?(0,eb.jsx)(jL,{className:"size-3.5"}):(0,eb.jsx)(VN,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(ez.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>GB(e),!0),children:["update"===i?(0,eb.jsx)(Vz,{className:"size-3.5"}):(0,eb.jsx)(bi,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(ez.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>GV(e)),children:["uninstall"===i?(0,eb.jsx)(Vz,{className:"size-3.5"}):(0,eb.jsx)(bo,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(ez.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>GF(e,c),!0),children:[u?(0,eb.jsx)(Vz,{className:"size-3.5"}):null,u?"正在安装…":"安装"]})}),t.installed&&(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"在此机器上运行"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后该机器的 Agent 可使用浏览器工具;关闭则停止浏览器与边车进程。"})]}),(0,eb.jsx)(vJ,{checked:t.enabled,disabled:null!==i,onCheckedChange:e=>void h(e),"aria-label":"在此机器上运行浏览器扩展"})]}),l&&(0,eb.jsx)("p",{className:"text-xs text-destructive",children:l})]})}let elA=(0,ek.default)("pause",[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]);function elT(e){if(!Number.isFinite(e)||e<0)return"—";if(e<1024)return`${e} B`;let t=["KB","MB","GB","TB"],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=100?0:1)} ${t[r]}`}function elR({status:e}){switch(e){case"active":return(0,eb.jsx)(Bu,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bu,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bu,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bu,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bu,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bu,{variant:"outline",children:"等待中"})}}let elD=["complete","error","canceled"];function el_({download:e}){let{status:t,percent:n,totalBytes:r}=e,a=Math.max(0,Math.min(100,n));return r<0&&"active"===t?(0,eb.jsx)("div",{className:"relative h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-y-0 w-1/3 rounded-full bg-primary/70","vtl-download-indeterminate")})}):(0,eb.jsx)("div",{className:"relative h-1.5 w-full overflow-hidden rounded-full bg-muted",children:(0,eb.jsx)("div",{className:(0,eI.cn)("h-full rounded-full transition-all","error"===t?"bg-destructive":"complete"===t?"bg-emerald-500":"paused"===t?"bg-muted-foreground/60":"bg-primary","active"===t&&"vtl-download-stripes bg-[length:1rem_1rem]"),style:{width:`${a}%`}})})}function elL({download:e}){var t,n,r;let a,[i,o]=ew.useState(!1),l=ew.useCallback(async e=>{o(!0);try{await e()}catch{}finally{o(!1)}},[]),{status:s}=e,c="active"===s?!Number.isFinite(t=e.speedBps)||t<=0?"":`${elT(t)}/s`:"",d="active"===s?function(e){if(!Number.isFinite(e)||e<0)return"";let t=Math.round(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),a=t%60;return n>0?`${n}:${String(r).padStart(2,"0")}:${String(a).padStart(2,"0")}`:`${String(r).padStart(2,"0")}:${String(a).padStart(2,"0")}`}(e.etaSeconds):"",u=!(e.totalBytes<0&&"active"===s),f="active"===s,h="paused"===s,m="error"===s||"canceled"===s,p="active"===s||"paused"===s||"waiting"===s,g=elD.includes(s);return(0,eb.jsxs)("div",{className:"grid gap-2 rounded-lg border bg-card p-3",children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,eb.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.label||e.url||e.id}),(0,eb.jsx)(elR,{status:s}),e.attempt>1&&(0,eb.jsxs)("span",{className:"text-[11px] text-muted-foreground",children:["重试 ",e.attempt]})]}),e.dest&&(0,eb.jsx)("p",{className:"mt-0.5 truncate text-[11px] text-muted-foreground",children:e.dest})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[i&&(0,eb.jsx)(Vz,{className:"size-3.5"}),f&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>mG(e.id,"pause")),children:(0,eb.jsx)(elA,{className:"size-3.5"})}),h&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>mG(e.id,"resume")),children:(0,eb.jsx)(VN,{className:"size-3.5"})}),m&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>mG(e.id,"retry")),children:(0,eb.jsx)(bi,{className:"size-3.5"})}),p&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>mG(e.id,"cancel")),children:(0,eb.jsx)(fg.XIcon,{className:"size-3.5"})}),g&&(0,eb.jsx)(ez.Button,{size:"icon",variant:"ghost",className:"size-7 text-muted-foreground hover:text-destructive",disabled:i,title:"移除","aria-label":"移除",onClick:()=>l(()=>mG(e.id,"remove")),children:(0,eb.jsx)(bo,{className:"size-3.5"})})]})]}),(0,eb.jsx)(el_,{download:e}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground",children:[u&&(0,eb.jsxs)("span",{className:"tabular-nums",children:[Math.round(e.percent),"%"]}),(0,eb.jsx)("span",{className:"tabular-nums",children:(n=e.downloadedBytes,r=e.totalBytes,a=elT(n),r<0?a:`${a} / ${elT(r)}`)}),c&&(0,eb.jsx)("span",{className:"tabular-nums",children:c}),d&&(0,eb.jsxs)("span",{className:"tabular-nums",children:["剩余 ",d]}),e.connections>0&&(0,eb.jsxs)("span",{className:"tabular-nums",children:[e.connections," 连接"]})]}),"error"===s&&e.error&&(0,eb.jsx)("p",{className:"text-[11px] text-destructive",children:e.error})]})}function el$(){let[e,t]=ew.useState([]),[n,r]=ew.useState("loading"),[a,i]=ew.useState(0),o=ew.useCallback(()=>{r("loading"),i(e=>e+1)},[]);return(ew.useEffect(()=>{let e,n=!1,a=new AbortController,i=e=>{n||(t(e),r("ready"))};async function o(){try{let e=await mq({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof mU)return void r("unavailable")}try{await mW(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof mU)return void r("unavailable");r(e=>"ready"===e?"ready":"error"),l()}}function l(){n||(e=setTimeout(()=>{n||o()},2e3))}return o(),()=>{n=!0,a.abort(),e&&clearTimeout(e)}},[a]),"loading"===n)?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在获取下载状态…"]}):"unavailable"===n||"error"===n?(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取下载状态"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请确认本机运行时已启动,稍后重试。"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:o,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]}):0===e.length?(0,eb.jsx)("div",{className:"rounded-lg border bg-card p-10 text-center text-sm text-muted-foreground",children:"暂无下载任务"}):(0,eb.jsx)("div",{className:"grid gap-2",children:e.map(e=>(0,eb.jsx)(elL,{download:e},e.id))})}function elF({label:e,description:t,value:n,min:r,max:a,onChange:i,disabled:o}){return(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:e}),t&&(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:t}),(0,eb.jsx)(eA,{type:"number",inputMode:"numeric",min:r,max:a,value:Number.isFinite(n)?n:0,disabled:o,onChange:e=>{let t=Number(e.target.value);if(Number.isNaN(t))return;let n=t;void 0!==r&&(n=Math.max(r,n)),void 0!==a&&(n=Math.min(a,n)),i(n)},className:"max-w-[12rem]"})]})}function elB(){let[e,t]=ew.useState(null),[n,r]=ew.useState("loading"),[a,i]=ew.useState(!1),[o,l]=ew.useState(!1),[s,c]=ew.useState(null),[d,u]=ew.useState(0),f=ew.useCallback(()=>{r("loading"),u(e=>e+1)},[]);ew.useEffect(()=>{let e=!1,n=new AbortController;return async function(){try{let a=await mX({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof mU?"unavailable":"error")}}(),()=>{e=!0,n.abort()}},[d]);let h=ew.useCallback((e,n)=>{t(t=>t?{...t,[e]:n}:t),l(!1)},[]),m=ew.useCallback(async()=>{if(e){i(!0),c(null),l(!1);try{let n=await mY(e);t(n),l(!0)}catch{c("保存失败,请稍后重试。")}finally{i(!1)}}},[e]);return"loading"===n?(0,eb.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border bg-card p-6 text-sm text-muted-foreground",children:[(0,eb.jsx)(Vz,{className:"size-4"}),"正在加载下载设置…"]}):"unavailable"!==n&&"error"!==n&&e?(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"下载目录"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载文件的默认保存位置。"}),(0,eb.jsx)(eA,{type:"text",value:e.downloadDir,disabled:a,placeholder:"例如 D:\\\\Downloads",onChange:e=>h("downloadDir",e.target.value)})]}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(elF,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(elF,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(elF,{label:"失败重试次数",description:"任务失败后的自动重试上限。",value:e.maxRetries,min:0,max:20,disabled:a,onChange:e=>h("maxRetries",e)})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"代理"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载使用的代理地址,留空则不使用代理。"}),(0,eb.jsx)(eA,{type:"text",value:e.proxy,disabled:a,placeholder:"例如 http://127.0.0.1:7890(留空=不使用)",onChange:e=>h("proxy",e.target.value)})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"校验文件哈希"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"下载完成后校验文件哈希以确保完整性。"})]}),(0,eb.jsx)(vJ,{checked:e.verifyChecksums,disabled:a,onCheckedChange:e=>h("verifyChecksums",e),"aria-label":"校验文件哈希"})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,eb.jsxs)(ez.Button,{size:"sm",disabled:a,onClick:m,children:[a?(0,eb.jsx)(Vz,{className:"size-3.5"}):null,a?"正在保存…":"保存设置"]}),o&&!a&&(0,eb.jsx)("span",{className:"text-xs text-emerald-600 dark:text-emerald-400",children:"已保存"}),s&&(0,eb.jsx)("span",{className:"text-xs text-destructive",children:s})]})]}):(0,eb.jsxs)("div",{className:"grid gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-6",children:[(0,eb.jsx)("p",{className:"text-sm text-destructive",children:"无法获取下载设置"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请确认本机运行时已启动,稍后重试。"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(ez.Button,{variant:"outline",size:"sm",onClick:f,children:[(0,eb.jsx)(bi,{className:"size-3.5"}),"重试"]})})]})}function elV(){return(0,eb.jsx)("div",{className:"vtl-app-background h-full min-h-0 overflow-auto p-6 pb-14 text-foreground md:pb-6",children:(0,eb.jsx)("div",{className:"mx-auto w-full max-w-3xl","data-tour":"system-downloads",children:(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsxs)("h3",{className:"flex items-center gap-2 text-base font-semibold tracking-normal",children:[(0,eb.jsx)(v2,{className:"size-4"}),"下载"]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"管理本机的下载任务,并配置下载目录、并发与代理等全局选项。"})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"下载任务"}),(0,eb.jsx)(el$,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(elB,{})]})]})})})}let elH=["light","dark","jelly"],elU={light:{label:"Light",icon:eau,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eal,className:"text-sidebar-foreground/60"},jelly:{label:"Jelly",icon:function(e){return(0,eb.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...e,children:[(0,eb.jsx)("path",{d:"M6.5 11.5C6.5 8 8.7 5.5 12 5.5s5.5 2.5 5.5 6v.6c0 .8-.6 1.4-1.4 1.4H7.9c-.8 0-1.4-.6-1.4-1.4v-.6Z"}),(0,eb.jsx)("path",{d:"M7.8 13.5c.4 1 1.1 1.5 2 1.5s1.6-.5 2-1.5c.4 1 1.1 1.5 2 1.5s1.6-.5 2-1.5"}),(0,eb.jsx)("path",{d:"M9 15.5c0 1.4-1.2 1.4-1.2 2.8 0 .7.3 1.2.8 1.7"}),(0,eb.jsx)("path",{d:"M12 15.5c0 1.6-1.4 1.6-1.4 3.2 0 .7.3 1.2.8 1.8"}),(0,eb.jsx)("path",{d:"M15 15.5c0 1.4 1.2 1.4 1.2 2.8 0 .7-.3 1.2-.8 1.7"})]})},className:"text-primary"}};function elq(){let{resolvedTheme:e,setTheme:t}=(0,hO.useTheme)(),[n,r]=ew.useState(eaC.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaC.appearanceThemeStorageKey)??eaC.defaultAppearanceTheme;r(e),(0,eaC.applyAppearanceTheme)({theme:e})},[]);let a=n===eaC.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=elH.indexOf(a),o=elH[(i+1)%elH.length]??"light",{icon:l,label:s,className:c}=elU[a];function d(e){r(e),window.localStorage.setItem(eaC.appearanceThemeStorageKey,e),(0,eaC.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(ez.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,eI.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${Q8.theme}: ${s}`,title:`${Q8.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(eaC.jellyAppearanceTheme);return}d(eaC.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let elW=(0,ek.default)("chart-area",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M7 11.207a.5.5 0 0 1 .146-.353l2-2a.5.5 0 0 1 .708 0l3.292 3.292a.5.5 0 0 0 .708 0l4.292-4.292a.5.5 0 0 1 .854.353V16a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z",key:"q0gr47"}]]);(0,ek.default)("layout-dashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),(0,ek.default)("route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);let elK=[{id:"run-ui-polish",title:"组件库视觉回归检查",machine:"Studio-PC",agent:"UI Polish",state:"running",started:"14:08",runtime:"22m",progress:68,load:54},{id:"run-runner-build",title:"Linux runner 镜像构建",machine:"Linux-runner-02",agent:"Build Agent",state:"running",started:"14:15",runtime:"15m",progress:41,load:86},{id:"run-access-audit",title:"工作组权限审阅",machine:"Studio-PC",agent:"Access Agent",state:"blocked",started:"14:21",runtime:"9m",progress:37,load:18},{id:"run-docs",title:"发布说明摘要",machine:"MacBook-build",agent:"Docs Agent",state:"queued",started:"等待",runtime:"0m",progress:0,load:0},{id:"run-cache-clean",title:"缓存清理策略验证",machine:"Linux-runner-02",agent:"Ops Sentinel",state:"failed",started:"13:54",runtime:"6m",progress:28,load:12}],elG=[{id:"worker-studio",machine:"Studio-PC",role:"local coordinator",active:3,capacity:6,cpu:42,memory:68},{id:"worker-runner",machine:"Linux-runner-02",role:"gpu worker",active:4,capacity:5,cpu:76,memory:81},{id:"worker-mac",machine:"MacBook-build",role:"build host",active:0,capacity:3,cpu:8,memory:24}],elX=[{id:"confirm-shell",title:"Studio-PC 请求执行发布前文件写入",meta:"UI Polish · apply_patch",tone:"normal"},{id:"confirm-service",title:"Linux-runner-02 请求重启 runner 服务",meta:"Ops Sentinel · Restart-Service",tone:"warning"},{id:"confirm-token",title:"工作组 token 加入新机器",meta:"Access Agent · admin required",tone:"normal"}],elY=[["14:29","Studio-PC","pnpm --filter vantaloom-app lint","完成"],["14:27","Linux-runner-02","docker build agent-runtime","运行中"],["14:22","Studio-PC","apply_patch agent settings","完成"],["14:17","MacBook-build","pnpm typecheck","排队"],["14:03","Linux-runner-02","cache prune dry-run","失败"]],elZ={cpu:{label:"CPU",color:"var(--chart-1)"},memory:{label:"Memory",color:"var(--chart-3)"},network:{label:"Network",color:"var(--chart-5)"}};function elJ(e,t,n=42,r){return(0,eb.jsx)("section",{className:(0,eI.cn)("size-full rounded-xl border bg-card p-5",r&&"vtl-jelly-image-card",r&&r.includes("/bg")&&"vtl-jelly-image-card-shadowless"),style:r?Q3({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeN,{label:e,value:t,minSize:n})})}function elQ(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let el0={metrics:{online:2,health:88.4,latency:"38ms",events:17},machines:[{id:"studio",name:"Studio-PC",os:"Windows",status:"online",link:"direct",heartbeat:"3s",cpu:42,memory:68,disk:71,network:24},{id:"runner",name:"Linux-runner-02",os:"Linux",status:"online",link:"p2p",heartbeat:"5s",cpu:76,memory:81,disk:62,network:43},{id:"mac",name:"MacBook-build",os:"macOS",status:"sleeping",link:"direct",heartbeat:"2m",cpu:8,memory:24,disk:48,network:6}],trend:[{time:"09:00",cpu:36,memory:54,network:24},{time:"10:00",cpu:48,memory:61,network:29},{time:"11:00",cpu:44,memory:58,network:34},{time:"12:00",cpu:63,memory:72,network:41},{time:"13:00",cpu:58,memory:69,network:37},{time:"14:00",cpu:71,memory:76,network:46}],networkLinks:[["Studio-PC","Linux-runner-02","P2P","38ms","0.3%"],["Studio-PC","MacBook-build","Direct","12ms","0.0%"],["Linux-runner-02","MacBook-build","Relay fallback","84ms","1.1%"]],events:[["14:31","Linux-runner-02 心跳延迟升高"],["14:28","Studio-PC 完成 2 个工具调用"],["14:19","MacBook-build 进入睡眠状态"],["14:12","工作组权限策略同步完成"],["14:04","P2P 链路切换到备用路径"]],serviceHealth:[{id:"local-service",name:"Local service",state:"正常",samples:[96,98,97,95,96,94,97,98,96,95,97,96]},{id:"agent-runtime",name:"Agent runtime",state:"正常",samples:[91,93,94,90,88,92,94,93,91,89,92,94]},{id:"p2p-mesh",name:"P2P mesh",state:"波动",samples:[78,82,76,73,68,71,74,79,83,80,77,72]},{id:"plugin-bridge",name:"Plugin bridge",state:"告警",samples:[88,86,84,82,79,74,63,54,48,52,67,76]}]},el1=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("运行中","运行队列"),render:e=>elJ(e.title,"07",44,Q1)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(ub,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("排队","调度器"),render:e=>elJ(e.title,"04",44,Q2)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(en_,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("待确认","确认队列"),render:e=>elJ(e.title,"03",44,Q5)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("Worker","Agent worker"),render:e=>elJ(e.title,"14",44,Q4)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(GT,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:elQ("任务队列","运行队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et8,{items:elK})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:elQ("Agent worker","Worker 状态"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et9,{workers:elG})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(eeE,{className:"size-4"}),defaultSize:{w:7,h:4},defaultConfig:elQ("最近执行","执行日志"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et6,{items:elY})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:5,h:4},defaultConfig:elQ("待确认","确认队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:e.title}),(0,eb.jsx)(et3,{items:elX})]})}],el2=[{id:"metric-runs",kind:"metric-runs",x:0,y:0,w:3,h:2},{id:"metric-queued",kind:"metric-queued",x:3,y:0,w:3,h:2},{id:"metric-blocked",kind:"metric-blocked",x:6,y:0,w:3,h:2},{id:"metric-workers",kind:"metric-workers",x:9,y:0,w:3,h:2},{id:"queue",kind:"queue",x:0,y:2,w:7,h:5},{id:"workers",kind:"workers",x:7,y:2,w:5,h:5},{id:"log",kind:"log",x:0,y:7,w:7,h:4},{id:"confirmations",kind:"confirmations",x:7,y:7,w:5,h:4}];function el5(e=el0){return[{id:"metric-online",title:"在线机器",description:"当前在线机器数量。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("在线机器","机器心跳"),render:t=>elJ(t.title,String(e.metrics.online),44,Q1)},{id:"metric-health",title:"健康度",description:"工作组整体健康度。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("健康度","服务遥测"),render:t=>elJ(t.title,`${e.metrics.health}%`,44,Q2)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(eeA,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("平均延迟","网络遥测"),render:t=>elJ(t.title,e.metrics.latency,44,Q5)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:elQ("事件","事件流"),render:t=>elJ(t.title,String(e.metrics.events),44,Q4)},{id:"machines",title:"机器健康矩阵",description:"各机器资源和心跳状态。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:elQ("机器健康矩阵","机器遥测"),render:t=>(0,eb.jsxs)("section",{className:"vtl-jelly-image-card flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",style:Q3({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enr,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(elW,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:elQ("资源趋势","机器遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(ens,{config:elZ,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(QG,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:elQ("网络连接","网络遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enl,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(ety,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:elQ("事件流","事件流"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enn,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(GD,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:elQ("服务健康","服务遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden rounded-xl border bg-card p-3",children:[(0,eb.jsx)(Q6,{title:t.title}),(0,eb.jsx)(enc,{services:e.serviceHealth})]})}]}el5();let el4=[{id:"metric-online",kind:"metric-online",x:0,y:0,w:3,h:2},{id:"metric-health",kind:"metric-health",x:3,y:0,w:3,h:2},{id:"metric-latency",kind:"metric-latency",x:6,y:0,w:3,h:2},{id:"metric-events",kind:"metric-events",x:9,y:0,w:3,h:2},{id:"machines",kind:"machines",x:0,y:2,w:7,h:5},{id:"trend",kind:"trend",x:7,y:2,w:5,h:5},{id:"network",kind:"network",x:0,y:7,w:6,h:4},{id:"events",kind:"events",x:6,y:7,w:6,h:4},{id:"services",kind:"services",x:0,y:11,w:12,h:3}],el3={totals:{machines:4,online:2,runtime:3,tokens:7},machines:[{id:"studio",name:"Studio-PC",role:"本机",group:"Core",os:"Windows 11",runtime:"0.16.4",state:"online",tags:["admin","shell","files","scheduler"],agent:"6/8",cpu:42,memory:68,version:"Agent runtime 0.16.4",admin:"Allay"},{id:"runner",name:"Linux-runner-02",role:"GPU worker",group:"Compute",os:"Ubuntu 24.04",runtime:"0.16.3",state:"online",tags:["gpu","agent","files"],agent:"4/6",cpu:76,memory:81,version:"Agent runtime 0.16.3",admin:"Ops"},{id:"mac",name:"MacBook-build",role:"构建机",group:"Build",os:"macOS 15.4",runtime:"0.15.9",state:"sleeping",tags:["build","readonly"],agent:"0/3",cpu:8,memory:24,version:"Agent runtime 0.15.9",admin:"Allay"},{id:"observer",name:"Observer-01",role:"只读观测节点",group:"Edge",os:"Debian 13",runtime:"0.16.2",state:"warning",tags:["readonly","audit"],agent:"1/2",cpu:18,memory:36,version:"Agent runtime 0.16.2",admin:"Security"}],topology:{nodes:[{id:"studio",label:"Studio-PC",meta:"本机",x:50,y:18},{id:"runner",label:"Linux-runner-02",meta:"GPU worker",x:22,y:60},{id:"mac",label:"MacBook-build",meta:"构建机",x:76,y:58,state:"warning"},{id:"observer",label:"Observer-01",meta:"只读观测",x:50,y:82,state:"warning"}],links:[{id:"sr",from:"studio",to:"runner",kind:"p2p",label:"P2P",meta:"38ms / 0.3%"},{id:"sm",from:"studio",to:"mac",kind:"direct",label:"Direct",meta:"12ms / 0%"},{id:"ro",from:"runner",to:"observer",kind:"relay",label:"Relay",meta:"84ms / 1.1%"},{id:"mo",from:"mac",to:"observer",kind:"down",label:"Down",meta:"lost"}]},pathTotals:{direct:1,p2p:1,relay:1,broken:1},latency:[{time:"09:00",p2p:42,direct:12,relay:96},{time:"10:00",p2p:39,direct:12,relay:88},{time:"11:00",p2p:44,direct:14,relay:91},{time:"12:00",p2p:38,direct:12,relay:84},{time:"13:00",p2p:36,direct:11,relay:86},{time:"14:00",p2p:41,direct:13,relay:93}],candidates:[["Studio-PC","Linux-runner-02","P2P","symmetric NAT","38ms","0.3%"],["Studio-PC","MacBook-build","Direct","open port 4178","12ms","0.0%"],["Linux-runner-02","Observer-01","Relay","udp blocked","84ms","1.1%"],["MacBook-build","Observer-01","Interrupted","sleep","-","-"]]};function el6({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eey,{boardId:"runtime-operations",definitions:el1,initialLayouts:el2,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function el8({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elw("/api/local/machines/telemetry",ely),a=ew.useMemo(()=>el5(r),[r]);return(0,eb.jsx)(eey,{boardId:"telemetry",definitions:a,initialLayouts:el4,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function el7({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,eI.cn)("[[data-vtl-theme=jelly]_&]:opacity-70",e),children:[(0,eb.jsx)("path",{d:"m658 393 2 1v47l57 1v1l-12 2-45 5v89l2 14 4 7 6 3h12l8-2-5-10-1-4v-11l3-8 4-6 7-7 14-8 16-6 33-9h3l-1-16-4-8-6-5-10-3h-15l-13 3-16 7-7 5 1-4 8-8 14-8 12-4 7-1h23l16 4 9 6 4 5 4 9 1 5 1 69 2 11 3 5 7 5v1h-28l-6-4-4-11v-7h-2l-2 4-7 8-11 8-10 4-4 1h-21l-9-4-7-5-14 7-7 2h-18l-11-4-6-5-5-10-1-4-1-33v-61l1-4-26 3-9-7-4-3 4-1 34-2v-34l2-5zm107 104-19 6-17 8-10 9-4 8-1 4v11l3 8 8 7 7 2h8l10-3 10-7 6-7 1-2v-44z"}),(0,eb.jsx)("path",{d:"m1147 452h15l11 3 10 9 5 10v3h2l2-5 10-10 12-7 11-3h18l10 3 6 4 7 8 4 12 1 9 1 62 3 12 4 5 3 3h-38l-1-86-2-9-5-7-7-3h-12l-10 3-9 6-7 8-1 88h-26l-1-88-3-9-5-6-6-2h-11l-9 3-9 7-4 6-1 89h-34l6-14 4-19 1-10v-28l-3-19-6-18-4-9h28l3 8 3 13 7-8 8-7 10-5z"}),(0,eb.jsx)("path",{d:"m556 449h19l13 4 10 9 4 9 2 13 1 67 3 10 4 5 5 4h-40l-1-85-3-12-4-6-7-4-3-1h-14l-11 4-10 7-5 8-1 6-1 83h-25l-1-99-2-17 1-1h24l2 6 2 13 9-10 12-8 11-4z"}),(0,eb.jsx)("path",{d:"m409 450h22l16 4 9 6 6 9 3 11 1 71 2 9 3 5 6 4v1h-27l-6-4-3-7-2-9-11 12-13 8-9 3-7 1h-13l-12-3-10-7-6-10-1-4v-13l5-12 4-5 12-9 18-8 35-10 6-2v-14l-3-8-5-5-7-3-4-1h-15l-13 3-20 10 6-9 10-7 13-5zm27 47-23 8-13 7-8 7-5 9-1 4v11l5 10 5 4 8 3h10l11-4 8-6 5-6 1-4v-43z"}),(0,eb.jsx)("path",{d:"m918 450h22l15 3 16 8 12 11 7 8 7 14 3 11v21l-3 12-4 8-5-5-8-17-11-33-7-13-9-10-10-6-7-2h-12l-11 4-8 7-7 10-4 13-1 7v18l3 14 4 10 6 8 9 8 10 4 6 1h9l9-2 7-4 5 1 5 5v2l-10 5-13 3h-22l-15-4-16-8-10-9-6-7-7-14-3-14v-16l3-13 6-12 8-10 12-9 12-5z"}),(0,eb.jsx)("path",{d:"m224 442h17l15 3 10 5 10 9 9 13 14 29 13 28 6 14v2h2l1-5 16-39 17-40 4-8h9l-2 6-18 42-11 26-17 40-9 21-3-1-29-58-10-19-12-23-8-11-9-10-9-7-10-4-5-1h-19l-15 3 4-4 13-6 16-4z"}),(0,eb.jsx)("path",{d:"m1010 450h19l17 4 13 7 12 11 7 11 5 13 2 11v10l-3 16-4 10-9 12-8 7-12 7-13 4-7 1h-25l-16-4-13-7-11-9-7-9-7-14-2-9v-17l3-12 5-10 3-1 7 18 11 33 8 14 8 9 8 5 12 3h8l12-3 10-7 6-8 5-12 2-11v-19l-3-14-5-12-8-10-10-6-7-2h-13l-11 4-6 4-4-2-6-5 3-3 10-5z"}),(0,eb.jsx)("path",{d:"m848 371h1l1 171 2 9 4 6 6 5 19 5 6 2v1h-65l-1-188z"})]})}function el9(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function ese(e){return"u"<typeof document?null:document.querySelector(e)}function est(){return null!=ese('[role="menu"]')}function esn(){return null!=ese('[data-tour="init-wizard"]')}function esr(){let e=ese('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=el3){elQ("机器","机器组"),elQ("在线","机器心跳"),elQ("Runtime","Agent runtime"),elQ("Token","机器注册"),elQ("机器组","机器组"),elQ("拓扑图","网络拓扑"),elQ("直连","网络拓扑"),elQ("P2P","网络拓扑"),elQ("Relay","网络拓扑"),elQ("中断","网络拓扑"),elQ("延迟","网络遥测"),elQ("候选路径","网络候选路径")}(),elQ("日志与审计","审计事件"),elQ("筛选","审计筛选"),elQ("拒绝事件","审计事件"),elQ("事件趋势","审计事件");var esa=e.i(64990);function esi(){let e=sy(),[t,n]=ew.useState(!1);ew.useEffect(()=>{try{n("1"===window.localStorage.getItem("vtl:sidebar-collapsed"))}catch{}},[]);let r=ew.useCallback(()=>{n(e=>{let t=!e;try{window.localStorage.setItem("vtl:sidebar-collapsed",t?"1":"0")}catch{}return t})},[]),[a,i]=ew.useState("home"),[o,l]=ew.useState(!1),[s,c]=ew.useState(),[d,u]=ew.useState(),[f,h]=ew.useState([]),[m,p]=ew.useState([]),[g,x]=ew.useState("conversation"),[v,b]=ew.useState(0),y=s?.conversation.id,w=s?.conversation.ownerMachineId;ew.useEffect(()=>{h([]),p([]),x("conversation")},[y]),ew.useEffect(()=>{let e;if(!y||"new-agent-conversation"!==a&&"project-conversation"!==a)return void p([]);let t=!1,n=async()=>{let r=await sA(y,w);t||(p(r),e=window.setTimeout(n,!function e(t){return t.some(t=>t.running||e(t.children??[]))}(r)?6e3:2e3))};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[y,w,a]);let[j,k]=ew.useState(),[N,S]=ew.useState(!1),[C,M]=ew.useState([]),[E,O]=ew.useState([]),[P,z]=ew.useState({}),[I,A]=ew.useState(),[T,R]=ew.useState(u_),[D,_]=ew.useState([]),[L,$]=ew.useState(),[F,B]=ew.useState(),[V,H]=ew.useState(),[U,q]=ew.useState(),W=ew.useRef(!1),K=ew.useCallback(e=>{R(t=>iQ(e,t))},[]),G=ew.useCallback(e=>{_(t=>iQ(e,t))},[]),X=ew.useCallback(async(e,t)=>{let n="u">typeof performance?performance.now():Date.now();console.debug(`[open] click conversation=${e} owner=${t??"local"}`),u({id:e,ownerMachineId:t}),i("new-agent-conversation");let r=()=>Math.round(("u">typeof performance?performance.now():Date.now())-n);try{let n=await sB(e,t);console.debug(`[open] detail loaded in ${r()}ms (id=${e})`),c(n),u(t=>t?.id===e?void 0:t)}catch(n){if(n instanceof sk){let r=n.openedBy?.displayName||"另一台设备";if(window.confirm(`此对话正在「${r}」上打开,无法同时操作。是否强制接管(对方将被踢出)?`)){try{let n=await sB(e,t,{force:!0});c(n)}finally{u(t=>t?.id===e?void 0:t)}return}u(t=>t?.id===e?void 0:t),s||i("home");return}console.warn(`[open] failed after ${r()}ms (id=${e})`,n),u(t=>t?.id===e?void 0:t),s||i("home")}},[s]),Y=ew.useCallback(async(e,t)=>{h([]),await X(e,t)},[X]),Z=ew.useCallback(()=>{c(void 0),i("new-agent-conversation")},[]),J=ew.useCallback(async()=>{let e=await sP();e?await X(e.conversation.id,e.conversation.ownerMachineId):Z()},[X,Z]),Q=ew.useCallback(async()=>{W.current=!0,R(u_),_([]),i("new-canvas");try{let e=await QB({title:"新画布",nodes:u_,edges:[]});B(e.canvas.id),H("local")}catch{B(void 0),H(void 0),W.current=!1}},[]),ee=ew.useCallback(async(e,t)=>{try{await QH(e,t);let n=await QF(e,t);W.current=!0,R(n.nodes),_(n.edges),B(n.canvas.id),H(n.canvas.ownerMachineId),i("new-canvas")}catch{}},[]),et=ew.useCallback(e=>{q(e),i("project-overview")},[]),en=ew.useCallback(e=>{q(e),i("kanban")},[]),er=ew.useCallback(e=>{q(e),i("project-settings")},[]),ea=ew.useCallback(async(e,t)=>{q(e);let n=t;if(!n)try{n=(await enE(e)).canvasId}catch{}if(!n)try{n=(await QB({title:"工程画布",nodes:u_,edges:[]})).canvas.id,await enP(e,{canvasId:n}).catch(()=>{})}catch{return}await ee(n)},[ee]),ei=ew.useCallback(async(e,t,n)=>{q(e),h([]),u({id:t,ownerMachineId:n}),i("project-conversation");try{let e=await sB(t,n);c(e)}catch{}finally{u(e=>e?.id===t?void 0:e)}},[]),eo=ew.useCallback(()=>{i("new-project")},[]),el=ew.useCallback(async e=>{try{let t=await enR(e);await ei(e,t.id,t.ownerMachineId)}catch{}},[ei]);ew.useEffect(()=>{if(!F)return;if(W.current){W.current=!1;return}let e=window.setTimeout(()=>{QV(F,{nodes:T,edges:D,nodeIds:T.map(e=>e.id)},V).catch(()=>{})},800);return()=>window.clearTimeout(e)},[T,D,F,V]);let es=ew.useCallback(({item:t})=>{if(!e||"new-canvas"!==t.id&&"all-canvases"!==t.id&&"open-recent-canvas"!==t.id){if("new-canvas"===t.id)return void Q();if("all-canvases"===t.id)return void i("all-canvases");if("new-agent-conversation"===t.id)return void Z();if("open-recent-conversation"===t.id)return void J();if("runs"===t.id)return void i("runs");if("telemetry"===t.id)return void i("telemetry");("preferences"===t.id||"preferences-model-routes"===t.id||"preferences-agent-config"===t.id||"preferences-subagent-config"===t.id||"preferences-cc-engine-config"===t.id||"preferences-system-prompt"===t.id||"preferences-skills"===t.id||"preferences-memory"===t.id||"preferences-layout"===t.id||"preferences-official-extensions"===t.id||"network-topology"===t.id||"network-settings"===t.id||"system-downloads"===t.id||"check-update"===t.id||"account"===t.id||"balance-usage"===t.id||"feedback"===t.id)&&i(t.id)}},[Q,e,J,Z]),{start:ec}=(0,esa.useTour)(),ed=ew.useCallback(()=>{var e;ec((e={select:e=>es({item:{id:e}}),startNewConversation:Z,goHome:()=>{i("home"),c(void 0)}},{id:"product-tour",steps:[{id:"intro",centered:!0,title:"欢迎使用 Vantaloom 👋",body:(0,eb.jsxs)(eb.Fragment,{children:["这是一份手把手向导,会高亮关键位置并在需要时",(0,eb.jsx)("b",{children:"请你亲自操作"}),"(没做完不会出现「下一步」)。 全程界面都可正常点击;随时按 ",(0,eb.jsx)("kbd",{children:"Esc"})," 或右上角 ✕ 退出。"]})},{id:"theme",before:el9(()=>e.goHome()),target:()=>ese('[role="menu"]')??ese('[data-tour="account-button"]'),gate:est,gateHint:"点击用户名按钮展开菜单",padding:6,title:"切换主题",body:(0,eb.jsxs)(eb.Fragment,{children:["点击左下角的 ",(0,eb.jsx)("b",{children:"用户名按钮"})," 打开菜单。展开后,里面的 ",(0,eb.jsx)("b",{children:"外观 / 主题"})," 项每点一次就在"," ",(0,eb.jsx)("b",{children:"浅色 → 深色 → 果冻"})," 之间循环。"]})},{id:"model-routes-add",before:el9(()=>e.select("preferences-model-routes")),target:()=>ese('[data-tour="model-route-form"]')??ese('[data-tour="add-model-route"]'),gate:()=>null!=ese('[data-tour="model-route-form"]'),gateHint:"点击「添加模型路由」",title:"配置模型渠道(1/2)",body:(0,eb.jsxs)(eb.Fragment,{children:["进入 ",(0,eb.jsx)("b",{children:"设置 → 模型路由"}),"。请点 ",(0,eb.jsx)("b",{children:"添加模型路由"})," 新增一个第三方渠道(任何 OpenAI / Anthropic 兼容 API 都行)。"]})},{id:"model-routes-fields",before:el9(()=>e.select("preferences-model-routes")),target:'[data-tour="model-route-form"]',waitForTarget:2500,title:"配置模型渠道(2/2)",body:(0,eb.jsxs)(eb.Fragment,{children:["表单各项:",(0,eb.jsx)("b",{children:"提供商名称"})," 仅作标识;",(0,eb.jsx)("b",{children:"协议"})," 选 OpenAI / Anthropic 风格;",(0,eb.jsx)("b",{children:"Endpoint URL"})," 填到 ",(0,eb.jsx)("code",{children:"/v1"})," 这一级;",(0,eb.jsx)("b",{children:"API Key"})," 是密钥;",(0,eb.jsx)("b",{children:"可用模型"})," 勾选启用并可设上下文长度。",(0,eb.jsx)("br",{}),"⚠️ 填完",(0,eb.jsx)("b",{children:"务必点「保存」"}),",否则不生效。"]})},{id:"agent-config-compression",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-compression"]',title:"代理配置 · 压缩上下文",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → 代理配置"})," 的第一块:当对话 token 接近模型上下文窗口的设定百分比时,自动用",(0,eb.jsx)("b",{children:"压缩模型"})," 压缩历史。阈值 0% 表示关闭,建议 70%-85%。"]})},{id:"agent-config-summary",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-summary"]',title:"代理配置 · 对话摘要",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"对话摘要"}),":开启后用",(0,eb.jsx)("b",{children:"摘要模型"}),"自动生成 / 更新对话标题与每轮的轮次标题,方便在侧边栏 与时间轴里快速辨认。"]})},{id:"agent-config-approval",before:el9(()=>e.select("preferences-agent-config")),target:'[data-tour="agent-config-approval"]',title:"代理配置 · 命令审批",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"命令审批"}),":在 Auto 权限模式下,用",(0,eb.jsx)("b",{children:"审批模型"})," + ",(0,eb.jsx)("b",{children:"审批提示词"})," 判断 Agent 发起的命令 是否自动放行。留空则非危险命令全部放行。改完记得 ",(0,eb.jsx)("b",{children:"保存"}),"。"]})},{id:"subagent-explore",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-explore"]',title:"子代理 · 探索",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → 子代理配置"}),"。",(0,eb.jsx)("b",{children:"探索"})," 子代理擅长只读检索代码 / 资料。可单独设它的",(0,eb.jsx)("b",{children:"使用模型"}),"(留空则继承上级)与",(0,eb.jsx)("b",{children:"系统提示词"}),"。"]})},{id:"subagent-workflow",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-workflow"]',title:"子代理 · 工作流",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"工作流"})," 子代理负责多步骤任务编排,同样可单独配模型与提示词。"]})},{id:"subagent-operator",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-operator"]',title:"子代理 · 操作",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"操作"})," 子代理执行写文件 / 跑命令等动手类任务,工具集固定。"]})},{id:"subagent-custom",before:el9(()=>e.select("preferences-subagent-config")),target:'[data-tour="subagent-custom"]',title:"子代理 · 自定义",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"自定义子代理"}),":主 Agent 可自取名字、从你设的",(0,eb.jsx)("b",{children:"可用模型池"}),"里挑模型来召唤,拥有完整 工具集,还能再派发上面三种官方子代理。"]})},{id:"check-update",before:el9(()=>e.select("check-update")),target:'[data-tour="check-update"]',title:"检查更新",body:(0,eb.jsxs)(eb.Fragment,{children:["这里查看各机器的运行时版本并 ",(0,eb.jsx)("b",{children:"立即更新"}),"。原理:从 npm 拉取最新运行时包、就地替换二进制与 前端,",(0,eb.jsx)("b",{children:"无需重装"}),";P2P mesh 未变时更新还",(0,eb.jsx)("b",{children:"不需要管理员权限"}),"。"]})},{id:"hub-account",before:el9(()=>e.select("account")),target:'[data-tour="hub-account"]',title:"Hub 账户",body:(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("b",{children:"设置 → Hub 账户"}),"。上方是你的",(0,eb.jsx)("b",{children:"账户信息"}),"与",(0,eb.jsx)("b",{children:"设备绑定"}),"状态——Hub 负责多机互联、组网 下发与云端身份。"]})},{id:"hub-account-danger",before:el9(()=>e.select("account")),target:'[data-tour="hub-account-danger"]',title:"Hub 账户 · 危险操作",body:(0,eb.jsxs)(eb.Fragment,{children:["下方的 ",(0,eb.jsx)("b",{children:"危险操作"})," 区可",(0,eb.jsx)("b",{children:"解除设备绑定"}),"或",(0,eb.jsx)("b",{children:"退出登录"}),"。这些操作不可逆,会把本机移出 账户,请谨慎。"]})},{id:"new-conversation",before:el9(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:esn,gateHint:"点击「新建对话」继续",title:"创建新对话",body:(0,eb.jsxs)(eb.Fragment,{children:["回到主页,请点 ",(0,eb.jsx)("b",{children:"新建对话"})," 进入初始化向导(侧边栏顶部也有同样入口)。"]})},{id:"wizard-1",target:'[data-tour="init-wizard"]',placement:"left",padding:4,waitForTarget:5e3,gate:()=>!esn()||esr()>=2,gateHint:"配好运行环境后点向导的「下一步」",title:"向导 ① 运行环境与引擎",body:(0,eb.jsxs)(eb.Fragment,{children:["先选在",(0,eb.jsx)("b",{children:"哪台机器"}),"上运行;本机运行时还能选 ",(0,eb.jsx)("b",{children:"运行引擎"}),"——",(0,eb.jsx)("b",{children:"Vantaloom"})," / ",(0,eb.jsx)("b",{children:"Claude Code"})," / ",(0,eb.jsx)("b",{children:"reclaude"}),"(Claude Code 仅限本机)。 整个向导区域已高亮,配好后点向导自己的 ",(0,eb.jsx)("b",{children:"下一步"}),"。"]})},{id:"wizard-2",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn()||esr()>=3,gateHint:"选好工作目录后点向导的「下一步」",title:"向导 ② 选择工作目录",body:(0,eb.jsxs)(eb.Fragment,{children:["先给对话",(0,eb.jsx)("b",{children:"起个名字"}),",再选 ",(0,eb.jsx)("b",{children:"工作目录"}),"——这是智能体能读写的根目录 (Claude Code 用单个目录作为工作根目录)。选好后点向导的「下一步」。"]})},{id:"wizard-3",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn()||esr()>=4,gateHint:"配好模型后点向导的「下一步」",title:"向导 ③ 模型设置",body:(0,eb.jsxs)(eb.Fragment,{children:["选择这段对话使用的",(0,eb.jsx)("b",{children:"模型"}),"——",(0,eb.jsx)("b",{children:"Vantaloom"})," 用你刚配置的模型路由,",(0,eb.jsx)("b",{children:"Claude Code"})," 则由其自身提供模型。选好后点向导的「下一步」。"]})},{id:"wizard-4",target:'[data-tour="init-wizard"]',placement:"left",padding:4,gate:()=>!esn(),gateHint:"点向导的「确认开始」创建对话",title:"向导 ④ 确认开始",body:(0,eb.jsxs)(eb.Fragment,{children:["核对无误后,点向导右下角的 ",(0,eb.jsx)("b",{children:"确认开始"})," 创建对话。创建成功后会自动进入对话界面。"]})},{id:"composer-toolbar",target:'[data-slot="agent-input-composer-toolbar"]',waitForTarget:6e3,title:"输入框下方的按钮",body:(0,eb.jsxs)(eb.Fragment,{children:["输入框下面一排:",(0,eb.jsx)("b",{children:"权限模式"}),"(工具调用是否需审批)、",(0,eb.jsx)("b",{children:"模型选择"}),"、右侧 ",(0,eb.jsx)("b",{children:"发送 / 停止"}),"按钮(运行中变停止),以及 ",(0,eb.jsx)("b",{children:"上下文用量"})," 指示。"]})},{id:"queue-stack",target:'[data-slot="agent-input-composer-textarea"]',waitForTarget:3e3,title:"待发送栈(Tab 键)",body:(0,eb.jsxs)(eb.Fragment,{children:["输入内容后按 ",(0,eb.jsx)("kbd",{children:"Tab"})," 可把它压入",(0,eb.jsx)("b",{children:"待发送栈"}),"而不立即发送,便于排队多条指令。栈里每条都能 点击:用 ",(0,eb.jsx)("b",{children:"引导"})," 在合适时机插入对话,或删除。"]})},{id:"pane-toolbar",target:'[data-tour="pane-toolbar"]',waitForTarget:3e3,title:"工作区顶栏",body:(0,eb.jsxs)(eb.Fragment,{children:["右侧工作区最上面一排:左边 ",(0,eb.jsx)("b",{children:"布局标签"})," 切换分屏预设,中间 ",(0,eb.jsx)("b",{children:"位置切换"})," 控制对话面板在左 / 居中 / 在右。"]})},{id:"pane-split",target:'[aria-label="上下二分"]',waitForTarget:4e3,gate:()=>null!=ese('[aria-label="上下二分"][data-state="active"]'),gateHint:"点「上下二分」分栏",title:"动手 · 上下分栏",body:(0,eb.jsxs)(eb.Fragment,{children:["在布局标签里点 ",(0,eb.jsx)("b",{children:"上下二分"}),"(顶部面板图标),把右侧工作区分成上下两块。"]})},{id:"pane-add-top",target:'[data-tour="pane-add"]',waitForTarget:3e3,gate:()=>null!=ese('[placeholder="搜索组件..."]')||null!=ese('[data-slot="multi-tab-list"]'),gateHint:"点上面板的「添加」",autoAdvance:!0,title:"动手 · 添加上面板组件",body:(0,eb.jsxs)(eb.Fragment,{children:["点",(0,eb.jsx)("b",{children:"上面板"}),"中间的 ",(0,eb.jsx)("b",{children:"添加"})," 按钮,打开组件选择面板。"]})},{id:"pane-pick-multitab",target:'[data-tour="pane-template-multi-tab-system"]',waitForTarget:3e3,gate:()=>null!=ese('[data-slot="multi-tab-list"]'),gateHint:"选择「多标签页系统」",title:"动手 · 选多文件标签组件",body:(0,eb.jsxs)(eb.Fragment,{children:["在弹出面板里找到 ",(0,eb.jsx)("b",{children:"多标签页系统"}),"(即多文件标签组件)并点击添加,它会填入上面板。"]})},{id:"multi-tab",target:'[data-slot="multi-tab-list"]',waitForTarget:3e3,title:"多文件标签组件",body:(0,eb.jsxs)(eb.Fragment,{children:["顶部是",(0,eb.jsx)("b",{children:"多文件标签条"}),":点 ",(0,eb.jsx)("b",{children:"+"})," 新增标签、点标签切换文件、",(0,eb.jsx)("b",{children:"×"})," 关闭。单文件内还能在",(0,eb.jsx)("b",{children:"查看 / 编辑"})," 与 ",(0,eb.jsx)("b",{children:"代码 / 预览 / 十六进制"})," 间切换,编辑后记得保存。"]})},{id:"pane-add-bottom",target:'[data-tour="pane-add"]',waitForTarget:3e3,gate:()=>null!=ese('[placeholder="搜索组件..."]')||null!=ese('[data-slot="terminal-tab-group"]'),gateHint:"点下面板的「添加」",autoAdvance:!0,title:"动手 · 添加下面板组件",body:(0,eb.jsxs)(eb.Fragment,{children:["现在点",(0,eb.jsx)("b",{children:"下面板"}),"的 ",(0,eb.jsx)("b",{children:"添加"})," 按钮,再次打开组件选择面板。"]})},{id:"pane-pick-terminal",target:'[data-tour="pane-template-terminal-tab-group"]',waitForTarget:3e3,gate:()=>null!=ese('[data-slot="terminal-tab-group"]'),gateHint:"选择「终端标签组」",title:"动手 · 选终端",body:(0,eb.jsxs)(eb.Fragment,{children:["在面板里找到 ",(0,eb.jsx)("b",{children:"终端标签组"})," 并点击添加,它会填入下面板。"]})},{id:"terminal",target:'[data-slot="terminal-tab-group"]',waitForTarget:3e3,title:"终端组件",body:(0,eb.jsxs)(eb.Fragment,{children:["终端支持多会话标签:点 ",(0,eb.jsx)("b",{children:"+"})," 新开会话、点标签切换、",(0,eb.jsx)("b",{children:"×"})," 关闭。直接输入命令即可,输出实时回显,与本机真实 shell 一致。"]})},{id:"pane-cut-clear",target:'[aria-label="剪切窗口内容"]',waitForTarget:3e3,title:"剪切与粉碎",body:(0,eb.jsxs)(eb.Fragment,{children:["顶栏的 ",(0,eb.jsx)("b",{children:"剪切"}),"(剪刀)把窗口内容移动到别处;",(0,eb.jsx)("b",{children:"粉碎"}),"(碎纸机)清空该窗口。均对单个 pane 生效。"]})},{id:"control-room",target:'[data-tour="control-room-toggle"]',waitForTarget:3e3,title:"导播台视角",body:(0,eb.jsxs)(eb.Fragment,{children:["点位置切换中间的 ",(0,eb.jsx)("b",{children:"「隐藏面板」"}),"(矩形图标)进入",(0,eb.jsx)("b",{children:"导播台"}),":对话偏左,右侧悬浮显示主 Agent 与各子 Agent 的实时预览小窗,点小窗即可切换主面板。"]})},{id:"outro",centered:!0,title:"完成 🎉",body:(0,eb.jsxs)(eb.Fragment,{children:["你已走过核心功能。随时可从空白页的 ",(0,eb.jsx)("b",{children:"使用教程"})," 重新打开本向导。开始创造吧!"]})}]}))},[es,Z,ec]),eu=ew.useCallback(()=>{i("account")},[]),ef=d?.id??s?.conversation.id,eh=!!d&&s?.conversation.id!==d.id,em="new-agent-conversation"===a||"project-conversation"===a;return(0,eb.jsxs)("main",{className:"vtl-app-background relative flex h-svh overflow-hidden text-foreground select-none [-webkit-touch-callout:none]",children:[e?(0,eb.jsx)(eik,{navItems:eiC,contents:eiM,activeWorkspace:a,activeConversationId:ef,activeProjectId:U,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenProjectCanvas:(e,t)=>{ea(e,t)},onOpenProjectOverview:et,onOpenProjectKanban:en,onOpenProjectSettings:er,onNewProjectConversation:e=>{el(e)},onOpenProjectConversation:(e,t,n)=>{ei(e,t,n)},onNewProject:()=>{eo()},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{s?.conversation.id===e&&(c(void 0),i("home")),k(t=>t?.id===e?void 0:t)},onAccountSettings:eu,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e),title:em&&s?s.conversation.title?.trim()||"新 Agent 对话":Q8.product,trailing:em&&s?(0,eb.jsx)(jS,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(elq,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,eI.cn)("relative hidden h-svh shrink-0 overflow-hidden p-3 transition-[width,padding] duration-300 ease-out md:block",t?"w-0 p-0":"w-[19.5rem]"),children:(0,eb.jsx)(eaE,{navItems:eiC,contents:eiM,activeWorkspace:a,activeConversationId:ef,activeCanvasId:F,activeProjectId:U,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenCanvas:(e,t)=>{ee(e,t)},onOpenProjectCanvas:(e,t)=>{ea(e,t)},onOpenProjectOverview:et,onOpenProjectKanban:en,onOpenProjectSettings:er,onNewProjectConversation:e=>{el(e)},onOpenProjectConversation:(e,t,n)=>{ei(e,t,n)},onNewProject:()=>{eo()},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{s?.conversation.id===e&&(c(void 0),i("home")),k(t=>t?.id===e?void 0:t)},onAccountSettings:eu,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e)})}),(0,eb.jsx)("div",{className:(0,eI.cn)("group/sb-handle absolute inset-y-0 z-30 hidden w-8 md:block","transition-[left] duration-300 ease-out",t?"left-0":"left-[18.5rem]"),children:(0,eb.jsx)("button",{type:"button",onClick:r,"aria-label":t?"展开侧边栏":"收起侧边栏",title:t?"展开侧边栏":"收起侧边栏",className:"absolute top-1/2 left-0 flex h-14 w-6 -translate-y-1/2 items-center justify-center rounded-r-md border border-l-0 border-border bg-background/85 text-muted-foreground opacity-0 shadow-md backdrop-blur transition-opacity duration-200 hover:text-foreground focus-visible:opacity-100 group-hover/sb-handle:opacity-100",children:t?(0,eb.jsx)(tu,{className:"size-4"}):(0,eb.jsx)(td,{className:"size-4"})})})]}),(0,eb.jsxs)("section",{className:(0,eI.cn)("relative h-full min-w-0 flex-1 overflow-hidden",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:["runs"===a?(0,eb.jsx)(el6,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):"telemetry"===a?(0,eb.jsx)(el8,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):"preferences-model-routes"===a?(0,eb.jsx)(elt,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elt,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elt,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elt,{section:"cc-engine-config"}):"preferences-system-prompt"===a?(0,eb.jsx)(elt,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elt,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elt,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elt,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(elO,{}):"network-topology"===a?(0,eb.jsx)(elj,{}):"network-settings"===a?(0,eb.jsx)(elC,{}):"system-downloads"===a?(0,eb.jsx)(elV,{}):"preferences"===a?(0,eb.jsx)(elt,{}):"check-update"===a?(0,eb.jsx)(eli,{}):"balance-usage"===a?(0,eb.jsx)(elc,{}):"feedback"===a?(0,eb.jsx)(elp,{}):"account"===a?(0,eb.jsx)(eiI,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(enq,{onCreated:e=>{et(e)},onCancel:()=>i("home")}):"project-overview"===a&&U?(0,eb.jsx)(er1,{projectId:U,onOpenSettings:er}):"project-settings"===a&&U?(0,eb.jsx)(en5,{projectId:U}):"kanban"===a&&U?(0,eb.jsx)(erG,{projectId:U}):("new-agent-conversation"===a||"project-conversation"===a)&&eh?(0,eb.jsxs)("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-6 animate-spin"}),(0,eb.jsx)("span",{className:"text-sm",children:"正在打开对话…"})]}):"new-agent-conversation"===a||"project-conversation"===a?(0,eb.jsx)(Qi,{conversation:s,clipboardItems:C,clipboardDraggingId:I,onClipboardItemsChange:M,onClipboardDraggingChange:A,onOverlayOpenChange:l,onConversationCreated:e=>{c(e)},onCancelDraft:()=>i("home"),subagentStack:f,onSubagentStackChange:h,subagentTree:m,mobileView:g,onMobilePaneCountChange:b}):e?(0,eb.jsx)(esl,{activeConversationId:ef,onItemSelect:es,onOpenConversation:(e,t)=>{Y(e,t)},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{k(t=>t?.id===e?void 0:t)}}):(0,eb.jsx)(eso,{onNewConversation:Z,onStartTour:ed}):(0,eb.jsx)(enb,{clipboardItems:C,onClipboardItemsChange:M,onOverlayOpenChange:S}):(0,eb.jsx)(enC,{nodes:T,edges:D,selectedNodeId:L,clipboardItems:C,onNodesChange:K,onEdgesChange:G,onNodesSet:R,onEdgesSet:_,onSelectedNodeChange:$,onClipboardItemsChange:M}),j?(0,eb.jsx)("div",{className:(0,eI.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(QL,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{Y(e,t)}})}):null,(0,eb.jsx)(ear,{hidden:!!j||(em?o:N),items:C,trashItems:E,draggingId:I,onDraggingChange:A,onItemsChange:M,onTrashItemsChange:O,onTrashClipboardItemsChange:z,trashClipboardItems:P})]})]})}function eso({onNewConversation:e,onStartTour:t}){return(0,eb.jsxs)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col items-center justify-center gap-5 px-6 text-center",children:[(0,eb.jsx)(el7,{className:"h-20 w-auto max-w-[78vw] text-foreground"}),(0,eb.jsx)("p",{className:"max-w-sm text-sm text-muted-foreground",children:"从左侧选择一个会话,或新建对话"}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-center gap-3",children:[(0,eb.jsxs)(ez.Button,{type:"button",onClick:e,"data-tour":"home-new-conversation",children:[(0,eb.jsx)(tc,{className:"size-4"}),"新建对话"]}),(0,eb.jsxs)(ez.Button,{type:"button",variant:"outline",onClick:t,children:[(0,eb.jsx)(ts,{className:"size-4"}),"使用教程"]})]})]})}function esl({activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a}){return(0,eb.jsx)("div",{className:"vtl-app-background flex h-full min-h-0 flex-col px-3 pt-3 pb-[max(0.75rem,env(safe-area-inset-bottom))]",children:(0,eb.jsx)(eaT,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function ess(){let{ready:e,user:t,logout:n}=tl();return e?t?(0,eb.jsx)(esi,{}):(0,eb.jsx)(ta,{onComplete:()=>{window.location.reload()}}):(0,eb.jsx)("main",{className:"grid min-h-svh place-items-center bg-background",children:(0,eb.jsxs)("div",{className:"flex flex-col items-center gap-3",children:[(0,eb.jsx)("div",{className:"size-8 animate-spin rounded-full border-2 border-muted-foreground/20 border-t-primary"}),(0,eb.jsx)("span",{className:"text-sm text-muted-foreground",children:"连接中..."})]})})}function esc(){return(0,eb.jsx)(to,{children:(0,eb.jsx)(ess,{})})}e.s(["default",()=>esc],66204)}]);
|