@vantaloom/runtime-darwin-arm64 0.11.2 → 0.11.3

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.
@@ -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,eA.cn)("size-full border-0 bg-background",n)})}function Gb({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 Gy({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)(Gn,{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:[Gf(e.size)&&(0,eb.jsx)(Bm,{variant:"outline",children:Gf(e.size)}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function Gw({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 Gj({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=Gd(e),o=e.src?e.src:t&&"svg"===Gd(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,eA.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gv,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,eA.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(Gx,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,eA.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,eA.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,eA.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)(Gw,{labels:n})}function Gk({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)(Uy,{className:"size-4"}):(0,eb.jsx)(uS,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(Gr,{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)(Gl,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Ga,{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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,disabled:t.disabled,onClick:()=>{t.disabled||t.onClick()},className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function GN({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(()=>({...Gs,...v}),[v]),[E,P]=ew.useState(n??e.content??""),[O,I]=ew.useState(i),[A,z]=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??O,H=(N=l??A,(S=Gh(e)).includes(N)?N:S[0]),U=Gd(e),q=Gh(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(Gd(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=Gd(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=Gf(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&&P(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,eA.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,eA.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)(Gi,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Go,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(Gn,{className:"size-3.5"}):(0,eb.jsx)(v9,{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,eA.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)(Bm,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bm,{variant:"secondary",children:[(0,eb.jsx)(lq,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bm,{variant:"outline",children:[(0,eb.jsx)(Gr,{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)(Gy,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(Gj,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(Gb,{file:e,value:B,labels:M}):(0,eb.jsx)(Gg,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&P(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(Gk,{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&&z(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&I(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function GS(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function GC(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function GM(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GE({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,P]=ew.useState(t),O=ew.useRef(null),I=ew.useRef(null),[A,z]=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&&P(t),i?.(t)},[i,e]),er=ew.useCallback(e=>{D.current=e,R(e)},[]),ea=ew.useCallback(()=>{let e=I.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=I.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=I.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=I.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=I.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=I.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(GM(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(GM(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=I.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=O.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=GS(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){z(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))}z(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,ix.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:O,"data-slot":"multi-tab-system",className:(0,eA.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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":b,onClick:()=>el("left"),className:"mb-1 shrink-0",children:(0,eb.jsx)(m2,{})}),(0,eb.jsxs)("div",{ref:I,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,eA.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&&A===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==A;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();z(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":A===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,eA.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":GC(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??(GC(e.title)?`${v}: ${GC(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=GS(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,eA.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)(fb.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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":y,onClick:()=>el("right"),children:(0,eb.jsx)(m5,{})}),u.length>0?(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,children:(0,eb.jsx)(lY,{})})}),(0,eb.jsx)(y1,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y6,{children:e.shortcut})]})]},t))})]}):(0,eb.jsx)(eI.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)(lY,{})}),f.length>0&&(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":x,children:(0,eb.jsx)(lG,{})})}),(0,eb.jsx)(y1,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y6,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,eA.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 GP=(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 GO({status:e}){return"done"===e?(0,eb.jsx)(m1,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VM,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GP,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yO,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GI({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 GA={main:"主",subagent:"子"};function Gz({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,eA.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)(GO,{status:e.status}),(0,eb.jsx)("span",{className:(0,eA.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:[GA[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GI,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(Gz,{node:e,depth:t+1,activeId:n},e.id))]})}function GT({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)(mm,{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)(mk,{children:[(0,eb.jsx)(mN,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mN,{value:"tree",children:"执行树"})]})}),(0,eb.jsx)(mS,{value:"doc",className:"min-h-0 flex-1",children:(0,eb.jsx)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:a.trim()?(0,eb.jsx)(V0,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mS,{value:"tree",className:"min-h-0 flex-1",children:(0,eb.jsx)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:n?.tree?(0,eb.jsx)(Gz,{node:n.tree,depth:0,activeId:o}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]})})}function GR({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,eA.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)(uE,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(w_,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(V0,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}function GD({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0),[a,i]=ew.useState([]),[o,l]=ew.useState(!1),[s,c]=ew.useState(!1),[d,u]=ew.useState(""),{models:f}=xY(),h=d||f[0]?.value||"";ew.useEffect(()=>{if(!e){r(void 0),i([]),l(!1);return}let n=!0;return(async()=>{try{let a=await sI(e,t);if(!n)return;u(a.conversation.settings?.mainModels?.[0]??"");let i=a.conversation.sideQueryConvId;i&&r(e=>e??i)}catch{}})(),()=>{n=!1}},[e,t]),ew.useEffect(()=>{let e;if(!n)return;let r=!0,a=async()=>{if(r)try{let o=await sI(n,t);if(!r)return;let s=o.conversation.running??!1;i(o.events),l(s),e=window.setTimeout(a,s?1200:5e3)}catch{if(!r)return;try{let e=await sA(n,{limit:400},t);r&&e.events.length&&i(e.events)}catch{}r&&(e=window.setTimeout(a,5e3))}};return a(),()=>{r=!1,void 0!==e&&window.clearTimeout(e)}},[n,t]);let m=ew.useCallback(n=>{let a=n.trim();e&&a&&!s&&(c(!0),l(!0),(async()=>{try{let{sideQueryConvId:n}=await s5(e,a,t,h||void 0);n&&r(n)}catch{l(!1)}finally{c(!1)}})())},[e,t,h,s]),p=!!e,g=!n&&0===a.length;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5 border-b px-3 py-2",children:[(0,eb.jsx)(s7,{className:"size-3.5 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"旁问"}),(0,eb.jsx)("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"只读 · 不影响主对话"})]}),(0,eb.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,eb.jsx)(HA,{className:"size-full min-h-0",composerClassName:"max-w-[42rem]",events:a,running:o||s,disabled:!p,hideComposerOptions:!0,onSubmit:e=>m(e.value)}),g?(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-0 bottom-28 grid place-items-center px-6",children:(0,eb.jsxs)("div",{className:"max-w-xs text-center",children:[(0,eb.jsx)(s7,{className:"mx-auto mb-2 size-7 text-muted-foreground/50"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:p?"问点什么?旁问不会影响主对话。":"选择一个对话后即可在此发起旁问。"})]})}):null]})]})}let G_=(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"}]]),GL=(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"}]]),G$=(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"}]]),GF=(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 GB(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}${t}`):(0,eT.localAPIURL)(t)}async function GV(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(GB(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 GH(e,t,n){let r=await fetch(GB(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 GU(e,t){return GH(e,"/v1/extensions/browser/install",{variant:t})}async function Gq(e,t){return GH(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function GW(e){return GH(e,"/v1/extensions/browser/uninstall")}async function GK(e,t){return GH(e,"/v1/extensions/browser/enable",{enabled:t})}async function GG(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(GB(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 GX(e,t){return{monitoring:!!(await GH(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let GY={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function GZ(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=GZ(r);t+=e.done,n+=e.total}return{done:t,total:n}}function GJ(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=GJ(n,t);if(e)return e}}}function GQ({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 G0({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=GJ(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?GJ(e.tree,r):void 0}}(e),r=e.tree?GZ(e.tree):{done:0,total:0},a=t?GZ(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)(G1,{icon:(0,eb.jsx)(uO,{}),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??GY[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(GQ,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(m1,{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 G1({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 G2(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await GV(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 GK(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GV(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)(Ux,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(G5,{online:!0}):"starting"===e?(0,eb.jsx)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(G5,{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)(VM,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function G5({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,eA.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function G4({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xC();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sI(e,t),sz(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)(G1,{icon:(0,eb.jsx)(uw,{}),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)(eO,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"运行于"}),(0,eb.jsx)(G5,{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)(GF,{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)(G5,{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)(GL,{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)(G2,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(G0,{state:w}):null,(0,eb.jsx)(G1,{icon:(0,eb.jsx)(uj,{}),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)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fb.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(m1,{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)(G1,{icon:(0,eb.jsx)(uA,{}),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)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hI,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fb.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(m1,{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)(G1,{icon:(0,eb.jsx)(G_,{}),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)})})]})}function G3({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(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:`${n}%`}})})}function G6({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0);ew.useEffect(()=>{if(!e)return void r(void 0);let n=!0,a=async()=>{let a=await sA(e,{limit:400},t);n&&r(function(e){for(let t=e.length-1;t>=0;t-=1){let n=e[t];if(n&&"task"===n.kind&&Array.isArray(n.tasks))return n.tasks}}(a.events))};a();let i=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(i)}},[e,t]);let a=n??[],i=a.length,o=a.filter(e=>"done"===e.status).length;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)("div",{className:"shrink-0 space-y-1.5 border-b px-3 py-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"任务"}),(0,eb.jsxs)("span",{className:"text-[11px] tabular-nums text-muted-foreground",children:[o,"/",i]})]}),(0,eb.jsx)(G3,{done:o,total:i})]}),(0,eb.jsx)(w_,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:0===i?(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"暂无任务"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-0.5",children:a.map(e=>{let{glyph:t,className:n}=function(e){switch(e){case"done":return{glyph:"✓",className:"text-emerald-500"};case"in_progress":return{glyph:"▸",className:"text-amber-500"};case"cancelled":return{glyph:"✕",className:"text-rose-500"};default:return{glyph:"○",className:"text-muted-foreground/50"}}}(e.status),r="done"===e.status;return(0,eb.jsxs)("li",{className:"flex items-start gap-2 rounded-md px-1.5 py-1",children:[(0,eb.jsx)("span",{className:(0,eA.cn)("mt-px shrink-0 text-[13px] leading-5",n),"aria-hidden":!0,children:t}),(0,eb.jsx)("span",{className:(0,eA.cn)("min-w-0 flex-1 text-[13px] leading-5",r&&"text-muted-foreground line-through"),title:e.detail||e.title,children:e.title})]},e.id)})})})})]})}let G8="application/vnd.vantaloom.canvas-node",G7="application/vnd.vantaloom.canvas-tab",G9="application/vnd.vantaloom.dashboard-widget",Xe="application/vnd.vantaloom.workspace-card";var Xt=e.i(78737);let Xn=(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"}]]),Xr=(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"}]]),Xa=(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"}]]),Xi=[{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"}],Xo=[{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}],Xl={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 Xs(e,t,n){return e.find(e=>e.id===t)??n}function Xc({id:e}){return"phone"===e?(0,eb.jsx)(Xr,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(Xa,{className:"size-4"}):(0,eb.jsx)(eO,{className:"size-4"})}function Xd({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=Xi,ratios:h=Xo,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...Xl,...x}),[x]),[k,N]=ew.useState(t),[S,C]=ew.useState(e??t),[M,E]=ew.useState(()=>[e??t]),[P,O]=ew.useState(0),[I,A]=ew.useState(l),[z,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=Xs(f,o??I,f[0]??Xi[0]),q=Xs(h,c??z,h[0]??Xo[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,P+1);return n[n.length-1]===t?n:(O(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,eA.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,eA.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)(Xn,{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)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.back,disabled:P<=0,onClick:function(){if(P<=0)return;let e=P-1,t=M[e];t&&(O(e),C(t),en(t,{history:"none"}),a?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(Xt.ArrowLeftIcon,{className:"size-3.5"})}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.forward,disabled:P>=M.length-1,onClick:function(){if(P>=M.length-1)return;let e=P+1,t=M[e];t&&(O(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)(eI.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)(bs,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,eA.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,eA.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)(eI.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=Xs(f,e.id,U),void(void 0===o&&A(t.id),s?.(t.id,t))},children:(0,eb.jsx)(Xc,{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)(eI.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=Xs(h,e.id,q),void(void 0===c&&T(t.id),u?.(t.id,t))},children:e.label},e.id))})]})]}),(0,eb.jsx)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let Xu=(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"}]]),Xf=(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 Xh({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,eA.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)(eI.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)(eO,{className:"size-3.5"}):(0,eb.jsx)(Xu,{className:"size-3.5"}),"监视"]}):null,(0,eb.jsxs)(eI.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)(lU,{className:"size-3.5"}):(0,eb.jsx)(lX,{className:"size-3.5"}),r?"接管中":"观看"]}),"error"===n&&o?(0,eb.jsx)(eI.Button,{type:"button",size:"icon-xs",variant:"ghost",className:"size-6 rounded-md","aria-label":"重新连接",onClick:o,children:(0,eb.jsx)(Xf,{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,eA.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)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"连接浏览器失败"}),o?(0,eb.jsx)(eI.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)(Xu,{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)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器已停止"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:d,children:[(0,eb.jsx)(VM,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"等待 agent 操作后显示画面"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:()=>h(!0),children:[(0,eb.jsx)(eO,{className:"size-3.5"}),"开启浏览器监视以查看实时画面"]})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xu,{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,eA.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 Xm(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}/browser${t}`):(0,eT.localAPIURL)(`/v1/browser${t}`)}async function Xp(e,t){try{await fetch(Xm(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function Xg({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xC(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await GV(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(Xm(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 GG(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{GX(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=>{Xp(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await GK(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GV(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)(Xh,{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 Xx({defaultUrl:e,className:t}){let{machines:n}=xC(),[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 GV(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)(Xg,{active:!0,className:t}):(0,eb.jsx)(Xd,{className:t,defaultUrl:e})}let Xv=[{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"}],Xb=Array.from(new Set(Xv.flatMap(e=>e.tags))).sort(),Xy=[["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"]],Xw=[["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 Xj({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,eA.cn)("mx-auto flex w-full justify-center",e),...t})}function Xk({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,eA.cn)("flex flex-row items-center gap-1",e),...t})}function XN({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function XS({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,eA.cn)((0,eI.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function XC({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(XS,{"aria-label":t,size:"default",className:(0,eA.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(m2,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function XM({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(XS,{"aria-label":t,size:"default",className:(0,eA.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)(m5,{})]})}function XE({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,eA.cn)("flex size-8 items-center justify-center",e),...n,children:[(0,eb.jsx)(lG,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:t})]})}function XP({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XO(){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)(Xz,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(Xz,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XT,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return Xv.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)(XP,{title:"防火墙策略"}),(0,eb.jsxs)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{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)(xM,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(ez,{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)(gL,{value:n,onValueChange:r,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"全部标签"})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"all",children:"全部标签"}),Xb.map(e=>(0,eb.jsx)(xw,{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)(mq,{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)(mW,{value:"allow",children:"允许"}),(0,eb.jsx)(mW,{value:"drop",children:"丢弃"}),(0,eb.jsx)(mW,{value:"deny",children:"拒绝"}),(0,eb.jsx)(mW,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qv,{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)(XI,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XI({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)(Xj,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(Xk,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(XN,{children:(0,eb.jsx)(XC,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,eA.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)(XN,{children:(0,eb.jsx)(XS,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(XN,{children:(0,eb.jsx)(XE,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(XN,{children:(0,eb.jsx)(XS,{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)(XN,{children:(0,eb.jsx)(XE,{moreLabel:"更多页"})}):null,(0,eb.jsx)(XN,{children:(0,eb.jsx)(XS,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(XN,{children:(0,eb.jsx)(XM,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,eA.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XA({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)(Bm,{variant:t,children:e},e))})}function Xz({zone:e}){return(0,eb.jsx)(Bm,{variant:"Trust"===e?"secondary":"outline",children:e})}function XT({action:e}){return(0,eb.jsx)(Bm,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XR({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,eA.cn)("w-full caption-bottom text-sm",e),...t})})}function XD({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,eA.cn)("[&_tr]:border-b",e),...t})}function X_({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,eA.cn)("[&_tr:last-child]:border-0",e),...t})}function XL({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,eA.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function X$({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,eA.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 XF({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,eA.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XB({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XV({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)(XB,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XR,{children:[(0,eb.jsx)(XD,{children:(0,eb.jsx)(XL,{children:t.map(e=>(0,eb.jsx)(X$,{children:e},e))})}),(0,eb.jsx)(X_,{children:n.map(e=>(0,eb.jsx)(XL,{children:e.map((e,t)=>(0,eb.jsx)(XF,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function XH(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(XB,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(ez,{placeholder:"策略名称"}),(0,eb.jsx)(ez,{placeholder:"负责人"}),(0,eb.jsx)(ez,{placeholder:"源 CIDR"}),(0,eb.jsx)(ez,{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)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{className:"size-4"}),"提交申请"]})})]})}function XU(){return(0,eb.jsxs)(mm,{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)(mk,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mN,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mN,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mN,{value:"renewals",children:"续期"}),(0,eb.jsx)(mN,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mN,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mS,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XO,{})}),(0,eb.jsx)(mS,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:Xy})}),(0,eb.jsx)(mS,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"续期",headers:["策略","续期时间","负责人"],rows:Xw})}),(0,eb.jsx)(mS,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XH,{})}),(0,eb.jsx)(mS,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function Xq(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 XW(e,t){let n=t.machineId||"local";return Xq((await uY(n,e.path)).items)}function XK({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 uX();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:Xq(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)(HY,{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:XW,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function XG({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dE,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fw,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fN,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fS,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(XK,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function XX(){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 XY=(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 XZ({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)(j$,{className:"size-4"}):(0,eb.jsx)(XY,{className:"size-4"}),pressed:n,onClick:()=>i(!n)},{key:"add",label:"新建文件窗口",icon:(0,eb.jsx)(lY,{className:"size-4"}),pressed:void 0,onClick:a}];return(0,eb.jsx)("div",{className:(0,eA.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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,title:t.label,onClick:t.onClick,className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let XJ=[];function XQ(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function X0(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?X0(n.children,t):void 0;if(e)return e}}function X1(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function X2(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function X5(e){return e.map(e=>({...e,children:e.children?X5(e.children):void 0}))}let X4=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),X3=(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"}]]),X6=(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"}]]),X8={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function X7({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={...X8,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,P]=ew.useState(n),[O,I]=ew.useState(),[A,z]=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){P(!1),z({canScrollDown:!1,canScrollUp:!1});return}P(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),z({canScrollUp:!1,canScrollDown:G>X});let e=window.setTimeout(()=>{P(!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,eA.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),I(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),I(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),I(void 0)))},onDragOver:function(e){!s||en(e)||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",_(!0),U?I(et(e)):I(0))},onDrop:function(t){if(!s||en(t))return;t.preventDefault(),t.stopPropagation();let n=O??et(t);L.current=0,_(!1),I(void 0),x?.({insertIndex:n,items:e,nativeEvent:t})},...y,children:[(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-header",className:(0,eA.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)(X6,{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,eA.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,eA.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,eA.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,eA.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;z({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===O)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(O>n?O-1:O,a.length));a.splice(i,0,r),I(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!==O?(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*O-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)(X9,{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();I(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),I(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&&A.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&&A.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 X9({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,eA.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)(X6,{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,eA.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,eA.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)(fC,{className:"size-3.5"})})]})})}function Ye({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} 项`:Yn(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)(eP,{className:"size-4"}):"failed"===r.status?(0,eb.jsx)(X3,{className:"size-4"}):"running"===r.status?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"copy"===r.mode?(0,eb.jsx)(lV,{className:"size-4"}):(0,eb.jsx)(X4,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(Yt,{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)(X7,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function Yt({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:Yn(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:[Yr(e.progress.bytesDone)," /"," ",Yr(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:Yn(e.progress.currentPath)}):null]})]})}function Yn(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function Yr(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 Ya=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function Yi({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,eA.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)(eI.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"关闭窗口",onPointerDown:e=>e.stopPropagation(),onClick:o,children:(0,eb.jsx)(fb.XIcon,{})}),(0,eb.jsx)(eI.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"缩小到剪切板",onPointerDown:e=>e.stopPropagation(),onClick:l,children:(0,eb.jsx)(Ya,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(wZ,{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 Yo({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=XX(),[l,s]=ew.useState([]),[c,d]=ew.useState(XJ),[u,f]=ew.useState(XJ[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(XJ.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await uY(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:X1(e.path,a.path)?{...e,children:X5(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=X2(e,n),a=X2(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 X5(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return X5(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>X1(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=Yc((await u5()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>Yc([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{u2({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 P(e,t){d(n=>n.map(n=>n.id===e?t(n):n))}function O(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??XQ(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 uX();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:XQ(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 I=sv(),A=c.find(e=>e.id===u);function z(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;P(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:XQ(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{uQ({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{u0({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{u1({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=X0(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 I?(0,eb.jsxs)("div",{className:(0,eA.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,eA.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:A?(0,eb.jsx)(Yl,{windowLayout:A,roots:l,...z(A)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(Ye,{transfers:h}),(0,eb.jsx)(XZ,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),O()}}),(0,eb.jsx)(Ys,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]}):(0,eb.jsxs)("div",{ref:i,className:(0,eA.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(),O({...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)(Yi,{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=>P(n.id,()=>e),...z(n),onNavigate:({rootId:e,path:t})=>{let r=l.find(t=>t.id===e),a=r?.machineId??n.machineId;P(n.id,n=>({...n,machineId:a,rootId:e,path:t,title:XQ(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{uQ({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{u0({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{u1({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=X0(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)(Ye,{transfers:h}),(0,eb.jsx)(XZ,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),O()}}),(0,eb.jsx)(Ys,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]})}function Yl({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(wZ,{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 Ys({move:e,onCancel:t,onConfirm:n}){var r;let a=e?.sources??[],i=Math.max(0,a.length-4);return(0,eb.jsx)(d6,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"确认移动"}),(0,eb.jsx)(uv,{children:e?`将 ${1===(r=a).length?r[0]?Yd(r[0]):"0 项":`${r.length} 项`} 移动到 ${Yd(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:Yd(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:Yd(e.target)})]})]}):null,(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function Yc(e){return e.slice(0,10)}function Yd(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function Yu({className:e}){return(0,eb.jsx)(Yo,{className:(0,eA.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var Yf=ew;function Yh(){return(Yh=Object.assign.bind()).apply(null,arguments)}var Ym=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jU.clsx)("recharts-dot",a);return kw(t)&&kw(n)&&kw(r)?ew.createElement("circle",Yh({},AW(e),zx(e),{className:i,cx:t,cy:n,r:r})):null},Yp=["points"];function Yg(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 Yx(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yg(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)):Yg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yv(){return(Yv=Object.assign.bind()).apply(null,arguments)}function Yb(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,jU.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,Yp);return ew.createElement(Ym,Yv({},l,{className:a}))}function Yy(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=C1.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Ti(n),u=null==n?null:(0,ew.isValidElement)(n)?AG(n.props):"object"!=typeof n||Array.isArray(n)?null:AG(n),f=t.map((e,r)=>{var l,s,c=Yx(Yx(Yx({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(Yb,{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(_G,{zIndex:c},ew.createElement(AZ,Yv({className:r},h),f))}function Yw(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 Yj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yw(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)):Yw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Yk=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=Yj(Yj(Yj({},{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}),AK(i)),zx(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(Ym,s),ew.createElement(AZ,{className:"recharts-active-dot",clipPath:l},t)};function YN(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=C1.activeDot}=e,l=No(_a),s=No(_h);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_G,{zIndex:o},ew.createElement(Yk,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function YS(e,t){var n,r,a=No(t=>OH(t,e)),i=No(e=>OW(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:OB.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:OU.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function YC(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=No(F7),{needClipX:i,needClipY:o,needClip:l}=YS(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 YM(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 YE(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 YP=(e,t,n)=>Ax(e,"xAxis",YM(e,t),n),YO=(e,t,n)=>Ag(e,"xAxis",YM(e,t),n),YI=(e,t,n)=>Ax(e,"yAxis",YE(e,t),n),YA=(e,t,n)=>Ag(e,"yAxis",YE(e,t),n),Yz=j7([CC,YP,YI,YO,YA],(e,t,n,r,a)=>kL(e,"xAxis")?kK(t,r,!1):kK(n,a,!1)),YT=j7([OQ,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YR=e=>kL(CC(e),"xAxis")?"yAxis":"xAxis",YD=j7([YT,(e,t,n)=>Im(e,YR(e),"yAxis"===YR(e)?YE(e,t):YM(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=Mu(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]])}}}),Y_=j7([CC,YP,YI,YO,YA,YD,kr,Yz,YT,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(kw(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=k_(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==k_(e,a);return x?{x:kH({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:kH({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 YL(e){var t=AK(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 Y$=["id"],YF=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function YB(){return(YB=Object.assign.bind()).apply(null,arguments)}function YV(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 YH(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?YH(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)):YH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yq(e,t){return e&&"none"!==e?e:t}var YW=Yf.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:kI,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kX(o,t),hide:l,type:c,color:Yq(r,i),unit:s,graphicalItemId:d}};return Yf.createElement(Dd,{tooltipEntrySettings:u})});function YK(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=AW(r);return Yf.createElement(Yy,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function YG(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 YU(YU({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return Yf.createElement(Ls,{value:t?a:void 0},n)}function YX(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=YV(i,Y$),h=AW(f),m=AG(f);return Yf.createElement(Yf.Fragment,null,(null==t?void 0:t.length)>1&&Yf.createElement(AZ,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},Yf.createElement(zM,YB({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&Yf.createElement(zM,YB({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&Yf.createElement(zM,YB({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),Yf.createElement(YK,{points:t,props:f,clipPathId:a}))}function YY(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(!kz(l)||!kz(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kw(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kw(d))?Yf.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function YZ(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(!kz(l)||!kz(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kw(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kw(d))?Yf.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function YJ(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?Yf.createElement(YY,{alpha:t,points:r,baseLine:a,strokeWidth:i}):Yf.createElement(YZ,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function YQ(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=TP((0,Yf.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CM(),[g,x]=(0,Yf.useState)(!1),v=(0,Yf.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,Yf.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return Yf.createElement(YG,{showLabels:!g,points:o},r.children,Yf.createElement(TE,{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 YU(YU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return t});if(kw(l))c=kM(w,l,e);else c=null==l||kb(l)?kM(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return YU(YU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),Yf.createElement(YX,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),Yf.createElement(AZ,null,s&&Yf.createElement("defs",null,Yf.createElement("clipPath",{id:"animationClipPath-".concat(n)},Yf.createElement(YJ,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),Yf.createElement(AZ,{clipPath:"url(#animationClipPath-".concat(n,")")},Yf.createElement(YX,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),Yf.createElement(Lf,{label:r.label}))}function Y0(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,Yf.useRef)(null),i=(0,Yf.useRef)();return Yf.createElement(YQ,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class Y1 extends Yf.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,jU.clsx)("recharts-area",r),{r:p,strokeWidth:g}=YL(t),x=Ti(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return Yf.createElement(_G,{zIndex:h},Yf.createElement(AZ,{className:m},o&&Yf.createElement("defs",null,Yf.createElement(YC,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&Yf.createElement("clipPath",{id:"clipPath-dots-".concat(u)},Yf.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),Yf.createElement(Y0,{needClip:o,clipPathId:u,props:this.props})),Yf.createElement(YN,{points:n,mainColor:Yq(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&Yf.createElement(YN,{points:f,mainColor:Yq(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var Y2={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:C1.area};function Y5(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=YV(e,YF),x=No(CC),v=No(CW),{needClip:b}=YS(m,p),y=Ct(),{points:w,isRange:j,baseLine:k}=null!=(t=No(t=>Y_(t,e.id,y)))?t:{},N=No(F7);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?Yf.createElement(Y1,YB({},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 Y4=Yf.memo(function(e){var t=zK(e,Y2),n=Ct();return Yf.createElement(_S,{id:t.id,type:"area"},e=>Yf.createElement(Yf.Fragment,null,Yf.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Yq(r,a),value:kX(n,t),payload:e}]})(t)}),Yf.createElement(YW,{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}),Yf.createElement(_T,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:kV(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),Yf.createElement(Y5,YB({},t,{id:e}))))},FC);function Y3(){return(Y3=Object.assign.bind()).apply(null,arguments)}function Y6(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}Y4.displayName="Area";var Y8=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y6(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)):Y6(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"},Fm),Y7=(0,ew.forwardRef)(function(e,t){var n,r=zK(e.categoricalChartProps,Y8),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fk,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(FN,{chartData:s.data}),ew.createElement(FM,{layout:r.layout,margin:r.margin}),ew.createElement(FP,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(FE,{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(Bn,Y3({},r,{ref:t})))}),Y9=["axis"],Ze=(0,ew.forwardRef)((e,t)=>ew.createElement(Y7,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Y9,tooltipPayloadSearcher:LA,categoricalChartProps:e,ref:t})),Zt=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 Zn(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 Zr(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 Za(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 Zi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Za(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)):Za(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zo(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(kw(c)||zE.isSsr)return null!=(r=Zn(i,(kw(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?zR(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=zR(i,{fontSize:t,letterSpacing:n}),Zt({width:a.width+m.width,height:a.height+m.height},f)):zR(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kv(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:Zn(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Zr(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||Zr(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=Zi(Zi({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Zr(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Zi(Zi({},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=Zi(Zi({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Zi(Zi({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Zr(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Zi(Zi({},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=Zi(Zi({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Zi(Zi({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Zr(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Zi(Zi({},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 Zl=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function Zs(){return(Zs=Object.assign.bind()).apply(null,arguments)}function Zc(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 Zd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zc(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)):Zc(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Zu={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:C1.axis};function Zf(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=Zd(Zd(Zd({},s),AW(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=Zd(Zd({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=Zd(Zd({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",Zs({},c,{className:(0,jU.clsx)("recharts-cartesian-axis-line",(0,jH.default)(l,"className"))}))}function Zh(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jU.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,Zd(Zd({},r),{},{className:i}));else if("function"==typeof n)t=n(Zd(Zd({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jU.clsx)(o,Lh(n))),t=ew.createElement(z8,Zs({},r,{className:o}),a)}return t}function Zm(e){var{ticks:t,axisType:n,axisId:r}=e,a=Nn();return(0,ew.useEffect)(()=>null==r||null==n?kI:(a(Fb({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(Fy({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zp=(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=Zo(Zd(Zd({},y),{},{ticks:n}),v,b),S=AW(y),C=AK(r),M=z0(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),P={};"object"==typeof a&&(P=a);var O=Zd(Zd({},S),{},{fill:"none"},P),I=N.map(e=>Zd({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=kw(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))),A=I.map(e=>{var{entry:t,line:n}=e;return ew.createElement(AZ,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(t.value,"-").concat(t.coordinate,"-").concat(t.tickCoord)},a&&ew.createElement("line",Zs({},O,n,{className:(0,jU.clsx)("recharts-cartesian-axis-tick-line",(0,jH.default)(a,"className"))})))}),z=I.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=Zd(Zd(Zd(Zd({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=Zd(Zd({},f),C);return ew.createElement(AZ,Zs({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},zv(w,d,t)),r&&ew.createElement(Zh,{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(Zm,{ticks:N,axisId:k,axisType:j}),z.length>0&&ew.createElement(_G,{zIndex:C1.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},z)),A.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},A))}),Zg=(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,Zl),[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(_G,{zIndex:e.zIndex},ew.createElement(AZ,{className:(0,jU.clsx)("recharts-cartesian-axis",i)},ew.createElement(Zf,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:AW(e)}),ew.createElement(Zp,{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(_4,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(Lt,{label:e.label,labelRef:e.labelRef}),e.children)))}),Zx=ew.forwardRef((e,t)=>{var n=zK(e,Zu);return ew.createElement(Zg,Zs({},n,{ref:t}))});Zx.displayName="CartesianAxis";var Zv=["x1","y1","x2","y2","key"],Zb=["offset"],Zy=["xAxisId","yAxisId"],Zw=["xAxisId","yAxisId"];function Zj(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 Zk(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zj(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)):Zj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZN(){return(ZN=Object.assign.bind()).apply(null,arguments)}function ZS(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 ZC=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 ZM(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=AW(ZS(n,Zv)))?a:{},{offset:u}=d,f=ZS(d,Zb);r=ew.createElement("line",ZN({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function ZE(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=ZS(e,Zy),s=a.map((e,a)=>{var i=Zk(Zk({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(ZM,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function ZP(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=ZS(e,Zw),s=a.map((e,a)=>{var i=Zk(Zk({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(ZM,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZO(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 ZI(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 ZA=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return k$(Zo(Zk(Zk(Zk({},Zu),n),{},{ticks:kF(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},Zz=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return k$(Zo(Zk(Zk(Zk({},Zu),n),{},{ticks:kF(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZT={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:C1.grid};function ZR(e){var t=No(kY),n=No(kZ),r=CS(),a=Zk(Zk({},zK(e,ZT)),{},{x:kw(e.x)?e.x:r.left,y:kw(e.y)?e.y:r.top,width:kw(e.width)?e.width:r.width,height:kw(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=Ct(),p=No(e=>Am(e,"xAxis",i,m)),g=No(e=>Am(e,"yAxis",o,m));if(!kT(c)||!kT(d)||!kw(l)||!kw(s))return null;var x=a.verticalCoordinatesGenerator||ZA,v=a.horizontalCoordinatesGenerator||Zz,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?Zk(Zk({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Ci(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?Zk(Zk({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Ci(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_G,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(ZC,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZO,ZN({},a,{horizontalPoints:b})),ew.createElement(ZI,ZN({},a,{verticalPoints:y})),ew.createElement(ZE,ZN({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(ZP,ZN({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZR.displayName="CartesianGrid";var ZD=["domain","range"],Z_=["domain","range"];function ZL(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 Z$(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 ZF(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=ZL(e,ZD),{domain:i,range:o}=t,l=ZL(t,Z_);return!!Z$(n,i)&&!!Z$(r,o)&&FC(a,l)}var ZB=["type"],ZV=["dangerouslySetInnerHTML","ticks","scale"],ZH=["id","scale"];function ZU(){return(ZU=Object.assign.bind()).apply(null,arguments)}function Zq(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 ZW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zq(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)):Zq(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZK(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 ZG(e){var t=Nn(),n=(0,ew.useRef)(null),r=CM(),{type:a}=e,i=ZK(e,ZB),o=C3(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZW(ZW({},i),{},{type:o})},[i,o]);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}var ZX=e=>{var{xAxisId:t,className:n}=e,r=No(k7),a=Ct(),i="xAxis",o=No(e=>Ap(e,i,t,a)),l=No(e=>Ai(e,t)),s=No(e=>As(e,t)),c=No(e=>OV(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=ZK(e,ZV),{id:m,scale:p}=c,g=ZK(c,ZH);return ew.createElement(Zx,ZU({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jU.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},ZY={allowDataOverflow:OB.allowDataOverflow,allowDecimals:OB.allowDecimals,allowDuplicatedCategory:OB.allowDuplicatedCategory,angle:OB.angle,axisLine:Zu.axisLine,height:OB.height,hide:!1,includeHidden:OB.includeHidden,interval:OB.interval,label:!1,minTickGap:OB.minTickGap,mirror:OB.mirror,orientation:OB.orientation,padding:OB.padding,reversed:OB.reversed,scale:OB.scale,tick:OB.tick,tickCount:OB.tickCount,tickLine:Zu.tickLine,tickSize:Zu.tickSize,type:OB.type,niceTicks:OB.niceTicks,xAxisId:0},ZZ=ew.memo(e=>{var t=zK(e,ZY);return ew.createElement(ew.Fragment,null,ew.createElement(ZG,{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(ZX,t))},ZF);ZZ.displayName="XAxis";var ZJ=["type"],ZQ=["dangerouslySetInnerHTML","ticks","scale"],Z0=["id","scale"];function Z1(){return(Z1=Object.assign.bind()).apply(null,arguments)}function Z2(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 Z5(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z2(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)):Z2(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Z4(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 Z3(e){var t=Nn(),n=(0,ew.useRef)(null),r=CM(),{type:a}=e,i=Z4(e,ZJ),o=C3(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Z5(Z5({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($b(l)):n.current!==l&&t($y({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($w(n.current)),n.current=null)},[t]),null}function Z6(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=No(k7),s=Ct(),c=Nn(),d="yAxis",u=No(e=>Ad(e,t)),f=No(e=>Ac(e,t)),h=No(e=>Ap(e,d,t,s)),m=No(e=>Oq(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||_8(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($S({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=Z4(e,ZQ),{id:b,scale:y}=m,w=Z4(m,Z0);return ew.createElement(Zx,Z1({},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,jU.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Z8={allowDataOverflow:OU.allowDataOverflow,allowDecimals:OU.allowDecimals,allowDuplicatedCategory:OU.allowDuplicatedCategory,angle:OU.angle,axisLine:Zu.axisLine,hide:!1,includeHidden:OU.includeHidden,interval:OU.interval,label:!1,minTickGap:OU.minTickGap,mirror:OU.mirror,orientation:OU.orientation,padding:OU.padding,reversed:OU.reversed,scale:OU.scale,tick:OU.tick,tickCount:OU.tickCount,tickLine:Zu.tickLine,tickSize:Zu.tickSize,type:OU.type,niceTicks:OU.niceTicks,width:OU.width,yAxisId:0},Z7=ew.memo(e=>{var t=zK(e,Z8);return ew.createElement(ew.Fragment,null,ew.createElement(Z3,{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(Z6,t))},ZF);function Z9({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,eA.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)(mm,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mk,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mN,{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,eA.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)(Ji,{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)(Je,{metric:d}):null]})]})]})}function Je({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Jr,{segments:e.composition}),(0,eb.jsx)(Ja,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Jt,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{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)(Jt,{panel:e},e.id))}),(0,eb.jsx)(Ja,{details:e.details,columns:3})]})}function Jt({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,eA.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)(Jo,{data:e.data,color:e.color,className:(0,eA.cn)("w-full",n)})]})}function Jn(){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 Jr({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,eA.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 Ja({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,eA.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 Ji({data:e,color:t}){return(0,eb.jsx)(Jo,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Jo({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)(Vo,{config:o,className:(0,eA.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Ze,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZR,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(ZZ,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Z7,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(BY,{cursor:!1,content:(0,eb.jsx)(Vs,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(Y4,{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})]})})}Z7.displayName="YAxis";let Jl=(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"}]]),Js=(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"}]]),Jc={name:"名称",cpu:"CPU",memoryMb:"内存",diskMbps:"磁盘",networkMbps:"网络"};function Jd({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(Jg(a))?t:e(a,n,r)}(a,n),i=Jg(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:Jv(Math.min(100,e.cpu)),memoryMb:Jv(e.memoryMb),diskMbps:Jv(e.diskMbps),networkMbps:Jv(e.networkMbps)}))}(f.processes)].sort((e,t)=>Jx(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jp(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>Jx(e,t,o,s)))t.push(Jp(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,eA.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)(mm,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mk,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mN,{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)(Ju,{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:[Jc[e],(0,eb.jsx)(Ju,{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,eA.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)(Jf,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(Jh,{platform:f.platform,status:e.status}),(0,eb.jsx)(Jm,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(Jm,{value:e.memoryMb,max:Jb(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${Jy(t/1024)} GB`:`${Jy(t)} MB`}),(0,eb.jsx)(Jm,{value:e.diskMbps,max:Math.max(1,Jb(m,"diskMbps")),label:`${Jy(e.diskMbps)} MB/秒`}),(0,eb.jsx)(Jm,{value:e.networkMbps,max:Math.max(1,Jb(m,"networkMbps")),label:`${Jy(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function Ju({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jD:jR,{className:(0,eA.cn)("ml-1 size-3",n)}):null}function Jf({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xp:m5;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,eA.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 Jh({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)(Js,{"aria-label":"linux"===e?"挂起进程":"挂起",className:"size-4"}):null,t.includes("auto-restart")?(0,eb.jsx)(lZ,{"aria-label":"linux"===e?"自动重启进程":"自动重启",className:"size-4"}):null,t.includes("running")?(0,eb.jsx)(Jl,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function Jm({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,eA.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jp(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 Jg(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function Jx(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 Jv(e){return Math.round(10*e)/10}function Jb(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function Jy(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function Jw({className:e}){let t=Jk("/api/local/machines/processes"),n=JN("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Jd,{machines:r,className:(0,eA.cn)("h-full min-h-0 w-full",e)})}function Jj({className:e}){let t=Jk("/api/local/machines/performance"),n=JN("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Z9,{machines:r,className:(0,eA.cn)("h-full min-h-0 w-full",e)})}function Jk(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((0,eT.localAPIURL)(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 JN(e){let{machines:t}=xC(),[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 sy(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 JS=(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"}]]),JC=(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"}]]),JM={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},JE=[{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 JP(e,t,n){return e.getPropertyValue(t).trim()||n}function JO(e,t=!1){let n=getComputedStyle(e),r=JP(n,"--foreground","#18181b"),a=JP(n,"--terminal-background",JP(n,"--background","#ffffff")),i="transparent"===a?JP(n,"--background","#ffffff"):a,o=JP(n,"--muted-foreground","#71717a"),l=JP(n,"--border","#e4e4e7"),s=JP(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:JP(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:JP(n,"--terminal-red","#bf616a"),green:JP(n,"--terminal-green","#5e8c61"),yellow:JP(n,"--terminal-yellow","#b06f3c"),blue:JP(n,"--terminal-blue","#5e81ac"),magenta:JP(n,"--terminal-magenta","#b48ead"),cyan:JP(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:JP(n,"--terminal-bright-red","#d06f79"),brightGreen:JP(n,"--terminal-bright-green","#6b9a70"),brightYellow:JP(n,"--terminal-bright-yellow","#c2824b"),brightBlue:JP(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:JP(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:JP(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JI(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JA({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:JM.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,P]=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=JP(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:JO(g.current),...j.current,allowTransparency:!0}),E=new h,O=new m,I=new p;function A(){try{E.fit(),y.current?.({cols:C.cols,rows:C.rows})}catch{}}for(let e of(C.loadAddon(E),C.loadAddon(O),C.loadAddon(I),C.open(g.current),x.current=C,v.current=E,P(!0),requestAnimationFrame(A),(n=new ResizeObserver(A)).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))})),JI(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:O,webLinksAddon:I,fit:A,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=JO(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=JO(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,P(!1)}},[o,t]),ew.useEffect(()=>{let e=x.current;if(e&&C.current!==r)for(let t of(C.current=r,JI(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,eA.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,eA.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 Jz({status:e="idle"}){return"running"===e?(0,eb.jsx)(JS,{className:"size-3.5 text-foreground"}):"success"===e?(0,eb.jsx)(eP,{className:"size-3.5 text-foreground"}):"error"===e?(0,eb.jsx)(eE,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(yO,{className:"size-3.5 text-muted-foreground"})}function JT({session:e}){return e.aiControlled?(0,eb.jsx)(JC,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(Jz,{status:e.status})}function JR({sessions:e,defaultSessions:t=JE,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(()=>({...JM,...g,status:{...JM.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),P=N.find(e=>e.id===E)??S;function O(t){void 0===e&&k(t),i?.(t)}function I(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,eA.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,eA.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uA,{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===P?.id;return(0,eb.jsxs)("div",{className:(0,eA.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:()=>I(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)(JT,{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(O(n),e.id===E){let e=n.at(-1);e&&I(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)(fb.XIcon,{className:"size-3"})})]},e.id)})}),f&&(0,eb.jsx)(eI.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};O([...N,e]),I(e)},className:"size-7 shrink-0",children:(0,eb.jsx)(lY,{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===P?.id;return(0,eb.jsx)(JD,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JD({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)(JA,{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 J_({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),P=ew.useRef(r),O=Array.isArray(n?.sessionIds)?n.sessionIds.join("\0"):"__all__",I=t?.trim()||void 0,A=I??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{P.current=r},[r]);let z=a.find(e=>e.id===d)??a[0],T=z?.shells?.find(e=>e.id===f)??z?.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(0,eT.localAPIURL)(`/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(z&&!m){M.current=!1,p(!0);try{let e=await fm({machineId:z.id,scopeId:I,shell:T?.id,cwd:z.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,z,T,I]);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([ff(),fh(I)]);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}},[O,I,A]),ew.useEffect(()=>{g&&P.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,eA.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)(gL,{value:z?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xx,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bi,{className:"size-3.5"}),(0,eb.jsx)(gV,{placeholder:"机器"})]}),(0,eb.jsx)(xy,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gL,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xx,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(gV,{placeholder:"Shell"})}),(0,eb.jsx)(xy,{align:"start",children:z?.shells?.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!z||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lY,{className:"size-4"})})]}),(0,eb.jsx)(JR,{sessions:o.map(JL),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}),fp(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,fg(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),fx(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 JL(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 J$(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=uW("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Ut,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(GN,{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)(Xx,{className:`${n} border-0`,defaultUrl:e.defaultUrl??uW("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=uW("diff-tab-viewer");return(0,eb.jsx)(qP,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=uW("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Ut,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qv,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:JF(e)},source:void 0!==e.defaultValue?{type:JF(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(J_,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function JF(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function JB(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)(GE,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:uq(n.kind),content:J$(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:[G7],createLabel:"打开文件",emptyContent:(0,eb.jsx)(Ut,{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)(H9,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(XK,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(Jw,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(Jj,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(XU,{})});case"machine-file-management":return(0,eb.jsx)(Yu,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HA,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(G4,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GT,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(GR,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"tasks-pane":return(0,eb.jsx)(G6,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"sidequery-pane":return(0,eb.jsx)(GD,{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 J$(t.tab??uW(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 JV({kind:e,...t}){return JB(e,t)}let JH="application/vnd.vantaloom.agent-pane-shredder",JU="application/vnd.vantaloom.agent-pane-cutter";function Jq(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 JW=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(ba,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(Uy,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(Uh,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(s9,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(ct,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(Uy,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(Ub,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Uv,{})}];function JK(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 JG(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function JX(e,t){return[e[t[0]]??50,e[t[1]]??50]}function JY({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=JK(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(a,e),onLayoutChanged:e=>n?.("outer",JX(e,a)),children:[(0,eb.jsx)(hM,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=JK(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(a,e),onLayoutChanged:e=>n?.("outer",JX(e,a)),children:[(0,eb.jsx)(hM,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=JK(t,"outer",[58,42]),a=JK(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("left",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=JK(t,"outer",[42,58]),a=JK(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("right",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=JK(t,"outer",[58,42]),a=JK(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("top",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=JK(t,"outer",[42,58]),a=JK(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("bottom",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=JK(t,"outer"),i=JK(t,"left"),o=JK(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(l,a),onLayoutChanged:e=>n?.("outer",JX(e,l)),children:[(0,eb.jsx)(hM,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(s,i),onLayoutChanged:e=>n?.("left",JX(e,s)),children:[(0,eb.jsx)(hM,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(c,o),onLayoutChanged:e=>n?.("right",JX(e,c)),children:[(0,eb.jsx)(hM,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function JZ({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,eA.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(JU)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(JH)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jz)&&(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(JU)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(JH)){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?.[jz]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jz);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,eA.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:jA(r)?JB(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{Jq(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)(HA,{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)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"rounded-full bg-background/90",onClick:o,"data-tour":"pane-add",children:[(0,eb.jsx)(lY,{className:"size-4"}),"添加"]})})})}function JJ({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vy,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vj,{children:[(0,eb.jsx)(vk,{children:"没有匹配组件。"}),(0,eb.jsx)(vN,{heading:"可放入窗口",children:jP.map(e=>(0,eb.jsxs)(vS,{"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)(vC,{children:"添加"})]},e.id))})]})]})})}function JQ({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jA(e)?JB(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{Jq(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)(HA,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let J0=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(uw,{})},{kind:"sidequery-pane",label:"旁问",icon:(0,eb.jsx)(s7,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uN,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(Up,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(Ux,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(Um,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uA,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(Ug,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uE,{})}];function J1(e,t,n){return Math.min(n,Math.max(t,e))}function J2({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",children:[(0,eb.jsx)(lY,{className:"size-4"}),"添加窗口",(0,eb.jsx)(xp,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(y1,{align:t,sideOffset:6,className:"min-w-40",children:J0.map(t=>(0,eb.jsxs)(y2,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function J5({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,P]=ew.useState(null),O=ew.useRef(null),I=ew.useRef(null),A=ew.useRef(null),z=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=O.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=>{I.current?function(e,t){let n=O.current,r=I.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){A.current=null,P(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";A.current={id:i,edge:h};let m=n.getBoundingClientRect();P(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):z.current&&function(e,t){let n=z.current;if(!n)return;if("width"===n.kind){let t=J1(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=J1(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=I.current;if(e){var t,n;let r=A.current;I.current=null,A.current=null,M(null),P(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}z.current&&(z.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,eA.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(J2,{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:O,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,eA.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,eA.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(),I.current=t,A.current=null,M(t),P(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)(fC,{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)(fb.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(JQ,{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(),z.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(),z.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;z.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,eA.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":z.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let J4="vtl:workspace-layout-mode",J3="vtl:workspace-agent-side",J6="vtl:workspace-layout-changed",J8={mode:"pane",agentSide:"left"};function J7(){let e=J8.mode,t=J8.agentSide;try{let n=window.localStorage.getItem(J4);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(J3);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function J9(e){try{e.mode&&window.localStorage.setItem(J4,e.mode),e.agentSide&&window.localStorage.setItem(J3,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(J6))}function Qe({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 sI(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=Hd(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(m5,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,eA.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,eA.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)(hI,{className:"size-3"}),"已暂停"]}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-emerald-600 dark:text-emerald-500",children:[(0,eb.jsx)(eP,{className:"size-3"}),"完成"]})})]}),(0,eb.jsx)("div",{className:"relative min-h-0 flex-1",children:l?(0,eb.jsx)(V4,{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 Qt=[],Qn="vantaloom:file-system-changed";function Qr(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 Qa(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 Qi(e){var t;let n=(t=e?.layoutMode,JW.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:Qo(e.outer),left:Qo(e.left),right:Qo(e.right),top:Qo(e.top),bottom:Qo(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,JW.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:Qs(i.title)??"Subagent",subagentId:Qs(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jO(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>uU(e?.kind)):void 0,s=jO(e.kind);return{id:a,kind:e.kind,title:Qs(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:Qs(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:Qs(r.activeSessionId),selectedMachineId:Qs(r.selectedMachineId),selectedShellId:Qs(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 Qo(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 Ql(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function Qs(e){return"string"==typeof e&&e.trim()?e:void 0}function Qc(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function Qd(e){return e.reduce((e,t)=>Math.max(e,Qc(t)),0)}function Qu({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=sv(),m=ew.useRef(null),p=ew.useRef(void 0),g=Qi(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(J8);return ew.useEffect(()=>{t(J7());let e=()=>t(J7());return window.addEventListener(J6,e),window.addEventListener("storage",e),()=>{window.removeEventListener(J6,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,P]=ew.useState(g.layoutSizes),[O,I]=ew.useState(()=>g.panes),[A,z]=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(()=>Uc(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Us(e));window.localStorage.setItem(Us(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>Uu(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,eP]=ew.useState(!1),eO=ew.useRef(em),[ez,eR]=ew.useState(),[eD,e_]=ew.useState(),[eL,e$]=ew.useState(),eF=ew.useRef(Qd(g.panes)),eB=ew.useRef(0),eV=ew.useRef(""),eH=JW.find(e=>e.id===x)?.slots??4,eU=e?.conversation.settings.folders??Qt,{models:eq}=xY(),eW=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?eq.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[eq,e?.conversation.settings.mainModels]),eK=js(e?.conversation.settings.engine),eG=ew.useMemo(()=>{if(eK){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jc(t),disabled:!0}]}return eW},[eK,e?.conversation.settings.ccModel,eW]),eX=!eK&&0===eW.length,[eY,eZ]=ew.useState(!1),eJ=ef||"working"===em||eY,eQ=ew.useCallback(async t=>{if(!e||eE)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(eK){if(eJ)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"),hH.error(e instanceof Error?e.message:"压缩请求失败")}return}if(eJ)return void await s2(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eP(!0);try{let e=await s4(n,t,void 0,r),a=await sI(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));hH.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hH.error(e instanceof Error?e.message:"压缩失败")}finally{eP(!1)}},[e,eE,eJ,eK]),e0=ew.useMemo(()=>{if(!e)return;let t=eq.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:()=>eQ("precise"),onCompressExtreme:()=>eQ("extreme"),compressing:eE}},[e,eq,ed,eC,eQ,eE]),e1=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]),e2=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 sA(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>Qa(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]),e5=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Uf(e));window.localStorage.setItem(Uf(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 e1){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=e1.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,e1]),e4=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await fn(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}},[]),e3=ew.useCallback(async e=>{if(!e||!jA(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(e4));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 e4(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[e4]),e6=ew.useCallback(async()=>{var e,t;let n=await Promise.all(O.map(async e=>e3(e)));e=O,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&I(n)},[O,e3]);ew.useEffect(()=>{i?.(void 0!==ez||void 0!==eD||void 0!==eL)},[eD,eL,i,ez]);let e8=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(e8.current!==t){e8.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>Qr(e,n))},[e?.conversation.id,e?.events]);let e7=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sA(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>Qa(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 e9(e){if(!e.length)return;let t=e.map(jT);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function te(e,t,n){if(!e||!jA(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 tt(e,t){return e&&jA(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 tn(e){I(t=>{let n=t.findIndex(e=>void 0===e);return n>=0?t.map((t,r)=>r===n?e:t):[...t,e]})}function tr(e){eF.current+=1;let t=jI(e,`${e}-${eF.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;(0,eT.fetchLocalDevServers)().then(n=>{tn(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tn(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(Uf(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(Uc(e?.conversation.id)),et(Uu(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=eW[0]?.id??"";eu(t=>eW.some(e=>e.id===t)?t:e)},[eW]),ew.useEffect(()=>{let t=Qi(e?.panes);v(t.layoutMode),y(t.agentPosition),P(t.layoutSizes),I(t.panes),z(t.cardColumns),R(t.cardHeights),eF.current=Qd(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=>Qr(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 sI(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((0,eT.localAPIURL)(`/api/local/agent/conversations/${encodeURIComponent(n)}/events/stream?after=${l}`));return s.addEventListener("detail",e=>{try{let t=s3(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(()=>{e6()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,e6]),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!==eV.current&&(eV.current=e,window.dispatchEvent(new CustomEvent(Qn)),e6())},[D,e6]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:A,heights:T},r=[],O.forEach((e,t)=>{if(e){if(jA(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,A,T,e?.conversation.id,x,E,O]);let ta=ew.useCallback(e=>{I(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jA(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}eF.current+=1;let r=jI("browser-tab-viewer",`browser-tab-viewer-${eF.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]),ti=ew.useRef(!1);function to(e){I(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;eF.current+=1;let n=jI(e,`${e}-${eF.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;ti.current=!1;let r=!1,a=async()=>{if(!r&&!ti.current)try{let e=(await (0,eT.fetchLocalDevServers)())[0];if(r||ti.current||!e)return;ti.current=!0,ta(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,ta]);let tl=ew.useCallback((e,t)=>{I(n=>{if(n.some(n=>void 0!==n&&jA(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jI("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]),td=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;td.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fh();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||td.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(td.current.add(t.id),tl(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,tl]);let tu=ew.useCallback(()=>{to("plan-doc-viewer")},[j]),tf=ew.useCallback(()=>{to("spec-doc-viewer")},[j]),th=ew.useCallback(()=>{to("tasks-pane")},[j]),tm=ew.useCallback(()=>{to("sidequery-pane")},[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 tp=q??e?.conversation.planState??null,tg=ew.useRef(void 0);ew.useEffect(()=>{let e=tp?.approvals?.find(e=>!e.decision);e&&tg.current!==e.id&&(tg.current=e.id,tu())},[tp,tu]);let tx=ew.useRef(void 0);function tv(e,t){I(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);eF.current+=1;let a={id:`${e}-${eF.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 tb(e,t,n){try{let r=await fe(e);if(j)return void tv("file-tab-viewer",r);I(e=>e.map((e,a)=>a===t?te(e,r,n):e))}catch{hH.error("文件预览打开失败")}}function ty(e){if(j)return void tb(e,-1);let t=O.slice(0,eH).findIndex(e=>e?.kind==="multi-tab-system");t<0?hH.warning("请先放入一个多标签页组件"):tb(e,t)}function tw(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 tv("diff-tab-viewer",n);let r=O.slice(0,eH).findIndex(e=>e?.kind==="multi-tab-system");r<0?hH.warning("请先放入一个多标签页组件"):I(e=>e.map((e,t)=>t===r?te(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||ty({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let t=e?.conversation.id;!t||tx.current===t||D.some(e=>"task"===e.kind)&&(tx.current=t,th())},[e?.conversation.id,D,th]);let tj=e?.conversation.ownerMachineId??"local",tk=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((0,eT.localAPIURL)(`/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 uZ(tj,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void ty({machineId:tj,path:t});let a=(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(tj)}/files/raw?path=${encodeURIComponent(t)}`);await mY({url:a,label:r}),hH.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hH.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===tj?(0,eT.localAPIURL)(`/v1/files/raw?${n}`):(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(tj)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===tj?"local-file":"remote-file",onOpen:e=>void t(e)}},[tj]);async function tN(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hH.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uJ({machineId:a,path:r,content:n}),o={...await ft(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};I(t=>t.map((t,n)=>n===e?tt(t,o):t)),window.dispatchEvent(new CustomEvent(Qn)),hH.success("文件已保存")}catch(e){throw hH.error("文件保存失败"),e}}async function tS(t){let n=e?.conversation.id,r=eL?.tab.file?.path,a=eL?.tab.file?.machineId??"local";if(eL&&n&&r)try{let i=await sQ(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await ft(i,{id:eL.tab.id,title:`${i.name} @ ${Qh(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:eL.tab.defaultView,defaultMode:"review"});I(e=>e.map((e,t)=>t===eL.paneIndex?tt(e,o):e)),e$(void 0)}catch{hH.error("历史版本打开失败")}}function tC(e,t,n){let i=O[e];eF.current=Math.max(eF.current,Qc(n)),I(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=jT(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tM(e,t){I(n=>n.map((n,r)=>r===e?t:n))}function tE(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tP(e){var t=O[e];if(t&&jA(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])fp(e).catch(()=>{});I(t=>t.map((t,n)=>n===e?void 0:t))}function tO(e){let t=O[e];t&&e9([t]),I(t=>t.map((t,n)=>n===e?void 0:t))}async function tI(t,n="chat",r=[]){let a=e?.conversation.id,i=eK?"":ed||eW[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return Uu(e);let r=n.slice(0,1e5),a=Uu(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(Ud(e),JSON.stringify(i))}catch{}return i}(a,t)),ef||"working"===em))return;if(!eK&&!i)return void hH.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"),hH.error(e instanceof Error?e.message:"对话请求失败")}}async function tA(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=eK?"":r||ed||eW[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!eK&&!a)return void hH.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"),hH.error(e instanceof Error?e.message:"对话重试失败")}}}function tz(e){eJ?hH.error("对话正在运行,请先停止后再回退"):ei(e)}async function tT(){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} 个子代理`),hH.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hH.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hH.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tR(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await sZ(n,t.id,e?.conversation.ownerMachineId);o?.(r),hH.success("已创建分支对话")}catch(e){hH.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}async function tD(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){hH.error(e instanceof Error?e.message:"设置更新失败")}}async function t_(t,n){let r=e?.conversation.id;if(r)try{await s0(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hH.error(e instanceof Error?e.message:"审批操作失败")}}async function tL(){let t=e?.conversation.id;if(t){eZ(!0);try{await s1(t,e?.conversation.ownerMachineId)}catch{}}}function t$(){tI("继续","agent")}async function tF(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&&eY&&eZ(!1)},[em,eY]),ew.useEffect(()=>{let e=eO.current;if(eO.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()&&tI(t.trim(),"agent")}}},[em]);let tB=Array.from({length:eH},(r,a)=>(0,eb.jsx)(JZ,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:O[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eR(a),onPanelDrop:tC,onContentChange:tM,onClear:tP,onCut:tO,workspaceFolders:eU,onRequestFileTab:(e,t)=>e_({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:ty,onSaveFileTab:tN,onOpenFileHistory:(e,t)=>e$({paneIndex:e,tab:t})},a)),tV=O.slice(0,eH).some(e=>e?.kind==="subagent-conversation-panel"),tH=E.shell?.agent??42,tU=E.shell?.panes??58,tq=w.agentSide,tW="control-room"===w.mode||k,tK=(0,eb.jsxs)(mq,{type:"single",value:tW?"hidden":tq,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),J9({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),J9({mode:"control-room"}))},children:[(0,eb.jsx)(mW,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s9,{})}),(0,eb.jsx)(mW,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cr,{})}),(0,eb.jsx)(mW,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(ct,{})})]}),tG=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HT,{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)(HR,{rounds:e1,onJumpToRound:e2,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HA,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e7:void 0,models:e?eG:void 0,modelId:eK?eG[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tD({permissionMode:t})},running:eJ,disabled:!!e&&eX,onModelChange:eu,onSubmit:e?e=>{tI(e.value,"agent",e.attachments??[])}:void 0,onStop:tL,onOpenFile:tw,deliverable:tk,onOpenSubagent:function(e){e.id&&c?.([tE(e)])},onOpenPlan:tu,onOpenSpec:()=>tf(),onOpenTasks:th,planPromptBar:e?(0,eb.jsx)(Ur,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tp,modelRef:ed||eW[0]?.id||"",onOpenPlan:tu,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0,onRetry:tA,onApprovalDecision:t_,onContinue:t$,onRecallUserMessage:tz,onBranchAssistantMessage:tR,onActiveEventChange:e5,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tF,contextUsage:e0})}),s.length>0&&e?(0,eb.jsx)(Qe,{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,tE(e)])}}):null]}),tX=(0,eb.jsx)(hM,{id:"agent",defaultSize:tH,minSize:28,children:tG},"agent-conversation"),tY=(0,eb.jsx)(hM,{id:"panes",defaultSize:tU,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":tV?"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)(mm,{value:x,onValueChange:e=>{let t,n;return t=JW.find(t=>t.id===e)?.slots??4,void((n=O.slice(t).filter(e=>!!e)).length&&e9(n),I(Array.from({length:Math.max(4,t)},(e,n)=>n<t?O[n]:void 0)),v(e))},children:(0,eb.jsx)(mk,{children:JW.map(e=>(0,eb.jsx)(mN,{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))})}),tK,(0,eb.jsx)(eI.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(JU,"cut")},children:(0,eb.jsx)(lJ,{})}),(0,eb.jsx)(eI.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(JH,"clear")},children:(0,eb.jsx)(ca,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(JY,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=Ql(t);P(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:tB},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),tZ=(0,eb.jsx)(J5,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:O,agentSide:tq,columns:A,heights:T,onColumnsChange:z,onHeightsChange:R,onAddCard:tr,onContentChange:tM,onClear:tP,workspaceFolders:eU,onOpenWorkspaceFile:ty,onSaveFileTab:tN,onOpenFileHistory:(e,t)=>e$({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>e_({paneIndex:e,insertIndex:t})}),tJ=(0,eb.jsx)("div",{className:(0,eA.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===tq?"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"===tq?S?(0,eb.jsx)(cn,{}):(0,eb.jsx)(ce,{}):S?(0,eb.jsx)(tc,{}):(0,eb.jsx)(ts,{})})}),tQ=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(JJ,{open:void 0!==ez,onOpenChange:e=>{e||eR(void 0)},onAdd:function(e){if(void 0===ez)return;eF.current+=1;let t=jI(e,`${e}-${eF.current}`),n=O[ez];n&&e9([n]),I(e=>e.map((e,n)=>n===ez?t:e)),eR(void 0)}}),(0,eb.jsx)(Ue,{open:void 0!==eD,folders:eU,onOpenChange:e=>{e||e_(void 0)},onSelectFile:e=>{eD&&tb(e,eD.paneIndex,eD.insertIndex),e_(void 0)}}),(0,eb.jsx)(Qf,{open:void 0!==eL,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:eL?.tab,onOpenChange:e=>{e||e$(void 0)},onSelectVersion:e=>{tS(e)}}),(0,eb.jsx)(d6,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"回退对话到此处?"}),(0,eb.jsx)(uv,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{disabled:eo,children:"取消"}),(0,eb.jsx)(ub,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tT()},children:eo?"回退中…":"确认回退"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(jM,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HA,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e7:void 0,models:e?eG:void 0,modelId:eK?eG[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tD({permissionMode:t})},running:eJ,disabled:!!e&&eX,onModelChange:eu,onSubmit:e?e=>{tI(e.value,"agent",e.attachments??[])}:void 0,onStop:tL,onOpenFile:tw,deliverable:tk,onOpenSubagent:function(e){var t;let n=O.slice(0,eH),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hH.warning("请释放一个窗口再选中浏览");eB.current+=1;let o={id:t=`subagent-${e.id}-${eB.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}]};I(e=>e.map((e,t)=>t===i?o:e))},onRetry:tA,onApprovalDecision:t_,onContinue:t$,onRecallUserMessage:tz,onBranchAssistantMessage:tR,onActiveEventChange:e5,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tF,contextUsage:e0}),paneElements:tB,panes:O,activeSlotCount:eH,onOpenPalette:eR,timeline:(0,eb.jsx)(HR,{rounds:e1,onJumpToRound:e2,activeRunId:X})}),tQ,(0,eb.jsx)(hX,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[tW?(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)(hC,{direction:"horizontal",children:tY})}),(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)(hC,{direction:"horizontal",children:tX}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:tK})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Ul,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:eJ,subagentTree:d,baselineSubagentIds:K,activeSubagentPath:s,onSelectMain:()=>c?.([]),onSelectSubagent:e=>c?.([e])})})]}):j&&!O.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:tG}),(0,eb.jsxs)("div",{className:(0,eA.cn)("absolute top-2 z-20 flex items-center gap-2","left"===tq?"right-3":"left-3"),children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",onClick:tm,title:"旁问:在独立旁路里临时提问,不影响主对话",children:[(0,eb.jsx)(s7,{className:"size-4"}),"旁问"]}),(0,eb.jsx)(J2,{onAddCard:tr,align:"left"===tq?"end":"start"})]})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===tq?(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:tG}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tZ})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tZ}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tG})]})}):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)(hC,{direction:"horizontal",children:tY})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tG}),tJ]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:{agent:tH,panes:tU},onLayoutChanged:e=>{let t=e.agent??tH,n=e.panes??tU;!function(e){let t=Ql(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};P(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"===tq?[t,n]:[n,t])},children:["left"===tq?tX:tY,(0,eb.jsx)(hE,{withHandle:!0}),"left"===tq?tY:tX]},`${e?.conversation.id??"empty"}-${tq}`),tJ]}),tQ,(0,eb.jsx)(hX,{position:"top-right"})]}):(0,eb.jsx)(jj,{onCreated:e=>o?.(e),onCancel:l})}function Qf({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)(dE,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fw,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fN,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fS,{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:[Qh(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 Qh(e){return e.replace(/^mut-/,"").slice(0,16)}var Qm=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{let n=(0,lQ.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}},{}),Qp=ew.forwardRef((e,t)=>(0,eb.jsx)(Qm.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function Qg({className:e,...t}){return(0,eb.jsx)(Qp,{"data-slot":"label",className:(0,eA.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 Qx({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,eA.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 Qv(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 Qb(e){return(await QP(`/api/local/skills${Qv(e)}`)).skills??[]}async function Qy(e,t){return QP(`/api/local/skills/${encodeURIComponent(e)}${Qv(t)}`)}async function Qw(e){await QP(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function Qj(e,t){return QP("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function Qk(e,t){return QP("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function QN(){return(await QP("/api/local/skills/sources")).sources??[]}async function QS(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 QP(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function QC(e,t,n){return QP(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qv(n)}`)}async function QM(e){return QP("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function QE(e,t,n){await QP(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qv(n)}`,{method:"DELETE"})}async function QP(e,t){let n=await fetch((0,eT.localAPIURL)(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}Qp.displayName="Label";let QO={global:"全局",project:"项目",conversation:"对话"},QI=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QA({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 QS(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 QC(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 QM({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 QE(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,eA.cn)("grid gap-3",r),children:[(0,eb.jsx)("div",{className:"flex items-center justify-end",children:(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",className:"h-8",onClick:()=>void y(),"aria-label":"刷新记忆",children:(0,eb.jsx)(bs,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mm,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(mk,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mN,{value:e,className:"flex-1",children:QO[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mS,{value:e,className:"mt-3 grid gap-2",children:[(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(eI.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)(lY,{className:"size-4"}),"新增",QO[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:["暂无",QO[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)(Bm,{variant:"secondary",className:"shrink-0",children:(t=e.type,QI.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)(eI.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)(eI.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)(bc,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dE,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fw,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fj,{children:(0,eb.jsxs)(fN,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QO[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)(Qg,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"描述"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gL,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:QI.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"正文"}),(0,eb.jsx)(y9,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fk,{children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",onClick:()=>m(null),disabled:p,children:"取消"}),(0,eb.jsxs)(eI.Button,{type:"button",onClick:()=>void j(),disabled:p||!h?.name.trim(),children:[(0,eb.jsx)(Gl,{className:"size-4"}),p?"保存中":"保存"]})]})]})})]})}let Qz=(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"}]]),QT=(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 QR({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([Qb(w),QN()]);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 Qy(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 Qw(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 Qj(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 Qk(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,eA.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)(gL,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xx,{className:"h-9 w-full",children:(0,eb.jsx)(gV,{placeholder:"选择源"})}),(0,eb.jsx)(xy,{children:0===i.length?(0,eb.jsx)(xw,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xw,{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)(eI.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:"__pull__"===u||!b.trim(),onClick:()=>void C(),children:[(0,eb.jsx)(Qz,{className:"size-4"}),"拉取"]}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",className:"h-9",onClick:()=>void j(),"aria-label":"刷新技能列表",children:(0,eb.jsx)(bs,{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)(Bm,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bm,{variant:"outline",children:e.source}):null]})]}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-wrap gap-1.5",children:[(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void k(e),disabled:p,children:[(0,eb.jsx)(uE,{className:"size-3.5"}),"查看"]}),M&&"global"===e.scope?(0,eb.jsxs)(eI.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)(QT,{className:"size-3.5"}),"装入工作区"]}):null,"global"===e.scope?(0,eb.jsxs)(eI.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)(bc,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dE,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fw,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fj,{children:[(0,eb.jsx)(fN,{children:h?.name}),(0,eb.jsx)(fS,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(w_,{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 QD({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)(Qg,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(v1,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gL,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xw,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xw,{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)(QR,{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)(QA,{conversationId:e,scopes:["project","conversation"]})]})]})}let Q_=(0,l0.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 QL({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,eA.cn)(Q_({variant:t}),e),...n})}function Q$({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,eA.cn)("mb-1 leading-none font-medium",e),...t})}function QF({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,eA.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function QB({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 jd(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 ju(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(eI.Button,{type:"button",size:"sm",onClick:()=>void f(e.path),disabled:l===e.path,children:[(0,eb.jsx)(Gl,{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)(eI.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)(y9,{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 QV=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function QH({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=js(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)(eI.Button,{type:"button",variant:"ghost",size:"icon","aria-label":"关闭设置",onClick:c,className:"shrink-0",children:(0,eb.jsx)(fb.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:QV.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,eA.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)(gL,{value:""===n?jo:n,onValueChange:e=>i?.(e===jo?"":e),children:[(0,eb.jsx)(xx,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(xZ,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(w8,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(w7,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(w9,{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)(QB,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(QD,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(ji,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function QU({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 sI(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)(QH,{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}let Qq=[{value:"reclaude",label:"reclaude(RC)"},{value:"claude-code",label:"Claude Code(CC)"}];function QW({open:e,onOpenChange:t,ownerMachineId:n,onEnterConversation:r}){let[a,i]=ew.useState([]),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState("reclaude"),[f,h]=ew.useState(""),[m,p]=ew.useState(!1),[g,x]=ew.useState("");ew.useEffect(()=>{if(!e)return;c(""),u("reclaude"),h(""),x("");let t=!0;return l(!0),async function(){let e=await sC(n);t&&(i(e),l(!1))}(),()=>{t=!1}},[e,n]);let v=ew.useMemo(()=>a.find(e=>e.sessionId===s),[a,s]);async function b(){if(v&&!m){p(!0),x("");try{let e=await sM({sessionId:v.sessionId,cwd:v.cwd,title:v.title,engine:d,ccModel:f,projectId:""},n);t(!1),r?.(e.conversation.id,n)}catch(e){x(e instanceof Error?e.message:"导入失败,请稍后重试。")}finally{p(!1)}}}return(0,eb.jsx)(dE,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fw,{className:"flex max-h-[85vh] max-w-xl flex-col gap-4",children:[(0,eb.jsxs)(fj,{children:[(0,eb.jsx)(fN,{children:"导入 Claude 会话"}),(0,eb.jsx)(fS,{children:"从本机已有的 Claude Code 会话创建对话。继续对话将接续原会话的上下文。"})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden",children:o?(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),"正在扫描本机 Claude 会话…"]}):0===a.length?(0,eb.jsx)("p",{className:"py-10 text-center text-sm text-muted-foreground",children:"未发现本机 Claude 会话"}):(0,eb.jsx)("div",{className:"space-y-1",children:a.map(e=>{let t=e.sessionId===s,n=function(e){let t=Date.parse(e);if(!Number.isFinite(t))return"";let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<60)return"刚刚";let r=Math.floor(n/60);if(r<60)return`${r} 分钟前`;let a=Math.floor(r/60);if(a<24)return`${a} 小时前`;let i=Math.floor(a/24);return 1===i?"昨天":i<7?`${i} 天前`:new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric"}).format(t)}(e.lastActivityAt);return(0,eb.jsxs)("button",{type:"button",onClick:()=>c(e.sessionId),className:(0,eA.cn)("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",t?"border-primary bg-primary/5":"border-border hover:bg-muted/60"),children:[(0,eb.jsx)("div",{className:"truncate text-sm font-semibold text-foreground",children:e.title||"未命名会话"}),(0,eb.jsxs)("div",{className:"mt-0.5 flex items-center gap-1 text-xs text-muted-foreground",children:[(0,eb.jsx)(bn,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"truncate",children:e.cwd})]}),(0,eb.jsxs)("div",{className:"mt-1 flex items-center gap-2 text-[11px] text-muted-foreground/80",children:[n?(0,eb.jsx)("span",{children:n}):null,n?(0,eb.jsx)("span",{children:"·"}):null,(0,eb.jsxs)("span",{children:[e.messageCount," 条消息"]})]})]},e.sessionId)})})}),v?(0,eb.jsxs)("div",{className:"grid gap-3 border-t pt-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.jsxs)(gL,{value:d,onValueChange:e=>u(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xy,{children:Qq.map(e=>(0,eb.jsx)(xw,{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:"CC 模型"}),(0,eb.jsxs)(gL,{value:""===f?jo:f,onValueChange:e=>h(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"其余设置(工作目录等)将按所选会话自动导入。"})]}):null,g?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:g}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:m,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"button",onClick:()=>void b(),disabled:!v||m,children:m?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),"导入中…"]}):"导入并打开"})]})]})})}function QK(e){return!e||"local"===e}async function QG(e,t){return QJ(await QQ(t,`/${encodeURIComponent(e)}`),t)}async function QX(e,t){return QJ(await QQ(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(uK),edges:e.edges.map(uG)})}),t)}async function QY(e,t,n){return QJ(await QQ(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(uK),edges:t.edges.map(uG),nodeIds:t.nodeIds})}),n)}async function QZ(e,t){return QJ(await QQ(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function QJ(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=QK(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((0,eT.localAPIURL)(QK(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 Q0=(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"}]]),Q1=(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"}]]),Q2=(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"}]]),Q5=(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"}]]),Q4=(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"}]]),Q3=(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"}]]),Q6={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function Q8(e,t,n){return Math.min(Math.max(e,t),n)}function Q7({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...Q6,...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=Q8(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=Q8((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=Q8(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,eA.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,eA.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,eA.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,eA.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,eA.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,eA.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 Q9="/themes/jelly/bg1.png",eee="/themes/jelly/bg2.png",eet="/themes/jelly/bg3.png",een="/themes/jelly/bg4.png";function eer({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 eea({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let eei={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:"主题"},eeo={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:"用量与账单"};eei.local,eei.direct,eei.online,eei.p2p,eei.online,eei.direct,eei.sleeping,eei.cpu,eei.memory,eei.activeRuns;function eel(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function ees({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)(w_,{className:"min-h-0 flex-1",children:e})})}function eec(e){return Math.max(0,...e.map(e=>e.y+e.h))}function eed(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 eeu(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 eef(e,t,n,r,a){for(let i=0;i<eec(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(!eed(l,e))return l}return{id:t,kind:n,x:0,y:eec(e)+2,w:r,h:a}}function eeh(e){return{...e.defaultConfig}}function eem(e){return e.payloads?.[Xe]}function eep({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vy,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vj,{className:"max-h-[420px]",children:[(0,eb.jsx)(vk,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vN,{heading:a,children:t.map(e=>(0,eb.jsxs)(vS,{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)(vC,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function eeg({open:e,dragMode:t,label:n="页面卡片操作",onOpenChange:r,onAdd:a,onDragModeChange:i}){let o=[{key:"add",label:"添加卡片",icon:(0,eb.jsx)(lY,{className:"size-4"}),onClick:a,pressed:!1},{key:"drag",label:"拖拽排版",icon:(0,eb.jsx)(lU,{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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,onClick:t.onClick,className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eex=(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 eev({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,eA.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=eeu({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});eed(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,eA.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)(eeb,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eey,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function eeb({onSettingsOpen:e,onCut:t,onCopy:n,onResizeStart:r}){return(0,eb.jsx)(l2,{"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)(l5,{children:[(0,eb.jsx)(l4,{type:"button","aria-label":"调整大小",onClick:r,children:(0,eb.jsx)(lK,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"卡片设置",onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),e()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(eex,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"复制",onClick:n,children:(0,eb.jsx)(lV,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"剪切",onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),t()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(lJ,{className:"size-4"})})]})})}function eey({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,eA.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),eed(d=eeu(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 eew({className:e,...t}){return(0,eb.jsx)(dD,{"data-slot":"sheet-overlay",className:(0,eA.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 eej({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dT,{children:[(0,eb.jsx)(eew,{}),(0,eb.jsxs)(dF,{"data-slot":"sheet-content","data-side":n,className:(0,eA.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)(dX,{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)(fb.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eek({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,eA.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeN({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"sheet-title",className:(0,eA.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eeS({className:e,...t}){return(0,eb.jsx)(dK,{"data-slot":"sheet-description",className:(0,eA.cn)("text-sm text-muted-foreground",e),...t})}function eeC({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)(dE,{open:e,onOpenChange:i,children:(0,eb.jsx)(eej,{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)(eeM,{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)(eek,{className:"border-b",children:[(0,eb.jsx)(eeN,{children:"卡片设置"}),(0,eb.jsxs)(eeS,{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)(ez,{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)(ez,{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)(ez,{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 eeM({width:e,height:t,className:n,children:r}){let[a,i]=XX(),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,eA.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 eeE({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),[P,O]=XX(),I=O.width>0?(d=O.width)<480?2:d<768?4:12:12,A=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<eel(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:eel(r),w:n,h:a})}return r}(x,I),z=O.width>0?(O.width-12*(I-1))/I:96,T=I<12?72:z,R=Math.max(a,eec(A)+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?eeh(t):void 0)}function $(e){v(t=>{let n=eeu(e);return eed(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=eef(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eeh(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]??eeh(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=I<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=[...A].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)(ees,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,eA.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,eA.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)(eeg,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eep,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeC,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:z,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(ees,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,eA.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(Xe)&&(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&&eem(n);if(!n||!a||!_.has(a.kind))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let i=P.current,o=i?.getBoundingClientRect();!function(e,t){let n=eem(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eeu({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eec(x),w:n.w,h:n.h}),i=t&&!eed(a,x)?a:eef(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&&z>0?Math.round((e.clientX-o.left-24)/(z+12)):0,y:o&&z>0?Math.round((e.clientY-o.top-24)/(z+12)):eec(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:A.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eev,{layout:t,layouts:A,cellSize:z,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),[Xe]:JSON.stringify(a)},payloads:{[Xe]: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=eef(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eeh(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)(eeg,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eep,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeC,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:z,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eeP({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 eeO({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,eA.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)(eeP,{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)(eeP,{parts:c})})]})}function eeI(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeA({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)(eeO,{value:eeI(t),minSize:n,maxSize:r,className:a})]})}function eez(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeT({className:e,value:t=0,...n}){let r=eez(t);return(0,eb.jsx)("div",{"data-slot":"progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,className:(0,eA.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 eeR({className:e,value:t=0,label:n,showValue:r=!0,...a}){let i=eez(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,eA.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 eeD=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function ee_({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)(eeL,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(Q7,{items:a,scrollCurrentIntoView:!1,className:(0,eA.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,eA.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function eeL({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,eA.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)(eeT,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,eA.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(ee$,{icon:(0,eb.jsx)(VC,{}),value:`${e.snapshots}`}),(0,eb.jsx)(ee$,{icon:(0,eb.jsx)(eeD,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function ee$({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 eeF=(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"}]]),eeB=(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"}]]),eeV=(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 eeH=ew;function eeU(){return(eeU=Object.assign.bind()).apply(null,arguments)}function eeq(e){return ew.createElement(Rp,eeU({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var eeW=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kw(e))return e;var a=kw(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)}},eeK=["children"],eeG=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function eeX(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,eeK);return ew.createElement(eeG.Provider,{value:n},t)}var eeY=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kS(r,t,0)};function eeZ(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 eeJ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eeZ(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)):eeZ(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var eeQ=j7([OQ,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),ee0=j7([eeQ],e=>null==e?void 0:e.maxBarSize),ee1=j7([CC,OQ,YM,YE,(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)),ee2=j7([ee1,e=>e.rootProps.barSize,(e,t)=>{var n=CC(e),r=YM(e,t),a=YE(e,t);if(null!=r&&null!=a)return"horizontal"===n?Au(e,"xAxis",r):Au(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Mh),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:eeY(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eeY(t,n,e.barSize)}))]}),ee5=(e,t,n)=>{var r,a,i=CC(e),o=YM(e,t),l=YE(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=Ax(e,"xAxis",o,n),a=Ag(e,"xAxis",o,n)):(r=Ax(e,"yAxis",l,n),a=Ag(e,"yAxis",l,n)),kK(r,a)},ee4=j7([ee2,CV,e=>e.rootProps.barGap,CH,(e,t,n)=>{var r,a,i,o,l=eeQ(e,t);if(null==l)return 0;var s=YM(e,t),c=YE(e,t);if(null==s||null==c)return 0;var d=CC(e),u=CV(e),{maxBarSize:f}=l;return"horizontal"===d?(i=Ax(e,"xAxis",s,n),o=Ag(e,"xAxis",s,n)):(i=Ax(e,"yAxis",c,n),o=Ag(e,"yAxis",c,n)),null!=(r=null!=(a=kK(i,o,!0))?a:null==f?u:f)?r:0},ee5,ee0],(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=kS(e,n,0,!0),c=[];if(kz(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=kS(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=kz(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=>eeJ(eeJ({},e),{},{position:eeJ(eeJ({},e.position),{},{offset:e.position.offset-a/2})}))),l}),ee3=j7([ee4,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}}),ee6=j7([(e,t,n)=>{var r=CC(e),a=YM(e,t),i=YE(e,t);if(null!=a&&null!=i)return"horizontal"===r?Im(e,"yAxis",i,n):Im(e,"xAxis",a,n)},eeQ],(e,t)=>{var n=Mu(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)}}}),ee8=j7([k6,k7,(e,t,n)=>{var r=YM(e,t);if(null!=r)return Ax(e,"xAxis",r,n)},(e,t,n)=>{var r=YE(e,t);if(null!=r)return Ax(e,"yAxis",r,n)},(e,t,n)=>{var r=YM(e,t);if(null!=r)return Ag(e,"xAxis",r,n)},(e,t,n)=>{var r=YE(e,t);if(null!=r)return Ag(e,"yAxis",r,n)},ee3,CC,kr,ee5,ee6,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||!kw(t[0])||!kw(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(!kw(e[0])||e[0]<n)&&(a[0]=n),(!kw(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=k_(e,n))||(j=[b,j]);var w=eeW(r,0)(j[1],f);if("horizontal"===t){var j,k,N,S,C,M,E,P=s.scale.map(j[0]),O=s.scale.map(j[1]);if(null==P||null==O)return null;k=kU({axis:l,ticks:c,bandSize:o,offset:i.offset,entry:e,index:f}),N=null!=(E=null!=O?O:P)?E:void 0,S=i.size;var I=P-O;if(C=kb(I)?0:I,M={x:k,y:h.top,width:S,height:h.height},Math.abs(w)>0&&Math.abs(C)<Math.abs(w)){var A=kv(C||w)*(Math.abs(w)-Math.abs(C));N-=A,C+=A}}else{var z=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==z||null==T)return null;if(k=z,N=kU({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-z,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=kv(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?etm(etm({},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})}}),ee7=(e,t)=>t,ee9=(e,t,n)=>n,ete=j7([ee7,OQ,ee9],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),ett=j7([ete],e=>e.map(e=>e.id)),etn=j7([e=>e,ee7,ee9],(e,t,n)=>{var r=ett(e,t,n),a=[];return r.forEach(t=>{var r=ee8(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}),etr=["index"];function eta(){return(eta=Object.assign.bind()).apply(null,arguments)}var eti=(0,ew.createContext)(void 0),eto=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),etl=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,etr),r=(e=>{var t=(0,ew.useContext)(eti);if(null!=t){var{stackId:n}=t;return"url(#".concat(eto(n,e),")")}})(t);return ew.createElement(AZ,eta({className:"recharts-bar-stack-layer",clipPath:r},n))},ets=["onMouseEnter","onMouseLeave","onClick"],etc=["value","background","tooltipPosition"],etd=["id"],etu=["onMouseEnter","onClick","onMouseLeave"];function etf(){return(etf=Object.assign.bind()).apply(null,arguments)}function eth(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 etm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eth(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)):eth(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etp(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 etg=eeH.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:kI,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:kX(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return eeH.createElement(Dd,{tooltipEntrySettings:d})});function etx(e){var t,n=No(_a),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etp(o,ets),u=Dl(l,a,o.id),f=Ds(s),h=Dc(c,a,o.id);if(!i||null==r)return null;var m=AK(i);return eeH.createElement(_G,{zIndex:(t=C1.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kz(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etp(e,etc);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=etm(etm(etm(etm(etm({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),zv(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return eeH.createElement(eeq,etf({key:"background-bar-".concat(t)},x))}))}function etv(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 etm(etm({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return eeH.createElement(Ls,{value:t?a:void 0},n)}function etb(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=No(_a),c=No(_o),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,eeH.useState)(!1),[h,m]=(0,eeH.useState)(!1);(0,eeH.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,eeH.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=eeH.createElement(eeq,etf({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?eeH.createElement(_G,{zIndex:C1.activeBar},eeH.createElement(etl,{index:i.originalDataIndex},v)):v}function ety(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return eeH.createElement(eeq,etf({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function etw(e){var t,{data:n,props:r}=e,a=null!=(t=AW(r))?t:{},{id:i}=a,o=etp(a,etd),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etp(r,etu),m=Dl(d,s,i),p=Ds(f),g=Dc(u,s,i);return n?eeH.createElement(eeH.Fragment,null,n.map((e,t)=>eeH.createElement(etl,etf({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"},zv(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?eeH.createElement(etb,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):eeH.createElement(ety,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etj(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=TP(t,"recharts-bar-"),[h,m]=(0,eeH.useState)(!1),p=(0,eeH.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,eeH.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return eeH.createElement(etv,{showLabels:!h,rects:r},eeH.createElement(TE,{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 etm(etm({},t),{},{x:kM(r.x,t.x,e),y:kM(r.y,t.y,e),width:kM(r.width,t.width,e),height:kM(r.height,t.height,e)});if("horizontal"===a){var i=kM(0,t.height,e),o=kM(t.stackedBarStart,t.y,e);return etm(etm({},t),{},{y:o,height:i})}var l=kM(0,t.width,e),s=kM(t.stackedBarStart,t.x,e);return etm(etm({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:eeH.createElement(AZ,null,eeH.createElement(etw,{props:t,data:i}))}),eeH.createElement(Lf,{label:t.label}),t.children)}function etk(e){var t=(0,eeH.useRef)(null);return eeH.createElement(etj,{previousRectanglesRef:t,props:e})}var etN=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:k_(e,t)}};class etS extends eeH.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,jU.clsx)("recharts-bar",r);return eeH.createElement(AZ,{className:c,id:s},o&&eeH.createElement("defs",null,eeH.createElement(YC,{clipPathId:s,xAxisId:a,yAxisId:i})),eeH.createElement(AZ,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},eeH.createElement(etx,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),eeH.createElement(etk,this.props)))}}var etC={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:C1.bar};function etM(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}=YS(n,r),h=No(CC),m=Ct(),p=Ta(e.children,z7),g=No(t=>ee8(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,eeH.createElement(eeX,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etN,errorBarOffset:t},eeH.createElement(etS,etf({},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})))}eeH.memo(function(e){var t,n,r=zK(e,etC),a=(t=r.stackId,null!=(n=(0,ew.useContext)(eti))?n.stackId:null!=t?kV(t):void 0),i=Ct();return eeH.createElement(_S,{id:r.id,type:"bar"},e=>eeH.createElement(eeH.Fragment,null,eeH.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kX(n,t),payload:e}]})(r)}),eeH.createElement(etg,{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}),eeH.createElement(_T,{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}),eeH.createElement(_G,{zIndex:r.zIndex},eeH.createElement(etM,etf({},r,{id:e})))))},FC).displayName="Bar";let etE=(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 etP({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)(eeO,{value:eeI(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 etO=ew,etI=(e,t,n,r)=>Ax(e,"xAxis",t,r),etA=(e,t,n,r)=>Ag(e,"xAxis",t,r),etz=(e,t,n,r)=>Ax(e,"yAxis",n,r),etT=(e,t,n,r)=>Ag(e,"yAxis",n,r),etR=j7([CC,etI,etz,etA,etT],(e,t,n,r,a)=>kL(e,"xAxis")?kK(t,r,!1):kK(n,a,!1));function etD(e){return"line"===e.type}var et_=j7([OQ,(e,t,n,r,a)=>a],(e,t)=>e.filter(etD).find(e=>e.id===t)),etL=j7([CC,etI,etz,etA,etT,et_,etR,kn],(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=k_(e,o);if("horizontal"===t){var d=kH({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=kH({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})}}),et$=["id"],etF=["type","layout","connectNulls","needClip","shape"],etB=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function etV(){return(etV=Object.assign.bind()).apply(null,arguments)}function etH(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 etU(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etH(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)):etH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etq(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 etW=etO.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:kI,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kX(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etO.createElement(Dd,{tooltipEntrySettings:u})}),etK=(e,t)=>"".concat(t,"px ").concat(e,"px");function etG(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=AW(etq(r,et$));return etO.createElement(Yy,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function etX(e){var{showLabels:t,children:n,points:r}=e,a=(0,etO.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 etU(etU({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etO.createElement(Ls,{value:t?a:void 0},n)}function etY(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=etU(etU({},AG(etq(i,etF))),{},{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 etO.createElement(etO.Fragment,null,(null==r?void 0:r.length)>1&&etO.createElement(Rp,etV({shapeType:"curve",option:d},u,{pathRef:n})),etO.createElement(etG,{points:r,clipPathId:t,props:i}))}function etZ(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=TP(o,"recharts-line-"),b=(0,etO.useRef)(v),[y,w]=(0,etO.useState)(!1),j=(0,etO.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etO.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,etO.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etO.createElement(etX,{points:o,showLabels:!y},n.children,etO.createElement(TE,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kM(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return etK(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))):etK(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 etU(etU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return f?etU(etU({},t),{},{x:kM(2*h,t.x,e),y:kM(m/2,t.y,e)}):etU(etU({},t),{},{x:t.x,y:t.y})});return a.current=p,etO.createElement(etY,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etO.createElement(etY,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etO.createElement(Lf,{label:n.label}))}function etJ(e){var{clipPathId:t,props:n}=e,r=(0,etO.useRef)(null),a=(0,etO.useRef)(0),i=(0,etO.useRef)(null);return etO.createElement(etZ,{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:k_(e.payload,t)}};class et0 extends etO.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,jU.clsx)("recharts-line",r),{r:m,strokeWidth:p}=YL(t),g=Ti(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etO.createElement(_G,{zIndex:f},etO.createElement(AZ,{className:h},u&&etO.createElement("defs",null,etO.createElement(YC,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etO.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etO.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etO.createElement(eeX,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:etQ,errorBarOffset:0},etO.createElement(etJ,{props:this.props,clipPathId:d}))),etO.createElement(YN,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var et1={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:C1.line,type:"linear"};function et2(e){var t=zK(e,et1),{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=etq(t,etB),{needClip:x}=YS(h,m),v=No(F7),b=No(CC),y=Ct(),w=No(e=>etL(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 etO.createElement(et0,etV({},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 et5=etO.memo(function(e){var t=zK(e,et1),n=Ct();return etO.createElement(_S,{id:t.id,type:"line"},e=>etO.createElement(etO.Fragment,null,etO.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kX(n,t),payload:e}]})(t)}),etO.createElement(etW,{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}),etO.createElement(_T,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etO.createElement(et2,etV({},t,{id:e}))))},FC);et5.displayName="Line";var et4=["axis"],et3=(0,ew.forwardRef)((e,t)=>ew.createElement(Y7,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:et4,tooltipPayloadSearcher:LA,categoricalChartProps:e,ref:t}));let et6={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},et8={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},et7={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)(og,{type:"target",position:D.Top,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{type:"source",position:D.Bottom,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{type:"target",position:D.Left,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{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,eA.cn)("size-2.5 shrink-0 rounded-full",et6[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]})}},et9={topologyEdge:function({id:e,sourceX:t,sourceY:n,targetX:r,targetY:a,sourcePosition:i,targetPosition:o,data:l}){let[s]=aC({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)(oD,{id:e,path:s,className:(0,eA.cn)("fill-none",et8[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 ene({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,eA.cn)("h-full min-h-0 overflow-hidden rounded-xl bg-muted/25",n),...r,children:(0,eb.jsx)(lu,{children:(0,eb.jsx)(lm,{nodes:a,edges:i,nodeTypes:et7,edgeTypes:et9,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)(lj,{gap:28,size:1,color:"var(--border)",className:"opacity-80"})})})})}function ent({nodes:e,links:t}){return(0,eb.jsx)(ene,{nodes:e,links:t})}function enn({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 enr({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eA.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,eA.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function ena({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)(Q7,{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 eni({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)(eno,{item:e})}}),[e]);return(0,eb.jsx)(Q7,{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 eno({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)(eeT,{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)(eeT,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function enl({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)(ens,{worker:e,divided:t>0},e.id))})}function ens({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eA.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)(enc,{label:"CPU",value:e.cpu}),(0,eb.jsx)(enc,{label:"MEM",value:e.memory})]})]})}function enc({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeR,{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 end({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)(Q7,{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 enu({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)(enf,{machine:e,divided:t>0},e.id))})}function enf({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eA.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)(enm,{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)(enh,{icon:(0,eb.jsx)(uC,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(eeF,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(uM,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(eeB,{}),label:"NET",value:e.network})]})]})}function enh({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)(eeT,{value:n,className:"h-1.5"})]})}function enm({status:e}){return(0,eb.jsx)("span",{className:(0,eA.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enp({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)(Q7,{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 eng({config:e,data:t}){return(0,eb.jsx)(Vo,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Ze,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZR,{vertical:!1}),(0,eb.jsx)(ZZ,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(BY,{content:(0,eb.jsx)(Vs,{indicator:"line"})}),(0,eb.jsx)(Y4,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(Y4,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(Y4,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enx({services:e}){let[t,n]=XX(),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)(env,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function env({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,eA.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,eA.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,eA.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 enb=[{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 eny(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:[]}}}enb.push(eny("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),eny("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),eny("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),eny("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),eny("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let enw=enb.filter(e=>"idle"!==e.status),enj=enb.filter(e=>"idle"===e.status);function enk(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function enN(e,t){return(0,eb.jsx)("section",{className:(0,eA.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:eer({image:t,opacity:.88,blur:"0px"}),children:e})}let enS=[{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*enj.length)+1)}];function enC({open:e,title:t,description:n,eyebrow:r,panels:a,defaultPanelId:i="overview",onOpenChange:o}){let l=sv(),[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)(dE,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fw,{hideClose:!0,className:(0,eA.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)(fN,{className:"sr-only",children:t}),(0,eb.jsxs)(fS,{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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"关闭",onClick:()=>o(!1),children:(0,eb.jsx)(fb.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,eA.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)(Bm,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(w_,{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)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"space-y-1 p-2",children:a.map(e=>(0,eb.jsxs)(eI.Button,{"data-slot":"resource-management-dialog-nav-item",type:"button",variant:"ghost",className:(0,eA.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)(Bm,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(w_,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enM({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)(uz,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("活跃画布","画布列表"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"当前正在编辑的画布数量",value:String(enw.length)}),Q9)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(VC,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("运行节点","画布节点"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),eee)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(jF,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("未保存","画布保存状态"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"等待写入的画布变更",value:"4"}),eet)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Ga,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("快照","画布快照"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"可回退的历史存档",value:"46"}),een)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uz,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enk("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(enn,{title:t.title,count:enw.length}),(0,eb.jsx)(ee_,{canvases:enw,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(m4,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enj.length)+1)},defaultConfig:enk("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(enn,{title:t.title,count:enj.length}),(0,eb.jsx)(ee_,{canvases:enj,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeE,{boardId:"canvas-library",definitions:i,initialLayouts:enS,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enP,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function enE({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 enP({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(enC,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VM,{}),content:(0,eb.jsx)(enO,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(Q0,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enA,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(Q3,{}),content:(0,eb.jsx)(enA,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(m4,{}),content:(0,eb.jsx)(enA,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(Q4,{}),content:(0,eb.jsx)(enA,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gl,{}),content:(0,eb.jsx)(enA,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Ga,{}),content:(0,eb.jsx)(enA,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(Q2,{}),content:(0,eb.jsx)(enA,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(Q5,{}),content:(0,eb.jsx)(enA,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enO({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)(enI,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enI,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enI,{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)(enE,{icon:(0,eb.jsx)(VC,{}),value:e.runtime})]}),(0,eb.jsx)(Q7,{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 enI({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 enA({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,eA.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(Q1,{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 enz({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vy,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vj,{children:[(0,eb.jsx)(vk,{children:"没有匹配节点。"}),(0,eb.jsx)(vN,{heading:"可用节点",children:uB.map(e=>(0,eb.jsxs)(vS,{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)(vC,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enT({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 uU(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,uB.find(e=>e.id===n)?.size??uD({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:u$(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:u_(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 fr(e):await fe(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{hH.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 hH.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uJ({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),hH.success("文件已保存")}catch(e){throw hH.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?.[G7]:void 0;if(a)return a;let i=e.dataTransfer.getData(G7);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]),P=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]),O=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)(JV,{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}),I=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=[]:uU(e.id)&&(r.tab=uW(e.id,`${t}-tab`)),{id:t,type:"blank",position:u$(n,e.size),data:r,width:e.size.width,height:e.size.height,style:u_(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]),A=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=P(c.id,e.clientX,n.length);C(c.id,r,s),i(void 0);return}let d=a?a.payloads?.[G8]: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:u$(n,r),style:e.style??u_(r),selected:!1,data:{...e.data??{},resizing:!1}}}({source:d.node,nodeId:u,center:o})]),i(u)},[n,E,S,p,P,C,r,i]),z=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[G8,G7].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&&uU(n.kind))return n;let r=t.kind;if(uU(r))return uW(r,e.id)}(e=uK(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[G8]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[G8]:u.id},s&&(c[G7]=s,d[G7]=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?uq(l.kind):(0,eb.jsx)(uk,{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:I,filePickerDialog:(0,eb.jsx)(XG,{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:z,handleCanvasDrop:A,handleNodeCanvasConnect:R,handleNodeCanvasEdgeAction:D,handleNodeCanvasNodeAction:_,renderedCanvasNodes:O}}({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)(sx,{"aria-label":"新建画布",className:"h-full min-h-0 rounded-none border-0",viewportClassName:"h-full",nodes:w,edges:t,nodeTypes:uT,edgeTypes:uR,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)(enz,{open:u,onOpenChange:h,onAdd:f}),y,(0,eb.jsx)(hX,{position:"top-right"})]})}async function enR(){return(await enU("/api/local/projects")).projects??[]}async function enD(e){return enU(`/api/local/projects/${encodeURIComponent(e)}`)}async function en_(e){return enU("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function enL(e,t){return enU(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function en$(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function enF(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function enB(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function enV(e){return((await enU(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>s6(e,void 0))}async function enH(e,t){return s6((await enU("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function enU(e,t){let n=await fetch((0,eT.localAPIURL)(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}xS.length;let enq=(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"}]]),enW=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],enK=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],enG=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],enX=[{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)强制上卡。"}],enY=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enZ=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enJ=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function enQ({onCreated:e,onCancel:t}){let{machines:n}=xC(),{models:r}=xY(),[a,i]=ew.useState("local"),{engines:o}=jv(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([]),[P,O]=ew.useState(""),[I,A]=ew.useState(""),[z,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=js(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:en0(P,1,16),maxSpawnDepth:en0(I,1,5),hitlStrictness:z,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await en_({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:en0(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,z,x,X,M,P,I,e,a,p,B,H,w,b]),Q=c===enW.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:enW.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,eA.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)(m1,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,eA.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<enW.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,eA.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)(en5,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(en2,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gL,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xy,{children:enK.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xw,{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)(en2,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gL,{value:""===h?jo:h,onValueChange:e=>m(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(en2,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gL,{value:p,onValueChange:g,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enG.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enG.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(ji,{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)(en2,{label:"工程名称(必填)",children:[(0,eb.jsx)(ez,{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)(en2,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(y9,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(w9,{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)(en2,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(ez,{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)(gL,{value:""===h?jo:h,onValueChange:e=>m(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(xZ,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(en2,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:16,value:P,onChange:e=>O(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(en2,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:5,value:I,onChange:e=>A(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(en2,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gL,{value:z,onValueChange:e=>T(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enX.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enX.find(e=>e.value===z)?.desc})]}),(0,eb.jsxs)(en2,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gL,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enY.map(e=>(0,eb.jsx)(xw,{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===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)(hI,{}),"危险反思智能体"]}),(0,eb.jsx)(v1,{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)(en2,{label:"触发档位(severity)",children:(0,eb.jsxs)(gL,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enZ.map(e=>(0,eb.jsx)(xw,{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)(uj,{}),"评审智能体"]}),(0,eb.jsx)(v1,{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)(en2,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gL,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enJ.map(e=>(0,eb.jsx)(xw,{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)(en1,{icon:(0,eb.jsx)(m4,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(eO,{}),label:"运行环境",value:Y}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(uC,{}),label:"运行引擎",value:enK.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(m0,{}),label:"模型",value:X?jc(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(enq,{}),label:"权限 / HITL",value:`${enG.find(e=>e.value===p)?.label??p} \xb7 ${enX.find(e=>e.value===z)?.label??z}`}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(Q2,{}),label:"编排上限",value:`同伴 ${P.trim()||`默认8`} \xb7 深度 ${I.trim()||`默认3`}`}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(G_,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(m4,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(uj,{}),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)(eI.Button,{type:"button",variant:"ghost",disabled:q,onClick:()=>{0===c?t?.():d(e=>Math.max(0,e-1))},children:[(0,eb.jsx)(m2,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(eI.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(m3,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(eI.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(enW.length-1,e+1)),children:["下一步",(0,eb.jsx)(m5,{className:"size-4"})]})]})})]})}function en0(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 en1({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 en2({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 en5({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)(en2,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gL,{value:e,onValueChange:t,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xy,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xw,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let en4=[{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)强制上卡。"}],en3=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],en6=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],en8=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],en7=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],en9=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],ere=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eex,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(m0,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(Q3,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uA,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(bn,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(GF,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(Q3,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(Q2,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(enq,{})}];function ert({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 enD(e);n(t),s(era(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=era(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?ero(l):void 0;async function y(){if(!l||!t)return;let r=ero(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await enL(e,(a=l,t={maxPeers:eri(a.maxPeers,1,16),maxSpawnDepth:eri(a.maxSpawnDepth,1,5),budgetSoftPct:eri(a.budgetSoftPct,1,100),budgetHardPct:eri(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=js(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:eri(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(era(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)(hI,{className:"size-8 text-hot-pink"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:i}),(0,eb.jsx)(eI.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)(eex,{}),"工程设置"]}),(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:ere.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,eA.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)(erl,{icon:(0,eb.jsx)(eex,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(ers,{label:"名称",children:(0,eb.jsx)(ez,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(ers,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(y9,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(m0,{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)(hI,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),js(l.engine)?(0,eb.jsx)(ers,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(m0,{className:"size-4"}),children:(0,eb.jsxs)(gL,{value:""===l.ccModel?jo:l.ccModel,onValueChange:e=>w({ccModel:e===jo?"":e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(xZ,{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)(ern,{}),(0,eb.jsx)(w8,{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)(ern,{}),(0,eb.jsx)(w7,{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)(ern,{}),(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)(hI,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(w9,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:js(l.engine)?e.slice(-1):e})}),js(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)(ern,{}),(0,eb.jsx)(ji,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:js(l.engine),hint:js(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(Q2,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(ers,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(ers,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(G_,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(ers,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(ez,{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)(ers,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(ez,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(ers,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(ez,{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)(erl,{icon:(0,eb.jsx)(enq,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(ers,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gL,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en4.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en4.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(ers,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gL,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en3.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en3.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(ers,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(ez,{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)(hI,{}),"危险反思智能体"]}),(0,eb.jsx)(v1,{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)(ers,{label:"触发档位(severity)",children:(0,eb.jsxs)(gL,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en6.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ers,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(ez,{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)(uj,{}),"评审智能体"]}),(0,eb.jsx)(v1,{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)(ers,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gL,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en8.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ers,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(ez,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(Q3,{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)(hI,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(ers,{label:"引擎(engine)",children:(0,eb.jsxs)(gL,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en7.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(ers,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gL,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en9.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en9.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,eA.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)(m1,{}),"已保存"]}):null,v?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(era(t)),children:"撤销"}):null,(0,eb.jsxs)(eI.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)(m1,{className:"size-4"}),"保存"]})]})})]}):null}function ern(){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)(hI,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function err(e){return e&&e>0?String(e):""}function era(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:err(t.maxPeers),maxSpawnDepth:err(t.maxSpawnDepth),budgetTokens:err(e.budgetTokens),budgetSoftPct:err(t.budgetSoftPct),budgetHardPct:err(t.budgetHardPct),approvalParkTtlSeconds:err(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 eri(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 ero(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 erl({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 ers({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 erc=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function erd({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,eA.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)(xp,{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 eru({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,eA.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function erf(){return{kind:"human",id:"local",displayName:"我"}}async function erh(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erM(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function erm(e){return erM(`/api/local/issues/${encodeURIComponent(e)}`)}async function erp(e,t){return erM(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function erg(e,t){return erM(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erx(e){await erM(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erv(e,t){return erM(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function erb(e,t,n=erf()){return erM(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function ery(e){return(await erM(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function erw(e){return(await erM(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erj(e,t,n,r){return erM(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erk(e){await erM(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erN(e){return(await erM(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erS(e,t,n,r){await erM(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erC extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erM(e,t){let n=await fetch((0,eT.localAPIURL)(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw new erC("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let erE=[{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"}],erP={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erO=[...erE,erP],erI={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erA=["task","feature","bug","chore","question"],erz={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"},erT={low:"低",normal:"普通",high:"高",urgent:"紧急"},erR=["low","normal","high","urgent"],erD={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"},er_={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},erL=["depends_on","blocks","parent","relates_to"],er$={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"}},erF={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function erB(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 erV={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},erH={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"},erU=(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"}]]),erq=(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 erW({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([erm(e),ery(e).catch(()=>[]),erw(t).catch(()=>[]),erh(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hH.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 erw(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erj(t,o.id,e,n),await k()}catch(e){hH.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erk(e),await k()}catch(e){hH.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await erg(o.id,e);l(t),a?.(t);let n=await ery(o.id).catch(()=>s);c(n)}catch(e){hH.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erv(o.id,erf());l(e),a?.(e);let t=await ery(o.id).catch(()=>s);c(t),hH.success("认领成功")}catch(e){e instanceof erC&&409===e.status?(hH.error("认领失败:该 issue 已被他人认领"),j()):hH.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await erb(o.id,v.trim()),b("");let e=await ery(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hH.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function P(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erx(o.id),i?.(o.id),r()}catch(e){hH.error(e instanceof Error?e.message:"删除失败")}finally{x(!1)}}}let O=o?.progress??{percent:0,checklist:[]};function I(e){return 0===e.length?O.percent:Math.round(e.filter(e=>e.done).length/e.length*100)}async function A(e){let t=O.checklist.map((t,n)=>n===e?{...t,done:!t.done}:t);await C({progress:{percent:I(t),checklist:t}})}async function z(e){let t=e.trim();if(!t)return;let n=[...O.checklist,{text:t,done:!1}];await C({progress:{percent:I(n),checklist:n}})}async function T(e){let t=O.checklist.filter((t,n)=>n!==e);await C({progress:{percent:I(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)(dE,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsxs)(fw,{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)(fN,{className:"sr-only",children:o?`#${o.number} ${o.title}`:"issue 详情"}),(0,eb.jsx)(fS,{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)(erK,{label:"标题",children:(0,eb.jsx)(ez,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(erK,{label:"描述",children:(0,eb.jsx)(y9,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(erK,{label:`进度 \xb7 ${O.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeT,{value:O.percent,className:"h-2"}),(0,eb.jsx)("div",{className:"flex flex-col gap-1.5",children:O.checklist.map((e,t)=>(0,eb.jsxs)("div",{className:"group flex items-center gap-2 text-sm",children:[(0,eb.jsx)(xH,{checked:e.done,onCheckedChange:()=>void A(t)}),(0,eb.jsx)("span",{className:(0,eA.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)(fb.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(erG,{onAdd:e=>void z(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)(erY,{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:erF[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:erB(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)(y9,{value:v,onChange:e=>b(e.target.value),rows:2,placeholder:"写评论…",className:"min-h-9"}),(0,eb.jsx)(eI.Button,{size:"sm",disabled:!v.trim()||g,onClick:()=>void E(),children:(0,eb.jsx)(erq,{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)(erK,{label:"状态",children:(0,eb.jsx)(erd,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erO.map(e=>(0,eb.jsx)(eru,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(erK,{label:"优先级",children:(0,eb.jsx)(erd,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erR.map(e=>(0,eb.jsx)(eru,{value:e,children:erT[e]},e))})}),(0,eb.jsx)(erK,{label:"类型",children:(0,eb.jsx)(erd,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erA.map(e=>(0,eb.jsx)(eru,{value:e,children:erI[e]},e))})}),(0,eb.jsx)(erK,{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)(erY,{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)(eI.Button,{variant:"outline",size:"sm",className:"w-full",disabled:g,onClick:()=>void M(),children:[(0,eb.jsx)(lU,{className:"size-4"})," 认领"]})}),(0,eb.jsx)(erK,{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)(fb.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)(ez,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})]})}),(0,eb.jsx)(erK,{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=er$[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)(erU,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",er_[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)(fb.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(erX,{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:["创建于 ",erB(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",erB(o.updatedAt)]})]}),(0,eb.jsxs)(eI.Button,{variant:"ghost",size:"sm",className:"text-hot-pink hover:bg-hot-pink/10 hover:text-hot-pink",disabled:g,onClick:()=>void P(),children:[(0,eb.jsx)(bc,{className:"size-4"})," 删除 issue"]})]})]})]})]})})}function erK({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 erG({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)(ez,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})}function erX({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)(erd,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:erL.map(e=>(0,eb.jsx)(eru,{value:e,children:er_[e]},e))}),(0,eb.jsx)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"sm",onClick:()=>{o(!1),s("")},children:"取消"})})]}):(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",className:"w-full",disabled:r,onClick:()=>o(!0),children:[(0,eb.jsx)(lY,{className:"size-4"})," 添加关联"]})}function erY({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,eA.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)(uj,{className:n}):(0,eb.jsx)(VP,{className:n})})}let erZ=["backlog","todo","in_progress","blocked","review","done","cancelled"],erJ={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=erZ.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)(Q2,{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:er$[e].stroke}}),er_[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)(Q2,{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:er$[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=er0(t,n),a=er0(n,t),i=er$[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:er_[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=erJ[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,eA.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,eA.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,erO.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 er0(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 er1="application/x-vantaloom-issue";function er2({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([erh(e),erw(e).catch(()=>[]),erN(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[...erE,erP])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 erg(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(er1)||e.dataTransfer.getData("text/plain");r&&M(r,t,n)}async function P(e,t,n){g(null);try{await erS(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erC&&404===e.status||g(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),S({silent:!0})}let O=w?[...erE,erP]:erE;return(0,eb.jsxs)(ees,{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)(erc,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(Q2,{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,eA.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)(erc,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,eA.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)(Q2,{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)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void S(),disabled:u,children:[(0,eb.jsx)(bs,{className:(0,eA.cn)("size-4",u&&"animate-spin")}),"刷新"]})]})]}),i.length>0?(0,eb.jsx)(er5,{approvals:i,onResolve:P}):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)(eI.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,eA.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:O.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,eA.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,eA.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)(lY,{className:"size-4"})})]}),(0,eb.jsxs)("div",{className:(0,eA.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)(er6,{onCancel:()=>N(null),onCreate:async r=>{try{let a=await erp(e,{...r}),i="backlog"===t.status?a:await erg(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)(er3,{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)(erW,{issueId:b,projectId:e,open:null!==b,onClose:()=>y(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),erw(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))})]})}function er5({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)(enq,{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)(er4,{approval:e,onResolve:t},e.approvalId))})]})}function er4({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,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erH[e.classification]),children:erV[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)(jC,{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:erB(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:null!==n,onClick:()=>{i(!1),l("")},children:"取消"}),(0,eb.jsxs)(eI.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)(fb.XIcon,{className:"size-4"}),"确认拒绝"]})]})]}):(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",disabled:null!==n,onClick:()=>i(!0),children:[(0,eb.jsx)(fb.XIcon,{className:"size-4"}),"拒绝"]}),(0,eb.jsxs)(eI.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)(m1,{className:"size-4"}),"通过"]})]})]})}function er3({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(er1,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,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erz[e.type]),children:erI[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erD[e.priority]),children:erT[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)(erY,{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 er6({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)(ez,{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)(erd,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erA.map(e=>(0,eb.jsx)(eru,{value:e,children:erI[e]},e))}),(0,eb.jsx)(erd,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erR.map(e=>(0,eb.jsx)(eru,{value:e,children:erT[e]},e))})]}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",onClick:t,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",disabled:!n.trim()||s,children:s?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"新建"})]})]})}let er8=(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"}]]),er7=(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 er9({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([enF(e).catch(()=>void 0),enB(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 enD(e);if(!t)return;r(a);let o=await enV(e).catch(()=>[]);if(!t)return;c(o);let l=await erh(e).catch(()=>[]);if(!t)return;u(l);let s=await erN(e).catch(()=>[]);if(!t)return;let d=await en$(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 QG(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)(ees,{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)(uk,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(eae,{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)(eex,{}),"设置"]}):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)(ear,{icon:(0,eb.jsx)(uj,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(erc,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(G_,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(uk,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(eat,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(ean,{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)(eal,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eas,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function eae({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)(enq,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function eat({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)(eeV,{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 enL(e,{budgetTokens:n}),l=await en$(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)(eeV,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,eA.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,eA.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)(m1,{}),"保存"]}),(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)(fb.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)(H_,{}),"调整"]})]})})]})}function ean({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)(uj,{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,eA.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)(VC,{}),(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 ear({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,eA.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 eaa({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)(bs,{className:(0,eA.cn)(e&&"animate-spin")}),"刷新"]})}let eai=["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 eao(e,t){return"其他"===t?"bg-ash-gray":eai[e%eai.length]??"bg-ash-gray"}function eal({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)(er8,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(eaa,{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,eA.cn)("h-full",eao(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,eA.cn)("size-2.5 shrink-0 rounded-sm",eao(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 eas({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)(VC,{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)(eaa,{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,eA.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)(er7,{}):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 eac={delete:"Delete",empty:"Drop here",title:"Trash"};function ead({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eac,...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,eA.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,eA.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)(bc,{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)(fb.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)(bc,{className:"size-5"})})})}function eau({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,ix.createPortal)((0,eb.jsxs)("div",{className:(0,eA.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(ead,{active:!e&&void 0!==a,items:e?[]:n,className:(0,eA.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,eA.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)(X7,{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?.[G9],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[Xe],a&&i&&(i[G9]={...a,config:{...a.config}}),l&&i&&(i[Xe]={...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 eaf=(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"}]]),eah=(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"}]]),eam=(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"}]]),eap=(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"}]]),eag=(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"}]]),eax=(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"}]]),eav=(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"}]]),eab=(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"}]]),eay=(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"}]]),eaw=(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 eaj="Collapsible",[eak,eaN]=ci(eaj),[eaS,eaC]=eak(eaj),eaM=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=ch({prop:r,defaultProp:a??!1,onChange:o,caller:eaj});return(0,eb.jsx)(eaS,{scope:n,disabled:i,contentId:cu(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cx.div,{"data-state":eaz(s),"data-disabled":i?"":void 0,...l,ref:t})})});eaM.displayName=eaj;var eaE="CollapsibleTrigger",eaP=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eaC(eaE,n);return(0,eb.jsx)(cx.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":eaz(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:cl(e.onClick,a.onOpenToggle)})});eaP.displayName=eaE;var eaO="CollapsibleContent",eaI=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eaC(eaO,e.__scopeCollapsible);return(0,eb.jsx)(cR,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaA,{...r,ref:t,present:e})})});eaI.displayName=eaO;var eaA=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eaC(eaO,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,co.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)},[]),cs(()=>{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)(cx.div,{"data-state":eaz(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 eaz(e){return e?"open":"closed"}var eaT=e.i(91e3);let eaR={"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","search-settings":"settings","check-update":"settings",account:"settings"};function eaD({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=eaR[n]??(eaZ.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,eA.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,eA.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)(ea_,{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)(eaV,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eaX,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(ea5,{onItemSelect:i,onAccountSettings:g})]})}function ea_({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 enR();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)(ea0,{icon:eav,label:eeo.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)(ea1,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:eeo.projectEmpty}):g.map(c=>(0,eb.jsx)(eaL,{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 eaL({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 erN(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 enV(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)(eaM,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,eA.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)(eaP,{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)(xp,{className:(0,eA.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)(uk,{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)(ea2,{active:!0})]})]}),(0,eb.jsx)(eaI,{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)(ea$,{icon:(0,eb.jsx)(uk,{className:"size-4"}),label:eeo.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(ea$,{icon:(0,eb.jsx)(eah,{className:"size-4"}),label:eeo.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(ea$,{icon:(0,eb.jsx)(eex,{className:"size-4"}),label:eeo.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)(eaH,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eaK,{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:eeo.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)(lY,{className:"size-4 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:eeo.projectNewConversation})]})]})})})]})}function ea$({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 eaF="__all__",eaB={status:"all",location:eaF,sort:"recent"};function eaV({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 sP();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(eaB),m=ew.useMemo(()=>{let e=new Set;for(let t of s)e.add(t.ownerMachineId||sk);return Array.from(e)},[s]),p=ew.useCallback(e=>sN(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===eaF||(e.ownerMachineId||sk)===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!==eaB.status||f.location!==eaB.location||f.sort!==eaB.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)(eaH,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eaK,{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.jsxs)(yw,{children:[(0,eb.jsx)(yk,{asChild:!0,children:(0,eb.jsx)(ea0,{icon:tl,label:eeo.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsx)(yI,{className:"min-w-44",children:(0,eb.jsxs)(yA,{onSelect:()=>t({item:{id:"import-claude-session"}}),children:[(0,eb.jsx)(v3,{}),(0,eb.jsx)("span",{className:"flex-1",children:"导入 Claude 会话"})]})})]})}),(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)(eaq,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(ea1,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eaH({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=Hd(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,eA.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,eA.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)(eaH,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eaU={all:"全部",running:"运行中",idle:"空闲"};function eaq({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===eaF?"全部":a(e.location);return(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,eA.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)(Q3,{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)(y1,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(y4,{children:"筛选与排序"}),(0,eb.jsxs)(y0,{children:[(0,eb.jsxs)(y8,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eaU[e.status]})]}),(0,eb.jsx)(y7,{children:(0,eb.jsxs)(yG,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(y5,{value:"all",children:"全部"}),(0,eb.jsx)(y5,{value:"running",children:"运行中"}),(0,eb.jsx)(y5,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(y0,{children:[(0,eb.jsxs)(y8,{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)(y7,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(yG,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(y5,{value:eaF,children:"全部"}),r.map(e=>(0,eb.jsx)(y5,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(y3,{}),(0,eb.jsx)(y4,{children:"排序"}),(0,eb.jsxs)(yG,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(y5,{value:"recent",children:"最近活动"}),(0,eb.jsx)(y5,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y3,{}),(0,eb.jsx)(y2,{onSelect:()=>t(eaB),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eaW({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,eA.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 eaK({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)(eaW,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eaG,{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 eaG({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)(yA,{onSelect:()=>l(),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yA,{onSelect:()=>c(),children:[(0,eb.jsx)(VC,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yA,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bc,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,eA.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)(ea2,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{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)(lG,{className:"size-4"})})}),(0,eb.jsxs)(y1,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(y2,{onSelect:()=>l(),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(y2,{onSelect:()=>c(),children:[(0,eb.jsx)(VC,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(y2,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bc,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yw,{children:[(0,eb.jsx)(yk,{asChild:!0,children:g}),(0,eb.jsx)(yI,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(d6,{open:u,onOpenChange:f,children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:d}),(0,eb.jsxs)(uv,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eaX({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(w_,{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)(eaJ,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eaY,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eaY({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,eA.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)(ea2,{active:!0})]})}let eaZ=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uC,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(m0,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uj,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eay,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uC,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eex,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eax,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(jF,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(eag,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eah,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(Ux,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(GF,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(Q2,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(Q2,{})},{id:"search-settings",label:"搜索设置",icon:(0,eb.jsx)(xM,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(v3,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bs,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eaw,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jC,{})}]}];function eaJ({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eaZ.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)(eaM,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaP,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,eA.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)(xp,{className:(0,eA.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eaI,{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,eA.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)(ea2,{active:!0})]},e.id)})})]})}let ea0=ew.forwardRef(function({icon:e,label:t,onClick:n,...r},a){return(0,eb.jsxs)("button",{ref:a,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",...r,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 ea1(){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 ea2({active:e}){return(0,eb.jsx)("span",{className:(0,eA.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function ea5({onItemSelect:e,onAccountSettings:t}){let{user:n}=ti(),r=n?.name??eei.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{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)(m5,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(y1,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(y4,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(y2,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(y2,{disabled:!0,children:[(0,eb.jsx)(eaf,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(y2,{disabled:!0,children:[(0,eb.jsx)(Un,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Ga,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(ea3,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y3,{}),(0,eb.jsx)(ea6,{})]})]})]})})}let ea4=["light","dark","jelly"];function ea3(){let{resolvedTheme:e,setTheme:t}=(0,hA.useTheme)(),[n,r]=ew.useState(eaT.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaT.appearanceThemeStorageKey)??eaT.defaultAppearanceTheme;r(e),(0,eaT.applyAppearanceTheme)({theme:e})},[]);let a=n===eaT.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=ea4[(ea4.indexOf(a)+1)%ea4.length]??"light";function o(e){r(e),window.localStorage.setItem(eaT.appearanceThemeStorageKey,e),(0,eaT.applyAppearanceTheme)({theme:e})}let l="dark"===a?eap:eab;return(0,eb.jsxs)(y2,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(eaT.jellyAppearanceTheme);return}o(eaT.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:eei.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function ea6(){let{logout:e}=ti();return(0,eb.jsxs)(y2,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eam,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let ea8=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}),ea7=()=>{let e=ew.default.useContext(ea8);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function ea9(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function eie(){return eit(/^iPhone/)||eit(/^iPad/)||eit(/^Mac/)&&navigator.maxTouchPoints>1}function eit(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 ein="u">typeof window?ew.useLayoutEffect:ew.useEffect;function eir(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let eia="u">typeof document&&window.visualViewport;function eii(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function eio(e){for(eii(e)&&(e=e.parentElement);e&&!eii(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let eil=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eis=0;function eic(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function eid(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=eio(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 eiu(e){return e instanceof HTMLInputElement&&!eil.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eif(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eih=new WeakMap;function eim(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||eih.set(e,r)}let eip=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function eig(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(", ")[eip(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eip(t)?5:4]):null}function eix(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let eiv=[.32,.72,0,1],eib="vaul-dragging";function eiy(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 eiw({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=eiy(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=eiy(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 eij=()=>()=>{},eik=null,eiN=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=ea7(),c=eif(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dD,{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})});eiN.displayName="Drawer.Overlay";let eiS=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}=ea7(),[y,w]=ew.default.useState(!1),j=eif(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}=ea7(),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?eix(document.body,{background:"black"}):eij,eix(t,{transformOrigin:eip(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eiv.join(",")})`}));let n=eix(t,{borderRadius:"8px",overflow:"hidden",...eip(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(dF,{"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)}})});eiS.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}=ea7(),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 eiC=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:P=!1}){var O,I;let[A=!1,z]=eiw({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==(O=Z.current)?void 0:O.getBoundingClientRect().height)||0),Q=ew.default.useRef((null==(I=Z.current)?void 0:I.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]=eiw({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)),eip(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),eim(r.current,{transition:`transform 0.5s cubic-bezier(${eiv.join(",")})`,transform:eip(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eim(a.current,{transition:`opacity 0.5s cubic-bezier(${eiv.join(",")})`,opacity:"0"}):eim(a.current,{transition:`opacity 0.5s cubic-bezier(${eiv.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&&eim(a.current,{transition:`opacity 0.5s cubic-bezier(${eiv.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=eip(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]||eim(r.current,{transform:eip(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;ein(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eis&&eie()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=eir((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=eir(eic(document,"touchstart",e=>{((a=eio(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eic(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}),eic(document,"touchend",e=>{let t=e.target;eiu(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eic(document,"focus",e=>{let t=e.target;eiu(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",eia&&(eia.height<window.innerHeight?requestAnimationFrame(()=>{eid(t)}):eia.addEventListener("resize",()=>eid(t),{once:!0}))}))},!0),eic(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eis&&(null==o||o())}}},[t])}({isDisabled:!A||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(ea9()&&null===eik&&e&&!i){eik={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(ea9()&&null!==eik&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eik),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eik=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:A,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?eig(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(eib),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||z(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=eig(Z.current,w);eim(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${eiv.join(",")})`}),eim(F.current,{transition:`opacity 0.5s cubic-bezier(${eiv.join(",")})`,opacity:"1"}),l&&t&&t>0&&A&&eim(e,{borderRadius:"8px",overflow:"hidden",...eip(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(${eiv.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eiu(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(()=>(A&&(eim(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eih.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[A]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dE,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),z(e))},open:A},ew.default.createElement(ea8.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,eie()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eip(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eib),q.current=!1,_(!1),H.current=new Date;let r=eig(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-(eip(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-(eip(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(eib),q.current=!0,eim(Z.current,{transition:"none"}),eim(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eim(Z.current,{transform:eip(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),eim(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);eim(c,{borderRadius:`${t}px`,transform:eip(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eim(Z.current,{transform:eip(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:A,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;eim(Z.current,{transform:eip(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),eim(Z.current,{transition:`transform 0.5s cubic-bezier(${eiv.join(",")})`,transform:eip(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=eig(Z.current,w);eim(Z.current,{transition:"none",transform:eip(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eip(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eim(Z.current,{transition:`transform 0.5s cubic-bezier(${eiv.join(",")})`,transform:eip(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:P}},n))},eiM=function(e){let t=ea7(),{container:n=t.container,...r}=e;return ew.default.createElement(dT,{container:n,...r})};function eiE({className:e,...t}){return(0,eb.jsx)(eiN,{"data-slot":"drawer-overlay",className:(0,eA.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 eiP({className:e,children:t,...n}){return(0,eb.jsxs)(eiM,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiE,{}),(0,eb.jsxs)(eiS,{"data-slot":"drawer-content",className:(0,eA.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 eiO({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"drawer-title",className:(0,eA.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eiI({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)(eiA,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiC,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiP,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eiO,{className:"sr-only",children:"导航"}),(0,eb.jsx)(eaD,{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 eiA({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,eA.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)(s9,{})}),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 eiz=(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"}]]),eiT=[{id:"canvas",label:eeo.canvas,icon:(0,eb.jsx)(uk,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uj,{})},{id:"settings",label:eeo.settings,icon:(0,eb.jsx)(eex,{})}],eiR=[{id:"canvas",title:eeo.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:eeo.canvas,items:[{id:"open-recent-canvas",label:eeo.canvasRecent,icon:(0,eb.jsx)(uk,{})},{id:"new-canvas",label:eeo.canvasNew,icon:(0,eb.jsx)(lY,{})},{id:"all-canvases",label:eeo.canvasAll,icon:(0,eb.jsx)(uM,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:eeo.conversationRecent,icon:(0,eb.jsx)(eiz,{})},{id:"new-agent-conversation",label:eeo.conversationNew,icon:(0,eb.jsx)(uj,{})}]}]},{id:"settings",title:eeo.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eex,{})}]}]}],eiD=(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"}]]),ei_=(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"}]]),eiL=(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"}]]),ei$=(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 eiF(){let{user:e,machine:t,logout:n,unbind:r,refreshUser:a}=ti(),[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 eY("online");let e=eH();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 eJ(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)(Bm,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(j$,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(Qx,{}),(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)(Qx,{}),(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)(eI.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:b,disabled:i,children:[i?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bs,{}),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)(ez,{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)(eI.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)(m1,{})}),(0,eb.jsx)(eI.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>f(!1),disabled:p,"aria-label":"取消",children:(0,eb.jsx)(fb.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)(H_,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bm,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(eiL,{className:"size-3"}):(0,eb.jsx)(ei$,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(ei$,{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)(eiB,{}),(0,eb.jsx)(eiV,{}),(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)(d6,{children:[(0,eb.jsx)(d8,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(ei_,{}),"解除绑定"]})}),(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"确认解除设备绑定?"}),(0,eb.jsx)(uv,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{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)(Qx,{}),(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)(eI.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:j,children:[(0,eb.jsx)(eam,{}),"退出登录"]})]})]})]})})}):null}function eiB(){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 eQ(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)(eiD,{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)(ez,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(ez,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(ez,{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)(eI.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 eiV(){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 jh({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 jf();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)(uw,{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)(Qg,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(v1,{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 eiH=["PageUp","PageDown"],eiU=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],eiq={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eiW="Slider",[eiK,eiG,eiX]=hY(eiW),[eiY,eiZ]=ci(eiW,[eiX]),[eiJ,eiQ]=eiY(eiW),ei0=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]=ch({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=m6(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)(eiJ,{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)(eiK.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(eiK.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?ei5:ei4,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:cl(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=eiH.includes(e.key)||e.shiftKey&&eiU.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});ei0.displayName=eiW;var[ei1,ei2]=eiY(eiW,{startEdge:"left",endEdge:"right",size:"width",direction:1}),ei5=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,co.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=h1(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=eoi([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(ei1,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(ei3,{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=eiq[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),ei4=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,co.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=eoi([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(ei1,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(ei3,{"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=eiq[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),ei3=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=eiQ(eiW,n);return(0,eb.jsx)(cx.span,{...c,ref:t,onKeyDown:cl(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eiH.concat(eiU).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:cl(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:cl(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:cl(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),ei6="SliderTrack",ei8=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiQ(ei6,n);return(0,eb.jsx)(cx.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});ei8.displayName=ei6;var ei7="SliderRange",ei9=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eiQ(ei7,n),i=ei2(ei7,n),o=ew.useRef(null),l=(0,co.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>eoa(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cx.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});ei9.displayName=ei7;var eoe="SliderThumb",eot=ew.forwardRef((e,t)=>{let n=eiG(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,co.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(eon,{...e,ref:i,index:o})}),eon=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=eiQ(eoe,c),m=ei2(eoe,c),[p,g]=ew.useState(null),x=(0,co.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=ga(p),y=h.values[d],w=void 0===y?0:eoa(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=eoi([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)(eiK.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cx.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:cl(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(eor,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});eot.displayName=eoe;var eor=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,co.useComposedRefs)(a,r),o=gk(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)(cx.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function eoa(e,t,n){return m6(100/(n-t)*(e-t),[0,100])}function eoi(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 eoo(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function eol({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>eoo(n)??eoo(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(ei0,{"data-slot":"slider",defaultValue:eoo(t),value:eoo(n),min:r,max:a,className:(0,eA.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)(ei8,{"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)(ei9,{"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)(eot,{"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))]})}eor.displayName="RadioBubbleInput";let eos=[1e4,3e4,12e4,3e5,6e5];function eoc(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 eod(e){return(e&&e.length?e:eos).map(e=>Math.round(e/1e3)).join(", ")}function eou(){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 jh({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eoc(n)),h(eod(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([jf(),xU()]);t(eoc(e)),h(eod(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void p(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(eol,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eof,{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)(Qg,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(v1,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(Qx,{}),(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)(Qg,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(v1,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eof,{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)(Qg,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(ez,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eof,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(y9,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:s||"无法加载代理配置"})]})}function eof({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.label},e.id))]})]})}let eoh=(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 eom="Accordion",eop=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eog,eox,eov]=hY(eom),[eob,eoy]=ci(eom,[eov,eaN]),eow=eaN(),eoj=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eog.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoE,{...r,ref:t}):(0,eb.jsx)(eoM,{...r,ref:t})})});eoj.displayName=eom;var[eok,eoN]=eob(eom),[eoS,eoC]=eob(eom,{collapsible:!1}),eoM=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=ch({prop:n,defaultProp:r??"",onChange:a,caller:eom});return(0,eb.jsx)(eok,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eoS,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eoI,{...o,ref:t})})})}),eoE=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=ch({prop:n,defaultProp:r??[],onChange:a,caller:eom}),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)(eok,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eoS,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eoI,{...i,ref:t})})})}),[eoP,eoO]=eob(eom),eoI=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,co.useComposedRefs)(l,t),c=eox(n),d="ltr"===h1(a),u=cl(e.onKeyDown,e=>{if(!eop.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)(eoP,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eog.Slot,{scope:n,children:(0,eb.jsx)(cx.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoA="AccordionItem",[eoz,eoT]=eob(eoA),eoR=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoO(eoA,n),o=eoN(eoA,n),l=eow(n),s=cu(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eoz,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eaM,{"data-orientation":i.orientation,"data-state":eoV(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eoR.displayName=eoA;var eoD="AccordionHeader",eo_=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoO(eom,n),i=eoT(eoD,n);return(0,eb.jsx)(cx.h3,{"data-orientation":a.orientation,"data-state":eoV(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eo_.displayName=eoD;var eoL="AccordionTrigger",eo$=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoO(eom,n),i=eoT(eoL,n),o=eoC(eoL,n),l=eow(n);return(0,eb.jsx)(eog.ItemSlot,{scope:n,children:(0,eb.jsx)(eaP,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eo$.displayName=eoL;var eoF="AccordionContent",eoB=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoO(eom,n),i=eoT(eoF,n),o=eow(n);return(0,eb.jsx)(eaI,{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 eoV(e){return e?"open":"closed"}function eoH({...e}){return(0,eb.jsx)(eoj,{"data-slot":"accordion",...e})}function eoU({className:e,...t}){return(0,eb.jsx)(eoR,{"data-slot":"accordion-item",className:(0,eA.cn)("border-b last:border-b-0",e),...t})}function eoq({className:e,children:t,...n}){return(0,eb.jsx)(eo_,{className:"flex",children:(0,eb.jsxs)(eo$,{"data-slot":"accordion-trigger",className:(0,eA.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)(xp,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function eoW({className:e,children:t,...n}){return(0,eb.jsx)(eoB,{"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,eA.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eoB.displayName=eoF;let eoK={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eoG(e){return{...e.claudeCode??{}}}function eoX(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 eoY(){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 jp()).engines??[];r(e),t(t=>t?eoX(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([jf(),jm(),xU()]),o=n.engines??[];t(eoX(eoG(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 jh({claudeCode:e});t(eoG(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void b(),disabled:s,children:[(0,eb.jsx)(Gl,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(eI.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)(v3,{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:eoK[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,eA.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)(eP,{}):(0,eb.jsx)(eoh,{}),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)(eoH,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(eoU,{value:"adapter",children:[(0,eb.jsx)(eoq,{children:"适配器"}),(0,eb.jsxs)(eoW,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"适配器命令"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"适配器入口 (…/@zed-industries/claude-code-acp/dist/index.js)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(ez,{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)(eoU,{value:"auth",children:[(0,eb.jsx)(eoq,{children:"认证"}),(0,eb.jsxs)(eoW,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(ez,{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)(eoU,{value:"summary",children:[(0,eb.jsx)(eoq,{children:"摘要模型"}),(0,eb.jsx)(eoW,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoZ,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:f||"无法加载引擎配置"})]})}function eoZ({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.label},e.id))]})]})}let eoJ=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eah,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(Uh,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eO,{})}],eoQ=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(s9,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(ct,{})}];function eo0(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=J7();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:eoJ.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),J9({mode:e})},className:(0,eA.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,eA.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),J9({agentSide:t})},className:(0,eA.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 eo1(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function eo2(){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 jh({memory:e});t(eo1(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jf();t(eo1(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(eol,{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)(Qx,{}),(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)(Qg,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(v1,{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)(QA,{scopes:["global"]})]})]}):(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载记忆配置"})]})}let eo5=(0,ek.default)("check-check",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]),eo4=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function eo3(e){return{id:e.id,providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:e.apiKey??"",models:e.models,selectedModelIds:e.selectedModelIds,builtin:e.builtin,loadingModels:!1,saving:!1,error:e.lastError??"",savedKeyAvailable:!!e.apiKey||!!e.builtin,editing:!1}}function eo6(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await xU();t(e.routes.map(eo3))}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 xW({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>eo3(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 xK(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 xU();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):[eo3(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)(eI.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)(lY,{className:"size-4"}),"添加模型路由"]})]}),a?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{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)(eo7,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function eo8({value:e,title:t}){let[n,r]=ew.useState(!1);return(0,eb.jsx)("button",{type:"button",tabIndex:-1,title:t??"复制",disabled:!e,onClick:async()=>{if(e)try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),1200)}catch{}},className:"absolute right-1 top-1/2 flex size-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40",children:n?(0,eb.jsx)(m1,{className:"size-3.5 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3.5"})})}function eo7({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})}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 xq({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]);let d=e.models.length>0&&e.selectedModelIds.length===e.models.length;if(!e.editing||e.builtin){let t=e.selectedModelIds.map(t=>e.models.find(e=>e.id===t)?.displayName||t).filter(Boolean),n=eo4.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)(lq,{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)(eI.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>c({editing:!0}),children:[(0,eb.jsx)(H_,{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)(ez,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gL,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:eo4.map(e=>(0,eb.jsx)(xw,{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.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(ez,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",className:"pr-8",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(eo8,{value:e.endpointUrl,title:"复制端点 URL"})]}),(0,eb.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(ez,{value:e.apiKey,type:"text",placeholder:"API Key",autoComplete:"off",spellCheck:!1,className:"pr-8 font-mono",onChange:e=>c({apiKey:e.currentTarget.value})}),(0,eb.jsx)(eo8,{value:e.apiKey,title:"复制 API Key"})]})]}),(0,eb.jsx)(Qx,{}),(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)(m0,{className:"size-4 text-muted-foreground"}),"可用模型",e.models.length>0?(0,eb.jsxs)("span",{className:"text-xs font-normal text-muted-foreground tabular-nums",children:[e.selectedModelIds.length,"/",e.models.length]}):null]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[e.loadingModels?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"拉取中"}):null,e.models.length>0?(0,eb.jsxs)(eI.Button,{type:"button",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>c({selectedModelIds:d?[]:e.models.map(e=>e.id)}),children:[(0,eb.jsx)(eo5,{className:"size-3.5"}),d?"全不选":"全选"]}):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,eA.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)(xH,{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)(ez,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"模型路由错误"}),(0,eb.jsx)(QF,{className:"break-words",children:e.error})]}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"destructive",onClick:r,disabled:e.saving,children:[(0,eb.jsx)(bc,{className:"size-4"}),"删除"]}),(0,eb.jsx)(eI.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function eo9(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function ele(){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 jh({skills:e});t(eo9(n)),r(await QN()),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([jf(),QN()]);t(eo9(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{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)(eI.Button,{type:"button",size:"sm",onClick:()=>void x(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(eol,{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)(Bm,{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)(eI.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)(fb.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)(Qg,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(ez,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(eI.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)(lY,{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)(QR,{})]})]})}async function elt(){return elr("/api/local/subagent-config")}async function eln(e){return elr("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function elr(e,t){let n=await fetch((0,eT.localAPIURL)(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 ela(e){return{explore:{...e.explore},workflow:{...e.workflow},operator:{...e.operator},custom:{...e.custom,models:[...e.custom.models??[]]}}}let eli={explore:{title:"探索子代理",icon:(0,eb.jsx)(VS,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uz,{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)(uA,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function elo(){let[e,t]=ew.useState(null),{models:n,loading:r}=xY(),[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 eln({explore:e.explore,workflow:e.workflow,operator:e.operator,custom:e.custom});t(ela(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 elt();t(ela(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void f(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(ell,{tourId:`subagent-${a}`,meta:eli[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)(els,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:s||"无法加载子代理配置"})]})}function ell({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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(elc,{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)(Qg,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(v1,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"系统提示词"}),t.promptOverride?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>a({promptOverride:""}),children:"恢复默认"}):null]}),(0,eb.jsx)(y9,{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 els({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)(uj,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(v0,{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 elc({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))]})]})}function eld(){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 jh({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jf();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)(eI.Button,{type:"button",size:"sm",onClick:()=>void d(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:s})]}):null,(0,eb.jsx)(y9,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elu({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)(eou,{}):"subagent-config"===e?(0,eb.jsx)(elo,{}):"cc-engine-config"===e?(0,eb.jsx)(eoY,{}):"system-prompt"===e?(0,eb.jsx)(eld,{}):"skills"===e?(0,eb.jsx)(ele,{}):"memory"===e?(0,eb.jsx)(eo2,{}):"layout"===e?(0,eb.jsx)(eo0,{}):(0,eb.jsx)(eo6,{})})})}let elf=(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 elh(e,t){if(e.isLocal)return(0,eT.localAPIURL)(t);let n=t.replace(/^\/v1(?=\/)/,"");return(0,eT.localAPIURL)(`/v1/remote/${e.id}${n}`)}async function elm(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 elp(){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((0,eT.localAPIURL)("/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(elh(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 elm(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(elh(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)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void o(),disabled:n,children:[(0,eb.jsx)(bs,{className:(0,eA.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)(eO,{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)(eI.Button,{size:"sm",onClick:()=>void l(e),children:[(0,eb.jsx)(elf,{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)(eP,{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 elg=(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"}]]),elx=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),elv=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elb(){let{user:e}=ti(),[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 e4())}catch(e){o(e instanceof Error?e.message:"读取余额失败")}finally{a(!1)}},[]);ew.useEffect(()=>{e&&(k(),e8().then(e=>f(e.models)).catch(()=>f([])))},[e,k]),ew.useEffect(()=>{if(!e)return;let t=!1;return g(!0),e3(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 e6(e);j({kind:"ok",text:`兑换成功,到账 ${e2(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)(eaw,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户余额"})]}),(0,eb.jsxs)(eI.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)(bs,{}),"刷新"]})]}),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?"—":e2(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)(elg,{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)(ez,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(eI.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,eA.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)(elx,{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)(gL,{value:c,onValueChange:d,children:[(0,eb.jsx)(xx,{size:"sm",className:"w-44",children:(0,eb.jsx)(gV,{placeholder:"全部模型"})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gL,{value:l,onValueChange:s,children:[(0,eb.jsx)(xx,{size:"sm",className:"w-32",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elv.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(ely,{label:"花费",value:e2(N.costMicro,4)}),(0,eb.jsx)(ely,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(ely,{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)(Cw,{width:"100%",height:"100%",children:(0,eb.jsxs)(Ze,{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)(ZR,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(ZZ,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Z7,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(BY,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(Y4,{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)(eaw,{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 ely({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 elw=(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"}]]),elj=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elk=Object.fromEntries(elj.map(e=>[e.value,e.label])),elN={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elS(){let{user:e}=ti(),[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 e9();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 e7({title:t.trim(),type:r,content:i.trim()}),c=!1;for(let t of l)try{await te(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)(ez,{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)(gL,{value:r,onValueChange:a,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elj.map(e=>(0,eb.jsx)(xw,{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)(y9,{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,eA.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)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>p.current?.click(),children:[(0,eb.jsx)(elw,{}),"添加图片"]}),(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)(fb.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,eA.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)(eI.Button,{onClick:()=>void N(),disabled:c||!t.trim(),children:[c?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(erq,{}),"提交反馈"]})})]}),(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=elN[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)(Bm,{variant:"outline",children:elk[e.type]??e.type}),(0,eb.jsx)(Bm,{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)(elM,{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)(dE,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fw,{className:"max-w-3xl",children:y?(0,eb.jsx)(elE,{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)(jC,{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 elC(e,t){let[n,r]=ew.useState(null);return ew.useEffect(()=>{let n=!0,a=null;return tt(e,t).then(e=>{a=e,n?r(e):URL.revokeObjectURL(e)}).catch(()=>{}),()=>{n=!1,a&&URL.revokeObjectURL(a)}},[e,t]),n}function elM({issueId:e,imageId:t}){let n=elC(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 elE({issueId:e,imageId:t,className:n}){let r=elC(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 elP={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},elO={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elI(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((0,eT.localAPIURL)(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 elA(){let e=elI("/api/local/machines/fleet",elP),{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)(ent,{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 elz=[{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 elT(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 elR(){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 jh({network:e});t(elT(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 jf();t(elT(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载网络设置"})]});let f=elz.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)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(v1,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(hI,{}),(0,eb.jsx)(Q$,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(QF,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(Qx,{}),(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)(Qg,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(v1,{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)(Qg,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gL,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elz.map(e=>(0,eb.jsx)(xw,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(eol,{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)(Qx,{}),(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)(Qg,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(v1,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function elD(){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)(elR,{})})})]})}let el_=[{value:"",label:"不使用(仅搜索引擎兜底)",help:"不接入 AI 搜索渠道,只用下方的搜索引擎兜底抓取。无需任何 Key。"},{value:"tavily",label:"Tavily(国际 · 为 LLM 优化)",help:"专为 AI agent 设计,结果干净、含摘要,免费额度较大。需走代理访问。在 tavily.com 获取 API Key。"},{value:"bocha",label:"博查 Bocha(国内 · 直连免代理)",help:"国产、为大模型设计的搜索 API,人民币计费、国内直连无需翻墙。在 bochaai.com 获取 API Key。"},{value:"brave",label:"Brave Search(国际 · 独立索引)",help:"独立网页索引,隐私友好、价格便宜。需走代理访问。在 brave.com/search/api 获取订阅 Token。"},{value:"serper",label:"Serper(国际 · Google 结果)",help:"Google 搜索结果转 JSON,便宜快速。需走代理访问。在 serper.dev 获取 API Key。"}],elL=[{value:"bing",label:"Bing(默认,较稳定)"},{value:"duckduckgo",label:"DuckDuckGo"}],el$=[{value:"auto",label:"自动(先 Jina 后 Firecrawl)",help:"默认。先用 Jina Reader(免费、轻),失败或为空时若配置了 Firecrawl Key 再用 Firecrawl 兜底。"},{value:"jina",label:"仅 Jina Reader",help:"只用 Jina Reader(r.jina.ai)。免费可用、有速率限制;填 Key 可提高限额。"},{value:"firecrawl",label:"仅 Firecrawl",help:"只用 Firecrawl(正文抽取更强),必须配置下方的 Firecrawl API Key。"}];function elF(e){let t=e.search;return{enable:t?.enable??!0,provider:t?.provider??"",apiKey:t?.apiKey??"",endpoint:t?.endpoint??"",enableEngineFallback:t?.enableEngineFallback??!0,engine:t?.engine??"bing",defaultReader:t?.defaultReader??"auto",jinaApiKey:t?.jinaApiKey??"",firecrawlApiKey:t?.firecrawlApiKey??"",maxResults:t?.maxResults??8,githubToken:t?.githubToken??""}}function elB(){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 jh({search:e});t(elF(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 jf();t(elF(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载搜索设置"})]});let f=el_.find(t=>t.value===(e.provider??"")),h=el$.find(t=>t.value===(e.defaultReader??"auto"));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:"搜索设置"}),s&&(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:o})]}):null,(0,eb.jsx)("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 space-y-0.5",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"启用联网搜索工具"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为智能体提供 联网搜索 + 网页阅读 能力(vantaloom_search),无需启动浏览器。即使不配置任何 Key,也能用下方的搜索引擎兜底 + Jina 阅读开箱即用。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>d({enable: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:"AI 搜索渠道"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"检索层:把关键词转成排序的「标题 / 链接 / 摘要」。配置后质量更好;不配置则只走下方搜索引擎兜底。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"搜索渠道"}),(0,eb.jsxs)(gL,{value:e.provider?e.provider:"none",onValueChange:e=>d({provider:"none"===e?"":e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:el_.map(e=>(0,eb.jsx)(xw,{value:e.value||"none",children:e.label},e.value||"none"))})]}),f?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:f.help}):null]}),e.provider?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(ez,{value:e.apiKey??"",onChange:e=>d({apiKey:e.currentTarget.value}),placeholder:"搜索渠道 API Key",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自定义接口地址(可选)"}),(0,eb.jsx)(ez,{value:e.endpoint??"",onChange:e=>d({endpoint:e.currentTarget.value}),placeholder:"留空使用渠道默认地址",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]})]}):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:"搜索引擎兜底(无需 Key)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未配置 AI 渠道或渠道失败时,自动解析搜索引擎结果页,过滤出条目与网址。请求带浏览器指纹(uTLS + 请求头),降低被拦截概率。"}),(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)(Qg,{className:"text-sm",children:"启用搜索引擎兜底"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,未配置 AI 渠道时将无法搜索。建议保持开启。"})]}),(0,eb.jsx)(v1,{checked:e.enableEngineFallback,onCheckedChange:e=>d({enableEngineFallback:e})})]}),e.enableEngineFallback?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"兜底搜索引擎"}),(0,eb.jsxs)(gL,{value:e.engine??"bing",onValueChange:e=>d({engine:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elL.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]})]}):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:"阅读层:把网页抽取成干净的正文 Markdown,不启动浏览器。智能体每次调用可自选引擎,下面是它未指定时的默认。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"默认阅读引擎"}),(0,eb.jsxs)(gL,{value:e.defaultReader??"auto",onValueChange:e=>d({defaultReader:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:el$.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),h?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:h.help}):null]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"Jina Reader API Key(可选)"}),(0,eb.jsx)(ez,{value:e.jinaApiKey??"",onChange:e=>d({jinaApiKey:e.currentTarget.value}),placeholder:"留空也可用(免费有速率限制)",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"Firecrawl API Key"}),(0,eb.jsx)(ez,{value:e.firecrawlApiKey??"",onChange:e=>d({firecrawlApiKey:e.currentTarget.value}),placeholder:"使用 Firecrawl 阅读时必填",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]})]}),(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:"可信信源(公共 API · 无需 Key)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"智能体可在搜索时指定来源,直接调用各站点的官方公共 API,结果比通用网页搜索干净得多——已内置启用,无需配置:"}),(0,eb.jsxs)("ul",{className:"ml-4 list-disc space-y-1 text-xs text-muted-foreground",children:[(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"GitHub / Gitee"})," — 按 star 排序搜索开源仓库"]}),(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"维基百科"})," — 词条检索(支持多语言)"]}),(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"Fandom"})," — 游戏 / 动漫 / 影视等粉丝维基"]})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"GitHub Token(可选)"}),(0,eb.jsx)(ez,{value:e.githubToken??"",onChange:e=>d({githubToken:e.currentTarget.value}),placeholder:"留空也可用(匿名限速 10 次/分钟),填入可提高限额",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅用于 GitHub 来源的搜索限速提升。在 github.com/settings/tokens 生成(无需任何权限范围即可)。"})]})]}),(0,eb.jsx)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"默认返回结果数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.maxResults||8," 条"]})]}),(0,eb.jsx)(eol,{value:[e.maxResults||8],onValueChange:([e])=>d({maxResults:e}),min:1,max:20,step:1}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次搜索返回给智能体的结果条数上限(智能体也可在调用时显式指定)。默认 8。"})]})})]})}function elV(){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:"配置智能体的联网搜索与网页阅读:AI 搜索渠道、无 Key 的搜索引擎兜底,以及 Jina / Firecrawl 阅读引擎。"})]}),(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)(elB,{})})})]})}let elH="local",elU=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function elq(){let{machines:e}=xC(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:elH,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:elH,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(elH);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??elH)},[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)(mm,{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)(mk,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mN,{value:e.id,className:"gap-1.5",children:[(0,eb.jsx)(eO,{className:"size-3.5"}),(0,eb.jsx)("span",{className:"truncate",children:e.name}),(0,eb.jsx)("span",{className:(0,eA.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(elW,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function elW({machine:e}){var t;let n=(t=e?.id??elH)===elH?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 GV(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?elK: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)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:m,children:[(0,eb.jsx)(bs,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(elG,{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 elK={id:"browser",name:"Vantaloom 浏览器",installed:!1,enabled:!1,running:!1,variant:"cloakbrowser",version:"",available:["cloakbrowser","chrome-for-testing"]};function elG({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 GK(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await GV(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)(Bm,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bm,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bm,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bm,{variant:"outline",children:"未安装"}),v=elU.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)(Ux,{})}),(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,eA.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,elU.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)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>h(!t.running),children:[m?(0,eb.jsx)(VT,{className:"size-3.5"}):t.running?(0,eb.jsx)(jB,{className:"size-3.5"}):(0,eb.jsx)(VM,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>Gq(e),!0),children:["update"===i?(0,eb.jsx)(VT,{className:"size-3.5"}):(0,eb.jsx)(bs,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>GW(e)),children:["uninstall"===i?(0,eb.jsx)(VT,{className:"size-3.5"}):(0,eb.jsx)(bc,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>GU(e,c),!0),children:[u?(0,eb.jsx)(VT,{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)(v1,{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 elX=(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 elY(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 elZ({status:e}){switch(e){case"active":return(0,eb.jsx)(Bm,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bm,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bm,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bm,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bm,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bm,{variant:"outline",children:"等待中"})}}let elJ=["complete","error","canceled"];function elQ({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,eA.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,eA.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 el0({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?"":`${elY(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=elJ.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)(elZ,{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)(VT,{className:"size-3.5"}),f&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>mZ(e.id,"pause")),children:(0,eb.jsx)(elX,{className:"size-3.5"})}),h&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>mZ(e.id,"resume")),children:(0,eb.jsx)(VM,{className:"size-3.5"})}),m&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>mZ(e.id,"retry")),children:(0,eb.jsx)(bs,{className:"size-3.5"})}),p&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>mZ(e.id,"cancel")),children:(0,eb.jsx)(fb.XIcon,{className:"size-3.5"})}),g&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7 text-muted-foreground hover:text-destructive",disabled:i,title:"移除","aria-label":"移除",onClick:()=>l(()=>mZ(e.id,"remove")),children:(0,eb.jsx)(bc,{className:"size-3.5"})})]})]}),(0,eb.jsx)(elQ,{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=elY(n),r<0?a:`${a} / ${elY(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 el1(){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 mG({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof mK)return void r("unavailable")}try{await mX(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof mK)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)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:o,children:[(0,eb.jsx)(bs,{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)(el0,{download:e},e.id))})}function el2({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)(ez,{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 el5(){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 mJ({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof mK?"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 mQ(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)(VT,{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)(ez,{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)(el2,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(el2,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(el2,{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)(ez,{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)(v1,{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)(eI.Button,{size:"sm",disabled:a,onClick:m,children:[a?(0,eb.jsx)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:f,children:[(0,eb.jsx)(bs,{className:"size-3.5"}),"重试"]})})]})}function el4(){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)(v3,{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)(el1,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(el5,{})]})]})})})}let el3=["light","dark","jelly"],el6={light:{label:"Light",icon:eab,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eap,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 el8(){let{resolvedTheme:e,setTheme:t}=(0,hA.useTheme)(),[n,r]=ew.useState(eaT.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaT.appearanceThemeStorageKey)??eaT.defaultAppearanceTheme;r(e),(0,eaT.applyAppearanceTheme)({theme:e})},[]);let a=n===eaT.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=el3.indexOf(a),o=el3[(i+1)%el3.length]??"light",{icon:l,label:s,className:c}=el6[a];function d(e){r(e),window.localStorage.setItem(eaT.appearanceThemeStorageKey,e),(0,eaT.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,eA.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${eei.theme}: ${s}`,title:`${eei.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(eaT.jellyAppearanceTheme);return}d(eaT.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let el7=(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 el9=[{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}],ese=[{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}],est=[{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"}],esn=[["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","失败"]],esr={cpu:{label:"CPU",color:"var(--chart-1)"},memory:{label:"Memory",color:"var(--chart-3)"},network:{label:"Network",color:"var(--chart-5)"}};function esa(e,t,n=42,r){return(0,eb.jsx)("section",{className:(0,eA.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?eer({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeA,{label:e,value:t,minSize:n})})}function esi(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let eso={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]}]},esl=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uz,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("运行中","运行队列"),render:e=>esa(e.title,"07",44,Q9)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(uw,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("排队","调度器"),render:e=>esa(e.title,"04",44,eee)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(enq,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("待确认","确认队列"),render:e=>esa(e.title,"03",44,eet)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("Worker","Agent worker"),render:e=>esa(e.title,"14",44,een)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(uO,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:esi("任务队列","运行队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:e.title}),(0,eb.jsx)(eni,{items:el9})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:esi("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)(eea,{title:e.title}),(0,eb.jsx)(enl,{workers:ese})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(eeD,{className:"size-4"}),defaultSize:{w:7,h:4},defaultConfig:esi("最近执行","执行日志"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:e.title}),(0,eb.jsx)(ena,{items:esn})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:5,h:4},defaultConfig:esi("待确认","确认队列"),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)(eea,{title:e.title}),(0,eb.jsx)(enr,{items:est})]})}],ess=[{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 esc(e=eso){return[{id:"metric-online",title:"在线机器",description:"当前在线机器数量。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("在线机器","机器心跳"),render:t=>esa(t.title,String(e.metrics.online),44,Q9)},{id:"metric-health",title:"健康度",description:"工作组整体健康度。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("健康度","服务遥测"),render:t=>esa(t.title,`${e.metrics.health}%`,44,eee)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(eeB,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("平均延迟","网络遥测"),render:t=>esa(t.title,e.metrics.latency,44,eet)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esi("事件","事件流"),render:t=>esa(t.title,String(e.metrics.events),44,een)},{id:"machines",title:"机器健康矩阵",description:"各机器资源和心跳状态。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:esi("机器健康矩阵","机器遥测"),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:eer({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(enu,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(el7,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:esi("资源趋势","机器遥测"),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)(eea,{title:t.title}),(0,eb.jsx)(eng,{config:esr,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(Q2,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:esi("网络连接","网络遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(enp,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:esi("事件流","事件流"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(end,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:esi("服务健康","服务遥测"),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)(eea,{title:t.title}),(0,eb.jsx)(enx,{services:e.serviceHealth})]})}]}esc();let esd=[{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}],esu={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 esf({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eeE,{boardId:"runtime-operations",definitions:esl,initialLayouts:ess,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esh({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elI("/api/local/machines/telemetry",elO),a=ew.useMemo(()=>esc(r),[r]);return(0,eb.jsx)(eeE,{boardId:"telemetry",definitions:a,initialLayouts:esd,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esm({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,eA.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 esp(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function esg(e){return"u"<typeof document?null:document.querySelector(e)}function esx(){return null!=esg('[role="menu"]')}function esv(){return null!=esg('[data-tour="init-wizard"]')}function esb(){let e=esg('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=esu){esi("机器","机器组"),esi("在线","机器心跳"),esi("Runtime","Agent runtime"),esi("Token","机器注册"),esi("机器组","机器组"),esi("拓扑图","网络拓扑"),esi("直连","网络拓扑"),esi("P2P","网络拓扑"),esi("Relay","网络拓扑"),esi("中断","网络拓扑"),esi("延迟","网络遥测"),esi("候选路径","网络候选路径")}(),esi("日志与审计","审计事件"),esi("筛选","审计筛选"),esi("拒绝事件","审计事件"),esi("事件趋势","审计事件");var esy=e.i(64990);function esw(){let e=sv(),[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 sz(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(!1),[E,P]=ew.useState([]),[O,I]=ew.useState([]),[A,z]=ew.useState({}),[T,R]=ew.useState(),[D,_]=ew.useState(uF),[L,$]=ew.useState([]),[F,B]=ew.useState(),[V,H]=ew.useState(),[U,q]=ew.useState(),[W,K]=ew.useState(),G=ew.useRef(!1),X=ew.useCallback(e=>{_(t=>iZ(e,t))},[]),Y=ew.useCallback(e=>{$(t=>iZ(e,t))},[]),Z=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 sw){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]),J=ew.useCallback(async(e,t)=>{h([]),await Z(e,t)},[Z]),Q=ew.useCallback(()=>{c(void 0),i("new-agent-conversation")},[]),ee=ew.useCallback(async()=>{let e=await sO();e?await Z(e.conversation.id,e.conversation.ownerMachineId):Q()},[Z,Q]),et=ew.useCallback(async()=>{G.current=!0,_(uF),$([]),i("new-canvas");try{let e=await QX({title:"新画布",nodes:uF,edges:[]});H(e.canvas.id),q("local")}catch{H(void 0),q(void 0),G.current=!1}},[]),en=ew.useCallback(async(e,t)=>{try{await QZ(e,t);let n=await QG(e,t);G.current=!0,_(n.nodes),$(n.edges),H(n.canvas.id),q(n.canvas.ownerMachineId),i("new-canvas")}catch{}},[]),er=ew.useCallback(e=>{K(e),i("project-overview")},[]),ea=ew.useCallback(e=>{K(e),i("kanban")},[]),ei=ew.useCallback(e=>{K(e),i("project-settings")},[]),eo=ew.useCallback(async(e,t)=>{K(e);let n=t;if(!n)try{n=(await enD(e)).canvasId}catch{}if(!n)try{n=(await QX({title:"工程画布",nodes:uF,edges:[]})).canvas.id,await enL(e,{canvasId:n}).catch(()=>{})}catch{return}await en(n)},[en]),el=ew.useCallback(async(e,t,n)=>{K(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)}},[]),es=ew.useCallback(()=>{i("new-project")},[]),ec=ew.useCallback(async e=>{try{let t=await enH(e);await el(e,t.id,t.ownerMachineId)}catch{}},[el]);ew.useEffect(()=>{if(!V)return;if(G.current){G.current=!1;return}let e=window.setTimeout(()=>{QY(V,{nodes:D,edges:L,nodeIds:D.map(e=>e.id)},U).catch(()=>{})},800);return()=>window.clearTimeout(e)},[D,L,V,U]);let ed=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 et();if("all-canvases"===t.id)return void i("all-canvases");if("new-agent-conversation"===t.id)return void Q();if("import-claude-session"===t.id)return void S(!0);if("open-recent-conversation"===t.id)return void ee();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||"search-settings"===t.id||"system-downloads"===t.id||"check-update"===t.id||"account"===t.id||"balance-usage"===t.id||"feedback"===t.id)&&i(t.id)}},[et,e,ee,Q]),{start:eu}=(0,esy.useTour)(),ef=ew.useCallback(()=>{var e;eu((e={select:e=>ed({item:{id:e}}),startNewConversation:Q,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:esp(()=>e.goHome()),target:()=>esg('[role="menu"]')??esg('[data-tour="account-button"]'),gate:esx,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:esp(()=>e.select("preferences-model-routes")),target:()=>esg('[data-tour="model-route-form"]')??esg('[data-tour="add-model-route"]'),gate:()=>null!=esg('[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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>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:esp(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:esv,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:()=>!esv()||esb()>=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:()=>!esv()||esb()>=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:()=>!esv()||esb()>=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:()=>!esv(),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!=esg('[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!=esg('[placeholder="搜索组件..."]')||null!=esg('[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!=esg('[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!=esg('[placeholder="搜索组件..."]')||null!=esg('[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!=esg('[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:"使用教程"})," 重新打开本向导。开始创造吧!"]})}]}))},[ed,Q,eu]),eh=ew.useCallback(()=>{i("account")},[]),em=d?.id??s?.conversation.id,ep=!!d&&s?.conversation.id!==d.id,eg="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)(eiI,{navItems:eiT,contents:eiR,activeWorkspace:a,activeConversationId:em,activeProjectId:W,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenProjectCanvas:(e,t)=>{eo(e,t)},onOpenProjectOverview:er,onOpenProjectKanban:ea,onOpenProjectSettings:ei,onNewProjectConversation:e=>{ec(e)},onOpenProjectConversation:(e,t,n)=>{el(e,t,n)},onNewProject:()=>{es()},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:eh,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e),title:eg&&s?s.conversation.title?.trim()||"新 Agent 对话":eei.product,trailing:eg&&s?(0,eb.jsx)(jE,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(el8,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,eA.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)(eaD,{navItems:eiT,contents:eiR,activeWorkspace:a,activeConversationId:em,activeCanvasId:V,activeProjectId:W,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenCanvas:(e,t)=>{en(e,t)},onOpenProjectCanvas:(e,t)=>{eo(e,t)},onOpenProjectOverview:er,onOpenProjectKanban:ea,onOpenProjectSettings:ei,onNewProjectConversation:e=>{ec(e)},onOpenProjectConversation:(e,t,n)=>{el(e,t,n)},onNewProject:()=>{es()},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:eh,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e)})}),(0,eb.jsx)("div",{className:(0,eA.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)(tc,{className:"size-4"}):(0,eb.jsx)(ts,{className:"size-4"})})})]}),(0,eb.jsxs)("section",{className:(0,eA.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)(esf,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"telemetry"===a?(0,eb.jsx)(esh,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"preferences-model-routes"===a?(0,eb.jsx)(elu,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elu,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elu,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elu,{section:"cc-engine-config"}):"preferences-system-prompt"===a?(0,eb.jsx)(elu,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elu,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elu,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elu,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(elq,{}):"network-topology"===a?(0,eb.jsx)(elA,{}):"network-settings"===a?(0,eb.jsx)(elD,{}):"search-settings"===a?(0,eb.jsx)(elV,{}):"system-downloads"===a?(0,eb.jsx)(el4,{}):"preferences"===a?(0,eb.jsx)(elu,{}):"check-update"===a?(0,eb.jsx)(elp,{}):"balance-usage"===a?(0,eb.jsx)(elb,{}):"feedback"===a?(0,eb.jsx)(elS,{}):"account"===a?(0,eb.jsx)(eiF,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(enQ,{onCreated:e=>{er(e)},onCancel:()=>i("home")}):"project-overview"===a&&W?(0,eb.jsx)(er9,{projectId:W,onOpenSettings:ei}):"project-settings"===a&&W?(0,eb.jsx)(ert,{projectId:W}):"kanban"===a&&W?(0,eb.jsx)(er2,{projectId:W}):("new-agent-conversation"===a||"project-conversation"===a)&&ep?(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)(Qu,{conversation:s,clipboardItems:E,clipboardDraggingId:T,onClipboardItemsChange:P,onClipboardDraggingChange:R,onOverlayOpenChange:l,onConversationCreated:e=>{c(e)},onCancelDraft:()=>i("home"),subagentStack:f,onSubagentStackChange:h,subagentTree:m,mobileView:g,onMobilePaneCountChange:b}):e?(0,eb.jsx)(esk,{activeConversationId:em,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{k(t=>t?.id===e?void 0:t)}}):(0,eb.jsx)(esj,{onNewConversation:Q,onStartTour:ef}):(0,eb.jsx)(enM,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):(0,eb.jsx)(enT,{nodes:D,edges:L,selectedNodeId:F,clipboardItems:E,onNodesChange:X,onEdgesChange:Y,onNodesSet:_,onEdgesSet:$,onSelectedNodeChange:B,onClipboardItemsChange:P}),j?(0,eb.jsx)("div",{className:(0,eA.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(QU,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{J(e,t)}})}):null,(0,eb.jsx)(QW,{open:N,onOpenChange:S,onEnterConversation:(e,t)=>{J(e,t)}}),(0,eb.jsx)(eau,{hidden:!!j||(eg?o:C),items:E,trashItems:O,draggingId:T,onDraggingChange:R,onItemsChange:P,onTrashItemsChange:I,onTrashClipboardItemsChange:z,trashClipboardItems:A})]})]})}function esj({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)(esm,{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)(eI.Button,{type:"button",onClick:e,"data-tour":"home-new-conversation",children:[(0,eb.jsx)(tl,{className:"size-4"}),"新建对话"]}),(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",onClick:t,children:[(0,eb.jsx)(to,{className:"size-4"}),"使用教程"]})]})]})}function esk({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)(eaV,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function esN(){let{ready:e,user:t,logout:n}=ti();return e?t?(0,eb.jsx)(esw,{}):(0,eb.jsx)(tn,{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 esS(){return(0,eb.jsx)(ta,{children:(0,eb.jsx)(esN,{})})}e.s(["default",()=>esS],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,eA.cn)("size-full border-0 bg-background",n)})}function Gb({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 Gy({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)(Gn,{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:[Gf(e.size)&&(0,eb.jsx)(Bm,{variant:"outline",children:Gf(e.size)}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function Gw({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 Gj({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=Gd(e),o=e.src?e.src:t&&"svg"===Gd(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,eA.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gv,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,eA.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(Gx,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,eA.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,eA.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,eA.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)(Gw,{labels:n})}function Gk({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)(Uy,{className:"size-4"}):(0,eb.jsx)(uS,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(Gr,{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)(Gl,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Ga,{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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,disabled:t.disabled,onClick:()=>{t.disabled||t.onClick()},className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function GN({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(()=>({...Gs,...v}),[v]),[E,P]=ew.useState(n??e.content??""),[O,I]=ew.useState(i),[A,z]=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??O,H=(N=l??A,(S=Gh(e)).includes(N)?N:S[0]),U=Gd(e),q=Gh(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(Gd(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=Gd(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=Gf(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&&P(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,eA.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,eA.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)(Gi,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Go,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(Gn,{className:"size-3.5"}):(0,eb.jsx)(v9,{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,eA.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)(Bm,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bm,{variant:"secondary",children:[(0,eb.jsx)(lq,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bm,{variant:"outline",children:[(0,eb.jsx)(Gr,{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)(Gy,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(Gj,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(Gb,{file:e,value:B,labels:M}):(0,eb.jsx)(Gg,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&P(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(Gk,{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&&z(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&I(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function GS(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function GC(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function GM(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GE({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,P]=ew.useState(t),O=ew.useRef(null),I=ew.useRef(null),[A,z]=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&&P(t),i?.(t)},[i,e]),er=ew.useCallback(e=>{D.current=e,R(e)},[]),ea=ew.useCallback(()=>{let e=I.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=I.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=I.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=I.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=I.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=I.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(GM(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(GM(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=I.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=O.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=GS(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){z(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))}z(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,ix.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:O,"data-slot":"multi-tab-system",className:(0,eA.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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":b,onClick:()=>el("left"),className:"mb-1 shrink-0",children:(0,eb.jsx)(m2,{})}),(0,eb.jsxs)("div",{ref:I,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,eA.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&&A===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==A;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();z(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":A===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,eA.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":GC(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??(GC(e.title)?`${v}: ${GC(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=GS(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,eA.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)(fb.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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":y,onClick:()=>el("right"),children:(0,eb.jsx)(m5,{})}),u.length>0?(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":g,children:(0,eb.jsx)(lY,{})})}),(0,eb.jsx)(y1,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y6,{children:e.shortcut})]})]},t))})]}):(0,eb.jsx)(eI.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)(lY,{})}),f.length>0&&(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":x,children:(0,eb.jsx)(lG,{})})}),(0,eb.jsx)(y1,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(y6,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,eA.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 GP=(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 GO({status:e}){return"done"===e?(0,eb.jsx)(m1,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VM,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GP,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yO,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GI({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 GA={main:"主",subagent:"子"};function Gz({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,eA.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)(GO,{status:e.status}),(0,eb.jsx)("span",{className:(0,eA.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:[GA[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GI,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(Gz,{node:e,depth:t+1,activeId:n},e.id))]})}function GT({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)(mm,{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)(mk,{children:[(0,eb.jsx)(mN,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mN,{value:"tree",children:"执行树"})]})}),(0,eb.jsx)(mS,{value:"doc",className:"min-h-0 flex-1",children:(0,eb.jsx)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:a.trim()?(0,eb.jsx)(V0,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mS,{value:"tree",className:"min-h-0 flex-1",children:(0,eb.jsx)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:n?.tree?(0,eb.jsx)(Gz,{node:n.tree,depth:0,activeId:o}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]})})}function GR({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,eA.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)(uE,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(w_,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(V0,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}function GD({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0),[a,i]=ew.useState([]),[o,l]=ew.useState(!1),[s,c]=ew.useState(!1),[d,u]=ew.useState(""),{models:f}=xY(),h=d||f[0]?.value||"";ew.useEffect(()=>{if(!e){r(void 0),i([]),l(!1);return}let n=!0;return(async()=>{try{let a=await sI(e,t);if(!n)return;u(a.conversation.settings?.mainModels?.[0]??"");let i=a.conversation.sideQueryConvId;i&&r(e=>e??i)}catch{}})(),()=>{n=!1}},[e,t]),ew.useEffect(()=>{let e;if(!n)return;let r=!0,a=async()=>{if(r)try{let o=await sI(n,t);if(!r)return;let s=o.conversation.running??!1;i(o.events),l(s),e=window.setTimeout(a,s?1200:5e3)}catch{if(!r)return;try{let e=await sA(n,{limit:400},t);r&&e.events.length&&i(e.events)}catch{}r&&(e=window.setTimeout(a,5e3))}};return a(),()=>{r=!1,void 0!==e&&window.clearTimeout(e)}},[n,t]);let m=ew.useCallback(n=>{let a=n.trim();e&&a&&!s&&(c(!0),l(!0),(async()=>{try{let{sideQueryConvId:n}=await s5(e,a,t,h||void 0);n&&r(n)}catch{l(!1)}finally{c(!1)}})())},[e,t,h,s]),p=!!e,g=!n&&0===a.length;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5 border-b px-3 py-2",children:[(0,eb.jsx)(s7,{className:"size-3.5 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"旁问"}),(0,eb.jsx)("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"只读 · 不影响主对话"})]}),(0,eb.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,eb.jsx)(HA,{className:"size-full min-h-0",composerClassName:"max-w-[42rem]",events:a,running:o||s,disabled:!p,hideComposerOptions:!0,onSubmit:e=>m(e.value)}),g?(0,eb.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-0 bottom-28 grid place-items-center px-6",children:(0,eb.jsxs)("div",{className:"max-w-xs text-center",children:[(0,eb.jsx)(s7,{className:"mx-auto mb-2 size-7 text-muted-foreground/50"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:p?"问点什么?旁问不会影响主对话。":"选择一个对话后即可在此发起旁问。"})]})}):null]})]})}let G_=(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"}]]),GL=(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"}]]),G$=(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"}]]),GF=(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 GB(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}${t}`):(0,eT.localAPIURL)(t)}async function GV(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(GB(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 GH(e,t,n){let r=await fetch(GB(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 GU(e,t){return GH(e,"/v1/extensions/browser/install",{variant:t})}async function Gq(e,t){return GH(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function GW(e){return GH(e,"/v1/extensions/browser/uninstall")}async function GK(e,t){return GH(e,"/v1/extensions/browser/enable",{enabled:t})}async function GG(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(GB(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 GX(e,t){return{monitoring:!!(await GH(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let GY={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function GZ(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=GZ(r);t+=e.done,n+=e.total}return{done:t,total:n}}function GJ(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=GJ(n,t);if(e)return e}}}function GQ({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 G0({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=GJ(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?GJ(e.tree,r):void 0}}(e),r=e.tree?GZ(e.tree):{done:0,total:0},a=t?GZ(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)(G1,{icon:(0,eb.jsx)(uO,{}),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??GY[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(GQ,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(m1,{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 G1({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 G2(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await GV(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 GK(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GV(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)(Ux,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(G5,{online:!0}):"starting"===e?(0,eb.jsx)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(G5,{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)(VM,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function G5({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,eA.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function G4({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xC();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sI(e,t),sz(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)(G1,{icon:(0,eb.jsx)(uw,{}),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)(eO,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"运行于"}),(0,eb.jsx)(G5,{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)(GF,{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)(G5,{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)(GL,{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)(G2,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(G0,{state:w}):null,(0,eb.jsx)(G1,{icon:(0,eb.jsx)(uj,{}),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)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fb.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(m1,{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)(G1,{icon:(0,eb.jsx)(uA,{}),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)(G$,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hI,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fb.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(m1,{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)(G1,{icon:(0,eb.jsx)(G_,{}),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)})})]})}function G3({done:e,total:t}){let n=t>0?Math.round(e/t*100):0;return(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:`${n}%`}})})}function G6({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0);ew.useEffect(()=>{if(!e)return void r(void 0);let n=!0,a=async()=>{let a=await sA(e,{limit:400},t);n&&r(function(e){for(let t=e.length-1;t>=0;t-=1){let n=e[t];if(n&&"task"===n.kind&&Array.isArray(n.tasks))return n.tasks}}(a.events))};a();let i=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(i)}},[e,t]);let a=n??[],i=a.length,o=a.filter(e=>"done"===e.status).length;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)("div",{className:"shrink-0 space-y-1.5 border-b px-3 py-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"任务"}),(0,eb.jsxs)("span",{className:"text-[11px] tabular-nums text-muted-foreground",children:[o,"/",i]})]}),(0,eb.jsx)(G3,{done:o,total:i})]}),(0,eb.jsx)(w_,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:0===i?(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"暂无任务"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-0.5",children:a.map(e=>{let{glyph:t,className:n}=function(e){switch(e){case"done":return{glyph:"✓",className:"text-emerald-500"};case"in_progress":return{glyph:"▸",className:"text-amber-500"};case"cancelled":return{glyph:"✕",className:"text-rose-500"};default:return{glyph:"○",className:"text-muted-foreground/50"}}}(e.status),r="done"===e.status;return(0,eb.jsxs)("li",{className:"flex items-start gap-2 rounded-md px-1.5 py-1",children:[(0,eb.jsx)("span",{className:(0,eA.cn)("mt-px shrink-0 text-[13px] leading-5",n),"aria-hidden":!0,children:t}),(0,eb.jsx)("span",{className:(0,eA.cn)("min-w-0 flex-1 text-[13px] leading-5",r&&"text-muted-foreground line-through"),title:e.detail||e.title,children:e.title})]},e.id)})})})})]})}let G8="application/vnd.vantaloom.canvas-node",G7="application/vnd.vantaloom.canvas-tab",G9="application/vnd.vantaloom.dashboard-widget",Xe="application/vnd.vantaloom.workspace-card";var Xt=e.i(78737);let Xn=(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"}]]),Xr=(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"}]]),Xa=(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"}]]),Xi=[{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"}],Xo=[{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}],Xl={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 Xs(e,t,n){return e.find(e=>e.id===t)??n}function Xc({id:e}){return"phone"===e?(0,eb.jsx)(Xr,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(Xa,{className:"size-4"}):(0,eb.jsx)(eO,{className:"size-4"})}function Xd({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=Xi,ratios:h=Xo,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...Xl,...x}),[x]),[k,N]=ew.useState(t),[S,C]=ew.useState(e??t),[M,E]=ew.useState(()=>[e??t]),[P,O]=ew.useState(0),[I,A]=ew.useState(l),[z,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=Xs(f,o??I,f[0]??Xi[0]),q=Xs(h,c??z,h[0]??Xo[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,P+1);return n[n.length-1]===t?n:(O(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,eA.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,eA.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)(Xn,{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)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.back,disabled:P<=0,onClick:function(){if(P<=0)return;let e=P-1,t=M[e];t&&(O(e),C(t),en(t,{history:"none"}),a?.(t))},className:"size-5 rounded-md",children:(0,eb.jsx)(Xt.ArrowLeftIcon,{className:"size-3.5"})}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-xs","aria-label":j.forward,disabled:P>=M.length-1,onClick:function(){if(P>=M.length-1)return;let e=P+1,t=M[e];t&&(O(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)(eI.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)(bs,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,eA.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,eA.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)(eI.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=Xs(f,e.id,U),void(void 0===o&&A(t.id),s?.(t.id,t))},children:(0,eb.jsx)(Xc,{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)(eI.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=Xs(h,e.id,q),void(void 0===c&&T(t.id),u?.(t.id,t))},children:e.label},e.id))})]})]}),(0,eb.jsx)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let Xu=(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"}]]),Xf=(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 Xh({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,eA.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)(eI.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)(eO,{className:"size-3.5"}):(0,eb.jsx)(Xu,{className:"size-3.5"}),"监视"]}):null,(0,eb.jsxs)(eI.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)(lU,{className:"size-3.5"}):(0,eb.jsx)(lX,{className:"size-3.5"}),r?"接管中":"观看"]}),"error"===n&&o?(0,eb.jsx)(eI.Button,{type:"button",size:"icon-xs",variant:"ghost",className:"size-6 rounded-md","aria-label":"重新连接",onClick:o,children:(0,eb.jsx)(Xf,{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,eA.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)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"连接浏览器失败"}),o?(0,eb.jsx)(eI.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)(Xu,{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)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"浏览器已停止"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:d,children:[(0,eb.jsx)(VM,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xu,{className:"size-5"}),(0,eb.jsx)("span",{children:"等待 agent 操作后显示画面"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"xs",variant:"outline",className:"gap-1",onClick:()=>h(!0),children:[(0,eb.jsx)(eO,{className:"size-3.5"}),"开启浏览器监视以查看实时画面"]})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Xu,{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,eA.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 Xm(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}/browser${t}`):(0,eT.localAPIURL)(`/v1/browser${t}`)}async function Xp(e,t){try{await fetch(Xm(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function Xg({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xC(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await GV(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(Xm(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 GG(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{GX(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=>{Xp(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await GK(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await GV(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)(Xh,{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 Xx({defaultUrl:e,className:t}){let{machines:n}=xC(),[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 GV(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)(Xg,{active:!0,className:t}):(0,eb.jsx)(Xd,{className:t,defaultUrl:e})}let Xv=[{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"}],Xb=Array.from(new Set(Xv.flatMap(e=>e.tags))).sort(),Xy=[["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"]],Xw=[["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 Xj({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,eA.cn)("mx-auto flex w-full justify-center",e),...t})}function Xk({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,eA.cn)("flex flex-row items-center gap-1",e),...t})}function XN({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function XS({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,eA.cn)((0,eI.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function XC({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(XS,{"aria-label":t,size:"default",className:(0,eA.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(m2,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function XM({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(XS,{"aria-label":t,size:"default",className:(0,eA.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)(m5,{})]})}function XE({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,eA.cn)("flex size-8 items-center justify-center",e),...n,children:[(0,eb.jsx)(lG,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:t})]})}function XP({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XO(){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)(Xz,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(Xz,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XA,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XT,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return Xv.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)(XP,{title:"防火墙策略"}),(0,eb.jsxs)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{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)(xM,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(ez,{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)(gL,{value:n,onValueChange:r,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"全部标签"})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"all",children:"全部标签"}),Xb.map(e=>(0,eb.jsx)(xw,{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)(mq,{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)(mW,{value:"allow",children:"允许"}),(0,eb.jsx)(mW,{value:"drop",children:"丢弃"}),(0,eb.jsx)(mW,{value:"deny",children:"拒绝"}),(0,eb.jsx)(mW,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qv,{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)(XI,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XI({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)(Xj,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(Xk,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(XN,{children:(0,eb.jsx)(XC,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,eA.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)(XN,{children:(0,eb.jsx)(XS,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(XN,{children:(0,eb.jsx)(XE,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(XN,{children:(0,eb.jsx)(XS,{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)(XN,{children:(0,eb.jsx)(XE,{moreLabel:"更多页"})}):null,(0,eb.jsx)(XN,{children:(0,eb.jsx)(XS,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(XN,{children:(0,eb.jsx)(XM,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,eA.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XA({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)(Bm,{variant:t,children:e},e))})}function Xz({zone:e}){return(0,eb.jsx)(Bm,{variant:"Trust"===e?"secondary":"outline",children:e})}function XT({action:e}){return(0,eb.jsx)(Bm,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XR({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,eA.cn)("w-full caption-bottom text-sm",e),...t})})}function XD({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,eA.cn)("[&_tr]:border-b",e),...t})}function X_({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,eA.cn)("[&_tr:last-child]:border-0",e),...t})}function XL({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,eA.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function X$({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,eA.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 XF({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,eA.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function XB({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XV({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)(XB,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XR,{children:[(0,eb.jsx)(XD,{children:(0,eb.jsx)(XL,{children:t.map(e=>(0,eb.jsx)(X$,{children:e},e))})}),(0,eb.jsx)(X_,{children:n.map(e=>(0,eb.jsx)(XL,{children:e.map((e,t)=>(0,eb.jsx)(XF,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function XH(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(XB,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(ez,{placeholder:"策略名称"}),(0,eb.jsx)(ez,{placeholder:"负责人"}),(0,eb.jsx)(ez,{placeholder:"源 CIDR"}),(0,eb.jsx)(ez,{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)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{className:"size-4"}),"提交申请"]})})]})}function XU(){return(0,eb.jsxs)(mm,{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)(mk,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mN,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mN,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mN,{value:"renewals",children:"续期"}),(0,eb.jsx)(mN,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mN,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mS,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XO,{})}),(0,eb.jsx)(mS,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:Xy})}),(0,eb.jsx)(mS,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"续期",headers:["策略","续期时间","负责人"],rows:Xw})}),(0,eb.jsx)(mS,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XH,{})}),(0,eb.jsx)(mS,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XV,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function Xq(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 XW(e,t){let n=t.machineId||"local";return Xq((await uY(n,e.path)).items)}function XK({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 uX();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:Xq(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)(HY,{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:XW,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function XG({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dE,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fw,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fN,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fS,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(XK,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function XX(){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 XY=(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 XZ({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)(j$,{className:"size-4"}):(0,eb.jsx)(XY,{className:"size-4"}),pressed:n,onClick:()=>i(!n)},{key:"add",label:"新建文件窗口",icon:(0,eb.jsx)(lY,{className:"size-4"}),pressed:void 0,onClick:a}];return(0,eb.jsx)("div",{className:(0,eA.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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,title:t.label,onClick:t.onClick,className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let XJ=[];function XQ(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function X0(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?X0(n.children,t):void 0;if(e)return e}}function X1(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function X2(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function X5(e){return e.map(e=>({...e,children:e.children?X5(e.children):void 0}))}let X4=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),X3=(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"}]]),X6=(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"}]]),X8={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function X7({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={...X8,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,P]=ew.useState(n),[O,I]=ew.useState(),[A,z]=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){P(!1),z({canScrollDown:!1,canScrollUp:!1});return}P(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),z({canScrollUp:!1,canScrollDown:G>X});let e=window.setTimeout(()=>{P(!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,eA.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),I(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),I(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),I(void 0)))},onDragOver:function(e){!s||en(e)||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",_(!0),U?I(et(e)):I(0))},onDrop:function(t){if(!s||en(t))return;t.preventDefault(),t.stopPropagation();let n=O??et(t);L.current=0,_(!1),I(void 0),x?.({insertIndex:n,items:e,nativeEvent:t})},...y,children:[(0,eb.jsxs)("div",{"data-slot":"clipboard-stack-header",className:(0,eA.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)(X6,{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,eA.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,eA.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,eA.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,eA.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;z({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===O)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(O>n?O-1:O,a.length));a.splice(i,0,r),I(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!==O?(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*O-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)(X9,{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();I(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),I(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&&A.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&&A.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 X9({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,eA.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)(X6,{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,eA.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,eA.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)(fC,{className:"size-3.5"})})]})})}function Ye({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} 项`:Yn(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)(eP,{className:"size-4"}):"failed"===r.status?(0,eb.jsx)(X3,{className:"size-4"}):"running"===r.status?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"copy"===r.mode?(0,eb.jsx)(lV,{className:"size-4"}):(0,eb.jsx)(X4,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(Yt,{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)(X7,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function Yt({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:Yn(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:[Yr(e.progress.bytesDone)," /"," ",Yr(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:Yn(e.progress.currentPath)}):null]})]})}function Yn(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function Yr(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 Ya=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function Yi({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,eA.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)(eI.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"关闭窗口",onPointerDown:e=>e.stopPropagation(),onClick:o,children:(0,eb.jsx)(fb.XIcon,{})}),(0,eb.jsx)(eI.Button,{type:"button",size:"icon-sm",variant:"ghost","aria-label":"缩小到剪切板",onPointerDown:e=>e.stopPropagation(),onClick:l,children:(0,eb.jsx)(Ya,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(wZ,{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 Yo({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=XX(),[l,s]=ew.useState([]),[c,d]=ew.useState(XJ),[u,f]=ew.useState(XJ[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(XJ.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await uY(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:X1(e.path,a.path)?{...e,children:X5(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=X2(e,n),a=X2(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 X5(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return X5(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>X1(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=Yc((await u5()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>Yc([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{u2({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 P(e,t){d(n=>n.map(n=>n.id===e?t(n):n))}function O(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??XQ(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 uX();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:XQ(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 I=sv(),A=c.find(e=>e.id===u);function z(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;P(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:XQ(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{uQ({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{u0({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{u1({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=X0(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 I?(0,eb.jsxs)("div",{className:(0,eA.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,eA.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:A?(0,eb.jsx)(Yl,{windowLayout:A,roots:l,...z(A)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(Ye,{transfers:h}),(0,eb.jsx)(XZ,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),O()}}),(0,eb.jsx)(Ys,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]}):(0,eb.jsxs)("div",{ref:i,className:(0,eA.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(),O({...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)(Yi,{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=>P(n.id,()=>e),...z(n),onNavigate:({rootId:e,path:t})=>{let r=l.find(t=>t.id===e),a=r?.machineId??n.machineId;P(n.id,n=>({...n,machineId:a,rootId:e,path:t,title:XQ(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{uQ({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{u0({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{u1({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=X0(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)(Ye,{transfers:h}),(0,eb.jsx)(XZ,{open:p,placement:a,movePermissionGranted:x,onOpenChange:g,onMovePermissionGrantedChange:v,onAdd:()=>{g(!1),O()}}),(0,eb.jsx)(Ys,{move:b,onCancel:()=>y(void 0),onConfirm:e=>{y(void 0),M(e)}})]})}function Yl({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(wZ,{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 Ys({move:e,onCancel:t,onConfirm:n}){var r;let a=e?.sources??[],i=Math.max(0,a.length-4);return(0,eb.jsx)(d6,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"确认移动"}),(0,eb.jsx)(uv,{children:e?`将 ${1===(r=a).length?r[0]?Yd(r[0]):"0 项":`${r.length} 项`} 移动到 ${Yd(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:Yd(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:Yd(e.target)})]})]}):null,(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function Yc(e){return e.slice(0,10)}function Yd(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function Yu({className:e}){return(0,eb.jsx)(Yo,{className:(0,eA.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var Yf=ew;function Yh(){return(Yh=Object.assign.bind()).apply(null,arguments)}var Ym=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jU.clsx)("recharts-dot",a);return kw(t)&&kw(n)&&kw(r)?ew.createElement("circle",Yh({},AW(e),zx(e),{className:i,cx:t,cy:n,r:r})):null},Yp=["points"];function Yg(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 Yx(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yg(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)):Yg(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yv(){return(Yv=Object.assign.bind()).apply(null,arguments)}function Yb(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,jU.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,Yp);return ew.createElement(Ym,Yv({},l,{className:a}))}function Yy(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=C1.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Ti(n),u=null==n?null:(0,ew.isValidElement)(n)?AG(n.props):"object"!=typeof n||Array.isArray(n)?null:AG(n),f=t.map((e,r)=>{var l,s,c=Yx(Yx(Yx({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(Yb,{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(_G,{zIndex:c},ew.createElement(AZ,Yv({className:r},h),f))}function Yw(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 Yj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yw(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)):Yw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Yk=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=Yj(Yj(Yj({},{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}),AK(i)),zx(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(Ym,s),ew.createElement(AZ,{className:"recharts-active-dot",clipPath:l},t)};function YN(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=C1.activeDot}=e,l=No(_a),s=No(_h);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_G,{zIndex:o},ew.createElement(Yk,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function YS(e,t){var n,r,a=No(t=>OH(t,e)),i=No(e=>OW(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:OB.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:OU.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function YC(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=No(F7),{needClipX:i,needClipY:o,needClip:l}=YS(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 YM(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 YE(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 YP=(e,t,n)=>Ax(e,"xAxis",YM(e,t),n),YO=(e,t,n)=>Ag(e,"xAxis",YM(e,t),n),YI=(e,t,n)=>Ax(e,"yAxis",YE(e,t),n),YA=(e,t,n)=>Ag(e,"yAxis",YE(e,t),n),Yz=j7([CC,YP,YI,YO,YA],(e,t,n,r,a)=>kL(e,"xAxis")?kK(t,r,!1):kK(n,a,!1)),YT=j7([OQ,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YR=e=>kL(CC(e),"xAxis")?"yAxis":"xAxis",YD=j7([YT,(e,t,n)=>Im(e,YR(e),"yAxis"===YR(e)?YE(e,t):YM(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=Mu(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]])}}}),Y_=j7([CC,YP,YI,YO,YA,YD,kr,Yz,YT,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(kw(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=k_(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==k_(e,a);return x?{x:kH({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:kH({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 YL(e){var t=AK(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 Y$=["id"],YF=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function YB(){return(YB=Object.assign.bind()).apply(null,arguments)}function YV(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 YH(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?YH(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)):YH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Yq(e,t){return e&&"none"!==e?e:t}var YW=Yf.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:kI,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kX(o,t),hide:l,type:c,color:Yq(r,i),unit:s,graphicalItemId:d}};return Yf.createElement(Dd,{tooltipEntrySettings:u})});function YK(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=AW(r);return Yf.createElement(Yy,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function YG(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 YU(YU({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return Yf.createElement(Ls,{value:t?a:void 0},n)}function YX(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=YV(i,Y$),h=AW(f),m=AG(f);return Yf.createElement(Yf.Fragment,null,(null==t?void 0:t.length)>1&&Yf.createElement(AZ,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},Yf.createElement(zM,YB({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&Yf.createElement(zM,YB({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&Yf.createElement(zM,YB({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),Yf.createElement(YK,{points:t,props:f,clipPathId:a}))}function YY(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(!kz(l)||!kz(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kw(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kw(d))?Yf.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function YZ(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(!kz(l)||!kz(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kw(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kw(d))?Yf.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function YJ(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?Yf.createElement(YY,{alpha:t,points:r,baseLine:a,strokeWidth:i}):Yf.createElement(YZ,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function YQ(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=TP((0,Yf.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CM(),[g,x]=(0,Yf.useState)(!1),v=(0,Yf.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,Yf.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return Yf.createElement(YG,{showLabels:!g,points:o},r.children,Yf.createElement(TE,{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 YU(YU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return t});if(kw(l))c=kM(w,l,e);else c=null==l||kb(l)?kM(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return YU(YU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),Yf.createElement(YX,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),Yf.createElement(AZ,null,s&&Yf.createElement("defs",null,Yf.createElement("clipPath",{id:"animationClipPath-".concat(n)},Yf.createElement(YJ,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),Yf.createElement(AZ,{clipPath:"url(#animationClipPath-".concat(n,")")},Yf.createElement(YX,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),Yf.createElement(Lf,{label:r.label}))}function Y0(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,Yf.useRef)(null),i=(0,Yf.useRef)();return Yf.createElement(YQ,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class Y1 extends Yf.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,jU.clsx)("recharts-area",r),{r:p,strokeWidth:g}=YL(t),x=Ti(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return Yf.createElement(_G,{zIndex:h},Yf.createElement(AZ,{className:m},o&&Yf.createElement("defs",null,Yf.createElement(YC,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&Yf.createElement("clipPath",{id:"clipPath-dots-".concat(u)},Yf.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),Yf.createElement(Y0,{needClip:o,clipPathId:u,props:this.props})),Yf.createElement(YN,{points:n,mainColor:Yq(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&Yf.createElement(YN,{points:f,mainColor:Yq(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var Y2={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:C1.area};function Y5(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=YV(e,YF),x=No(CC),v=No(CW),{needClip:b}=YS(m,p),y=Ct(),{points:w,isRange:j,baseLine:k}=null!=(t=No(t=>Y_(t,e.id,y)))?t:{},N=No(F7);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?Yf.createElement(Y1,YB({},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 Y4=Yf.memo(function(e){var t=zK(e,Y2),n=Ct();return Yf.createElement(_S,{id:t.id,type:"area"},e=>Yf.createElement(Yf.Fragment,null,Yf.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Yq(r,a),value:kX(n,t),payload:e}]})(t)}),Yf.createElement(YW,{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}),Yf.createElement(_T,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:kV(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),Yf.createElement(Y5,YB({},t,{id:e}))))},FC);function Y3(){return(Y3=Object.assign.bind()).apply(null,arguments)}function Y6(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}Y4.displayName="Area";var Y8=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y6(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)):Y6(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"},Fm),Y7=(0,ew.forwardRef)(function(e,t){var n,r=zK(e.categoricalChartProps,Y8),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fk,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(FN,{chartData:s.data}),ew.createElement(FM,{layout:r.layout,margin:r.margin}),ew.createElement(FP,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(FE,{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(Bn,Y3({},r,{ref:t})))}),Y9=["axis"],Ze=(0,ew.forwardRef)((e,t)=>ew.createElement(Y7,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Y9,tooltipPayloadSearcher:LA,categoricalChartProps:e,ref:t})),Zt=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 Zn(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 Zr(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 Za(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 Zi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Za(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)):Za(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zo(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(kw(c)||zE.isSsr)return null!=(r=Zn(i,(kw(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?zR(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=zR(i,{fontSize:t,letterSpacing:n}),Zt({width:a.width+m.width,height:a.height+m.height},f)):zR(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kv(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:Zn(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Zr(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||Zr(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=Zi(Zi({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Zr(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Zi(Zi({},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=Zi(Zi({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Zi(Zi({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Zr(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Zi(Zi({},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=Zi(Zi({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Zi(Zi({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Zr(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Zi(Zi({},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 Zl=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function Zs(){return(Zs=Object.assign.bind()).apply(null,arguments)}function Zc(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 Zd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zc(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)):Zc(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Zu={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:C1.axis};function Zf(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=Zd(Zd(Zd({},s),AW(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=Zd(Zd({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=Zd(Zd({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",Zs({},c,{className:(0,jU.clsx)("recharts-cartesian-axis-line",(0,jH.default)(l,"className"))}))}function Zh(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jU.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,Zd(Zd({},r),{},{className:i}));else if("function"==typeof n)t=n(Zd(Zd({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jU.clsx)(o,Lh(n))),t=ew.createElement(z8,Zs({},r,{className:o}),a)}return t}function Zm(e){var{ticks:t,axisType:n,axisId:r}=e,a=Nn();return(0,ew.useEffect)(()=>null==r||null==n?kI:(a(Fb({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(Fy({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zp=(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=Zo(Zd(Zd({},y),{},{ticks:n}),v,b),S=AW(y),C=AK(r),M=z0(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),P={};"object"==typeof a&&(P=a);var O=Zd(Zd({},S),{},{fill:"none"},P),I=N.map(e=>Zd({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=kw(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))),A=I.map(e=>{var{entry:t,line:n}=e;return ew.createElement(AZ,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(t.value,"-").concat(t.coordinate,"-").concat(t.tickCoord)},a&&ew.createElement("line",Zs({},O,n,{className:(0,jU.clsx)("recharts-cartesian-axis-tick-line",(0,jH.default)(a,"className"))})))}),z=I.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=Zd(Zd(Zd(Zd({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=Zd(Zd({},f),C);return ew.createElement(AZ,Zs({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},zv(w,d,t)),r&&ew.createElement(Zh,{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(Zm,{ticks:N,axisId:k,axisType:j}),z.length>0&&ew.createElement(_G,{zIndex:C1.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},z)),A.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},A))}),Zg=(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,Zl),[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(_G,{zIndex:e.zIndex},ew.createElement(AZ,{className:(0,jU.clsx)("recharts-cartesian-axis",i)},ew.createElement(Zf,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:AW(e)}),ew.createElement(Zp,{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(_4,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(Lt,{label:e.label,labelRef:e.labelRef}),e.children)))}),Zx=ew.forwardRef((e,t)=>{var n=zK(e,Zu);return ew.createElement(Zg,Zs({},n,{ref:t}))});Zx.displayName="CartesianAxis";var Zv=["x1","y1","x2","y2","key"],Zb=["offset"],Zy=["xAxisId","yAxisId"],Zw=["xAxisId","yAxisId"];function Zj(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 Zk(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zj(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)):Zj(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZN(){return(ZN=Object.assign.bind()).apply(null,arguments)}function ZS(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 ZC=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 ZM(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=AW(ZS(n,Zv)))?a:{},{offset:u}=d,f=ZS(d,Zb);r=ew.createElement("line",ZN({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function ZE(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=ZS(e,Zy),s=a.map((e,a)=>{var i=Zk(Zk({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(ZM,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function ZP(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=ZS(e,Zw),s=a.map((e,a)=>{var i=Zk(Zk({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(ZM,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZO(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 ZI(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 ZA=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return k$(Zo(Zk(Zk(Zk({},Zu),n),{},{ticks:kF(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},Zz=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return k$(Zo(Zk(Zk(Zk({},Zu),n),{},{ticks:kF(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZT={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:C1.grid};function ZR(e){var t=No(kY),n=No(kZ),r=CS(),a=Zk(Zk({},zK(e,ZT)),{},{x:kw(e.x)?e.x:r.left,y:kw(e.y)?e.y:r.top,width:kw(e.width)?e.width:r.width,height:kw(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=Ct(),p=No(e=>Am(e,"xAxis",i,m)),g=No(e=>Am(e,"yAxis",o,m));if(!kT(c)||!kT(d)||!kw(l)||!kw(s))return null;var x=a.verticalCoordinatesGenerator||ZA,v=a.horizontalCoordinatesGenerator||Zz,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?Zk(Zk({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Ci(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?Zk(Zk({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Ci(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_G,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(ZC,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZO,ZN({},a,{horizontalPoints:b})),ew.createElement(ZI,ZN({},a,{verticalPoints:y})),ew.createElement(ZE,ZN({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(ZP,ZN({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZR.displayName="CartesianGrid";var ZD=["domain","range"],Z_=["domain","range"];function ZL(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 Z$(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 ZF(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=ZL(e,ZD),{domain:i,range:o}=t,l=ZL(t,Z_);return!!Z$(n,i)&&!!Z$(r,o)&&FC(a,l)}var ZB=["type"],ZV=["dangerouslySetInnerHTML","ticks","scale"],ZH=["id","scale"];function ZU(){return(ZU=Object.assign.bind()).apply(null,arguments)}function Zq(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 ZW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zq(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)):Zq(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZK(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 ZG(e){var t=Nn(),n=(0,ew.useRef)(null),r=CM(),{type:a}=e,i=ZK(e,ZB),o=C3(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return ZW(ZW({},i),{},{type:o})},[i,o]);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}var ZX=e=>{var{xAxisId:t,className:n}=e,r=No(k7),a=Ct(),i="xAxis",o=No(e=>Ap(e,i,t,a)),l=No(e=>Ai(e,t)),s=No(e=>As(e,t)),c=No(e=>OV(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=ZK(e,ZV),{id:m,scale:p}=c,g=ZK(c,ZH);return ew.createElement(Zx,ZU({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jU.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},ZY={allowDataOverflow:OB.allowDataOverflow,allowDecimals:OB.allowDecimals,allowDuplicatedCategory:OB.allowDuplicatedCategory,angle:OB.angle,axisLine:Zu.axisLine,height:OB.height,hide:!1,includeHidden:OB.includeHidden,interval:OB.interval,label:!1,minTickGap:OB.minTickGap,mirror:OB.mirror,orientation:OB.orientation,padding:OB.padding,reversed:OB.reversed,scale:OB.scale,tick:OB.tick,tickCount:OB.tickCount,tickLine:Zu.tickLine,tickSize:Zu.tickSize,type:OB.type,niceTicks:OB.niceTicks,xAxisId:0},ZZ=ew.memo(e=>{var t=zK(e,ZY);return ew.createElement(ew.Fragment,null,ew.createElement(ZG,{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(ZX,t))},ZF);ZZ.displayName="XAxis";var ZJ=["type"],ZQ=["dangerouslySetInnerHTML","ticks","scale"],Z0=["id","scale"];function Z1(){return(Z1=Object.assign.bind()).apply(null,arguments)}function Z2(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 Z5(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z2(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)):Z2(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Z4(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 Z3(e){var t=Nn(),n=(0,ew.useRef)(null),r=CM(),{type:a}=e,i=Z4(e,ZJ),o=C3(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Z5(Z5({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($b(l)):n.current!==l&&t($y({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($w(n.current)),n.current=null)},[t]),null}function Z6(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=No(k7),s=Ct(),c=Nn(),d="yAxis",u=No(e=>Ad(e,t)),f=No(e=>Ac(e,t)),h=No(e=>Ap(e,d,t,s)),m=No(e=>Oq(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||_8(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($S({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=Z4(e,ZQ),{id:b,scale:y}=m,w=Z4(m,Z0);return ew.createElement(Zx,Z1({},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,jU.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Z8={allowDataOverflow:OU.allowDataOverflow,allowDecimals:OU.allowDecimals,allowDuplicatedCategory:OU.allowDuplicatedCategory,angle:OU.angle,axisLine:Zu.axisLine,hide:!1,includeHidden:OU.includeHidden,interval:OU.interval,label:!1,minTickGap:OU.minTickGap,mirror:OU.mirror,orientation:OU.orientation,padding:OU.padding,reversed:OU.reversed,scale:OU.scale,tick:OU.tick,tickCount:OU.tickCount,tickLine:Zu.tickLine,tickSize:Zu.tickSize,type:OU.type,niceTicks:OU.niceTicks,width:OU.width,yAxisId:0},Z7=ew.memo(e=>{var t=zK(e,Z8);return ew.createElement(ew.Fragment,null,ew.createElement(Z3,{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(Z6,t))},ZF);function Z9({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,eA.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)(mm,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mk,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mN,{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,eA.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)(Ji,{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)(Je,{metric:d}):null]})]})]})}function Je({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Jr,{segments:e.composition}),(0,eb.jsx)(Ja,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Jt,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jt,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Jn,{}),(0,eb.jsx)(Ja,{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)(Jt,{panel:e},e.id))}),(0,eb.jsx)(Ja,{details:e.details,columns:3})]})}function Jt({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,eA.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)(Jo,{data:e.data,color:e.color,className:(0,eA.cn)("w-full",n)})]})}function Jn(){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 Jr({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,eA.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 Ja({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,eA.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 Ji({data:e,color:t}){return(0,eb.jsx)(Jo,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Jo({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)(Vo,{config:o,className:(0,eA.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Ze,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZR,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(ZZ,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Z7,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(BY,{cursor:!1,content:(0,eb.jsx)(Vs,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(Y4,{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})]})})}Z7.displayName="YAxis";let Jl=(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"}]]),Js=(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"}]]),Jc={name:"名称",cpu:"CPU",memoryMb:"内存",diskMbps:"磁盘",networkMbps:"网络"};function Jd({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(Jg(a))?t:e(a,n,r)}(a,n),i=Jg(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:Jv(Math.min(100,e.cpu)),memoryMb:Jv(e.memoryMb),diskMbps:Jv(e.diskMbps),networkMbps:Jv(e.networkMbps)}))}(f.processes)].sort((e,t)=>Jx(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jp(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>Jx(e,t,o,s)))t.push(Jp(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,eA.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)(mm,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mk,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mN,{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)(Ju,{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:[Jc[e],(0,eb.jsx)(Ju,{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,eA.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)(Jf,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(Jh,{platform:f.platform,status:e.status}),(0,eb.jsx)(Jm,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(Jm,{value:e.memoryMb,max:Jb(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${Jy(t/1024)} GB`:`${Jy(t)} MB`}),(0,eb.jsx)(Jm,{value:e.diskMbps,max:Math.max(1,Jb(m,"diskMbps")),label:`${Jy(e.diskMbps)} MB/秒`}),(0,eb.jsx)(Jm,{value:e.networkMbps,max:Math.max(1,Jb(m,"networkMbps")),label:`${Jy(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function Ju({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jD:jR,{className:(0,eA.cn)("ml-1 size-3",n)}):null}function Jf({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xp:m5;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,eA.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 Jh({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)(Js,{"aria-label":"linux"===e?"挂起进程":"挂起",className:"size-4"}):null,t.includes("auto-restart")?(0,eb.jsx)(lZ,{"aria-label":"linux"===e?"自动重启进程":"自动重启",className:"size-4"}):null,t.includes("running")?(0,eb.jsx)(Jl,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function Jm({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,eA.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jp(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 Jg(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function Jx(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 Jv(e){return Math.round(10*e)/10}function Jb(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function Jy(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function Jw({className:e}){let t=Jk("/api/local/machines/processes"),n=JN("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Jd,{machines:r,className:(0,eA.cn)("h-full min-h-0 w-full",e)})}function Jj({className:e}){let t=Jk("/api/local/machines/performance"),n=JN("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Z9,{machines:r,className:(0,eA.cn)("h-full min-h-0 w-full",e)})}function Jk(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((0,eT.localAPIURL)(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 JN(e){let{machines:t}=xC(),[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 sy(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 JS=(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"}]]),JC=(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"}]]),JM={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},JE=[{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 JP(e,t,n){return e.getPropertyValue(t).trim()||n}function JO(e,t=!1){let n=getComputedStyle(e),r=JP(n,"--foreground","#18181b"),a=JP(n,"--terminal-background",JP(n,"--background","#ffffff")),i="transparent"===a?JP(n,"--background","#ffffff"):a,o=JP(n,"--muted-foreground","#71717a"),l=JP(n,"--border","#e4e4e7"),s=JP(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:JP(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:JP(n,"--terminal-red","#bf616a"),green:JP(n,"--terminal-green","#5e8c61"),yellow:JP(n,"--terminal-yellow","#b06f3c"),blue:JP(n,"--terminal-blue","#5e81ac"),magenta:JP(n,"--terminal-magenta","#b48ead"),cyan:JP(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:JP(n,"--terminal-bright-red","#d06f79"),brightGreen:JP(n,"--terminal-bright-green","#6b9a70"),brightYellow:JP(n,"--terminal-bright-yellow","#c2824b"),brightBlue:JP(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:JP(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:JP(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JI(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JA({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:JM.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,P]=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=JP(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:JO(g.current),...j.current,allowTransparency:!0}),E=new h,O=new m,I=new p;function A(){try{E.fit(),y.current?.({cols:C.cols,rows:C.rows})}catch{}}for(let e of(C.loadAddon(E),C.loadAddon(O),C.loadAddon(I),C.open(g.current),x.current=C,v.current=E,P(!0),requestAnimationFrame(A),(n=new ResizeObserver(A)).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))})),JI(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:O,webLinksAddon:I,fit:A,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=JO(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=JO(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,P(!1)}},[o,t]),ew.useEffect(()=>{let e=x.current;if(e&&C.current!==r)for(let t of(C.current=r,JI(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,eA.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,eA.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 Jz({status:e="idle"}){return"running"===e?(0,eb.jsx)(JS,{className:"size-3.5 text-foreground"}):"success"===e?(0,eb.jsx)(eP,{className:"size-3.5 text-foreground"}):"error"===e?(0,eb.jsx)(eE,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(yO,{className:"size-3.5 text-muted-foreground"})}function JT({session:e}){return e.aiControlled?(0,eb.jsx)(JC,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(Jz,{status:e.status})}function JR({sessions:e,defaultSessions:t=JE,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(()=>({...JM,...g,status:{...JM.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),P=N.find(e=>e.id===E)??S;function O(t){void 0===e&&k(t),i?.(t)}function I(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,eA.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,eA.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uA,{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===P?.id;return(0,eb.jsxs)("div",{className:(0,eA.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:()=>I(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)(JT,{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(O(n),e.id===E){let e=n.at(-1);e&&I(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)(fb.XIcon,{className:"size-3"})})]},e.id)})}),f&&(0,eb.jsx)(eI.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};O([...N,e]),I(e)},className:"size-7 shrink-0",children:(0,eb.jsx)(lY,{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===P?.id;return(0,eb.jsx)(JD,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JD({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)(JA,{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 J_({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),P=ew.useRef(r),O=Array.isArray(n?.sessionIds)?n.sessionIds.join("\0"):"__all__",I=t?.trim()||void 0,A=I??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{P.current=r},[r]);let z=a.find(e=>e.id===d)??a[0],T=z?.shells?.find(e=>e.id===f)??z?.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(0,eT.localAPIURL)(`/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(z&&!m){M.current=!1,p(!0);try{let e=await fm({machineId:z.id,scopeId:I,shell:T?.id,cwd:z.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,z,T,I]);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([ff(),fh(I)]);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}},[O,I,A]),ew.useEffect(()=>{g&&P.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,eA.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)(gL,{value:z?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xx,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bi,{className:"size-3.5"}),(0,eb.jsx)(gV,{placeholder:"机器"})]}),(0,eb.jsx)(xy,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gL,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xx,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(gV,{placeholder:"Shell"})}),(0,eb.jsx)(xy,{align:"start",children:z?.shells?.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!z||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lY,{className:"size-4"})})]}),(0,eb.jsx)(JR,{sessions:o.map(JL),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}),fp(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,fg(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),fx(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 JL(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 J$(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=uW("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Ut,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(GN,{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)(Xx,{className:`${n} border-0`,defaultUrl:e.defaultUrl??uW("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=uW("diff-tab-viewer");return(0,eb.jsx)(qP,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=uW("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Ut,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qv,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:JF(e)},source:void 0!==e.defaultValue?{type:JF(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(J_,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function JF(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function JB(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)(GE,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:uq(n.kind),content:J$(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:[G7],createLabel:"打开文件",emptyContent:(0,eb.jsx)(Ut,{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)(H9,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(XK,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(Jw,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(Jj,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(XU,{})});case"machine-file-management":return(0,eb.jsx)(Yu,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HA,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(G4,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GT,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(GR,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"tasks-pane":return(0,eb.jsx)(G6,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"sidequery-pane":return(0,eb.jsx)(GD,{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 J$(t.tab??uW(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 JV({kind:e,...t}){return JB(e,t)}let JH="application/vnd.vantaloom.agent-pane-shredder",JU="application/vnd.vantaloom.agent-pane-cutter";function Jq(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 JW=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(ba,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(Uy,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(Uh,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(s9,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(ct,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(Uy,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(Ub,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Uv,{})}];function JK(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 JG(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function JX(e,t){return[e[t[0]]??50,e[t[1]]??50]}function JY({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=JK(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(a,e),onLayoutChanged:e=>n?.("outer",JX(e,a)),children:[(0,eb.jsx)(hM,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=JK(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(a,e),onLayoutChanged:e=>n?.("outer",JX(e,a)),children:[(0,eb.jsx)(hM,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=JK(t,"outer",[58,42]),a=JK(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("left",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=JK(t,"outer",[42,58]),a=JK(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("right",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=JK(t,"outer",[58,42]),a=JK(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("top",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=JK(t,"outer",[42,58]),a=JK(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(i,e),onLayoutChanged:e=>n?.("outer",JX(e,i)),children:[(0,eb.jsx)(hM,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(o,a),onLayoutChanged:e=>n?.("bottom",JX(e,o)),children:[(0,eb.jsx)(hM,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=JK(t,"outer"),i=JK(t,"left"),o=JK(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:JG(l,a),onLayoutChanged:e=>n?.("outer",JX(e,l)),children:[(0,eb.jsx)(hM,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(s,i),onLayoutChanged:e=>n?.("left",JX(e,s)),children:[(0,eb.jsx)(hM,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hC,{direction:"vertical",defaultLayout:JG(c,o),onLayoutChanged:e=>n?.("right",JX(e,c)),children:[(0,eb.jsx)(hM,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hE,{withHandle:!0}),(0,eb.jsx)(hM,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function JZ({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,eA.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(JU)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(JH)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jz)&&(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(JU)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(JH)){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?.[jz]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jz);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,eA.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:jA(r)?JB(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{Jq(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)(HA,{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)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"rounded-full bg-background/90",onClick:o,"data-tour":"pane-add",children:[(0,eb.jsx)(lY,{className:"size-4"}),"添加"]})})})}function JJ({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vy,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vj,{children:[(0,eb.jsx)(vk,{children:"没有匹配组件。"}),(0,eb.jsx)(vN,{heading:"可放入窗口",children:jP.map(e=>(0,eb.jsxs)(vS,{"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)(vC,{children:"添加"})]},e.id))})]})]})})}function JQ({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jA(e)?JB(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{Jq(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)(HA,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let J0=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(uw,{})},{kind:"sidequery-pane",label:"旁问",icon:(0,eb.jsx)(s7,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uN,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(Up,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(Ux,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(Um,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uA,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(Ug,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uE,{})}];function J1(e,t,n){return Math.min(n,Math.max(t,e))}function J2({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",children:[(0,eb.jsx)(lY,{className:"size-4"}),"添加窗口",(0,eb.jsx)(xp,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(y1,{align:t,sideOffset:6,className:"min-w-40",children:J0.map(t=>(0,eb.jsxs)(y2,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function J5({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,P]=ew.useState(null),O=ew.useRef(null),I=ew.useRef(null),A=ew.useRef(null),z=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=O.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=>{I.current?function(e,t){let n=O.current,r=I.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){A.current=null,P(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";A.current={id:i,edge:h};let m=n.getBoundingClientRect();P(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):z.current&&function(e,t){let n=z.current;if(!n)return;if("width"===n.kind){let t=J1(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=J1(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=I.current;if(e){var t,n;let r=A.current;I.current=null,A.current=null,M(null),P(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}z.current&&(z.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,eA.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(J2,{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:O,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,eA.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,eA.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(),I.current=t,A.current=null,M(t),P(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)(fC,{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)(fb.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(JQ,{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(),z.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(),z.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;z.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,eA.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":z.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let J4="vtl:workspace-layout-mode",J3="vtl:workspace-agent-side",J6="vtl:workspace-layout-changed",J8={mode:"pane",agentSide:"left"};function J7(){let e=J8.mode,t=J8.agentSide;try{let n=window.localStorage.getItem(J4);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(J3);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function J9(e){try{e.mode&&window.localStorage.setItem(J4,e.mode),e.agentSide&&window.localStorage.setItem(J3,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(J6))}function Qe({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 sI(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=Hd(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(m5,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,eA.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,eA.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)(hI,{className:"size-3"}),"已暂停"]}):(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-emerald-600 dark:text-emerald-500",children:[(0,eb.jsx)(eP,{className:"size-3"}),"完成"]})})]}),(0,eb.jsx)("div",{className:"relative min-h-0 flex-1",children:l?(0,eb.jsx)(V4,{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 Qt=[],Qn="vantaloom:file-system-changed";function Qr(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 Qa(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 Qi(e){var t;let n=(t=e?.layoutMode,JW.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:Qo(e.outer),left:Qo(e.left),right:Qo(e.right),top:Qo(e.top),bottom:Qo(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,JW.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:Qs(i.title)??"Subagent",subagentId:Qs(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jO(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>uU(e?.kind)):void 0,s=jO(e.kind);return{id:a,kind:e.kind,title:Qs(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:Qs(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:Qs(r.activeSessionId),selectedMachineId:Qs(r.selectedMachineId),selectedShellId:Qs(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 Qo(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 Ql(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function Qs(e){return"string"==typeof e&&e.trim()?e:void 0}function Qc(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function Qd(e){return e.reduce((e,t)=>Math.max(e,Qc(t)),0)}function Qu({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=sv(),m=ew.useRef(null),p=ew.useRef(void 0),g=Qi(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(J8);return ew.useEffect(()=>{t(J7());let e=()=>t(J7());return window.addEventListener(J6,e),window.addEventListener("storage",e),()=>{window.removeEventListener(J6,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,P]=ew.useState(g.layoutSizes),[O,I]=ew.useState(()=>g.panes),[A,z]=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(()=>Uc(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Us(e));window.localStorage.setItem(Us(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>Uu(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,eP]=ew.useState(!1),eO=ew.useRef(em),[ez,eR]=ew.useState(),[eD,e_]=ew.useState(),[eL,e$]=ew.useState(),eF=ew.useRef(Qd(g.panes)),eB=ew.useRef(0),eV=ew.useRef(""),eH=JW.find(e=>e.id===x)?.slots??4,eU=e?.conversation.settings.folders??Qt,{models:eq}=xY(),eW=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?eq.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[eq,e?.conversation.settings.mainModels]),eK=js(e?.conversation.settings.engine),eG=ew.useMemo(()=>{if(eK){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jc(t),disabled:!0}]}return eW},[eK,e?.conversation.settings.ccModel,eW]),eX=!eK&&0===eW.length,[eY,eZ]=ew.useState(!1),eJ=ef||"working"===em||eY,eQ=ew.useCallback(async t=>{if(!e||eE)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(eK){if(eJ)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"),hH.error(e instanceof Error?e.message:"压缩请求失败")}return}if(eJ)return void await s2(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eP(!0);try{let e=await s4(n,t,void 0,r),a=await sI(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));hH.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hH.error(e instanceof Error?e.message:"压缩失败")}finally{eP(!1)}},[e,eE,eJ,eK]),e0=ew.useMemo(()=>{if(!e)return;let t=eq.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:()=>eQ("precise"),onCompressExtreme:()=>eQ("extreme"),compressing:eE}},[e,eq,ed,eC,eQ,eE]),e1=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]),e2=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 sA(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>Qa(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]),e5=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Uf(e));window.localStorage.setItem(Uf(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 e1){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=e1.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,e1]),e4=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await fn(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}},[]),e3=ew.useCallback(async e=>{if(!e||!jA(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(e4));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 e4(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[e4]),e6=ew.useCallback(async()=>{var e,t;let n=await Promise.all(O.map(async e=>e3(e)));e=O,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&I(n)},[O,e3]);ew.useEffect(()=>{i?.(void 0!==ez||void 0!==eD||void 0!==eL)},[eD,eL,i,ez]);let e8=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(e8.current!==t){e8.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>Qr(e,n))},[e?.conversation.id,e?.events]);let e7=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sA(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>Qa(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 e9(e){if(!e.length)return;let t=e.map(jT);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function te(e,t,n){if(!e||!jA(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 tt(e,t){return e&&jA(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 tn(e){I(t=>{let n=t.findIndex(e=>void 0===e);return n>=0?t.map((t,r)=>r===n?e:t):[...t,e]})}function tr(e){eF.current+=1;let t=jI(e,`${e}-${eF.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;(0,eT.fetchLocalDevServers)().then(n=>{tn(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tn(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(Uf(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(Uc(e?.conversation.id)),et(Uu(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=eW[0]?.id??"";eu(t=>eW.some(e=>e.id===t)?t:e)},[eW]),ew.useEffect(()=>{let t=Qi(e?.panes);v(t.layoutMode),y(t.agentPosition),P(t.layoutSizes),I(t.panes),z(t.cardColumns),R(t.cardHeights),eF.current=Qd(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=>Qr(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 sI(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((0,eT.localAPIURL)(`/api/local/agent/conversations/${encodeURIComponent(n)}/events/stream?after=${l}`));return s.addEventListener("detail",e=>{try{let t=s3(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(()=>{e6()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,e6]),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!==eV.current&&(eV.current=e,window.dispatchEvent(new CustomEvent(Qn)),e6())},[D,e6]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:A,heights:T},r=[],O.forEach((e,t)=>{if(e){if(jA(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,A,T,e?.conversation.id,x,E,O]);let ta=ew.useCallback(e=>{I(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jA(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}eF.current+=1;let r=jI("browser-tab-viewer",`browser-tab-viewer-${eF.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]),ti=ew.useRef(!1);function to(e){I(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;eF.current+=1;let n=jI(e,`${e}-${eF.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;ti.current=!1;let r=!1,a=async()=>{if(!r&&!ti.current)try{let e=(await (0,eT.fetchLocalDevServers)())[0];if(r||ti.current||!e)return;ti.current=!0,ta(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,ta]);let tl=ew.useCallback((e,t)=>{I(n=>{if(n.some(n=>void 0!==n&&jA(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jI("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]),td=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;td.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fh();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||td.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(td.current.add(t.id),tl(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,tl]);let tu=ew.useCallback(()=>{to("plan-doc-viewer")},[j]),tf=ew.useCallback(()=>{to("spec-doc-viewer")},[j]),th=ew.useCallback(()=>{to("tasks-pane")},[j]),tm=ew.useCallback(()=>{to("sidequery-pane")},[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 tp=q??e?.conversation.planState??null,tg=ew.useRef(void 0);ew.useEffect(()=>{let e=tp?.approvals?.find(e=>!e.decision);e&&tg.current!==e.id&&(tg.current=e.id,tu())},[tp,tu]);let tx=ew.useRef(void 0);function tv(e,t){I(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);eF.current+=1;let a={id:`${e}-${eF.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 tb(e,t,n){try{let r=await fe(e);if(j)return void tv("file-tab-viewer",r);I(e=>e.map((e,a)=>a===t?te(e,r,n):e))}catch{hH.error("文件预览打开失败")}}function ty(e){if(j)return void tb(e,-1);let t=O.slice(0,eH).findIndex(e=>e?.kind==="multi-tab-system");t<0?hH.warning("请先放入一个多标签页组件"):tb(e,t)}function tw(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 tv("diff-tab-viewer",n);let r=O.slice(0,eH).findIndex(e=>e?.kind==="multi-tab-system");r<0?hH.warning("请先放入一个多标签页组件"):I(e=>e.map((e,t)=>t===r?te(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||ty({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let t=e?.conversation.id;!t||tx.current===t||D.some(e=>"task"===e.kind)&&(tx.current=t,th())},[e?.conversation.id,D,th]);let tj=e?.conversation.ownerMachineId??"local",tk=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((0,eT.localAPIURL)(`/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 uZ(tj,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void ty({machineId:tj,path:t});let a=(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(tj)}/files/raw?path=${encodeURIComponent(t)}`);await mY({url:a,label:r}),hH.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hH.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===tj?(0,eT.localAPIURL)(`/v1/files/raw?${n}`):(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(tj)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===tj?"local-file":"remote-file",onOpen:e=>void t(e)}},[tj]);async function tN(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hH.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uJ({machineId:a,path:r,content:n}),o={...await ft(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};I(t=>t.map((t,n)=>n===e?tt(t,o):t)),window.dispatchEvent(new CustomEvent(Qn)),hH.success("文件已保存")}catch(e){throw hH.error("文件保存失败"),e}}async function tS(t){let n=e?.conversation.id,r=eL?.tab.file?.path,a=eL?.tab.file?.machineId??"local";if(eL&&n&&r)try{let i=await sQ(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await ft(i,{id:eL.tab.id,title:`${i.name} @ ${Qh(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:eL.tab.defaultView,defaultMode:"review"});I(e=>e.map((e,t)=>t===eL.paneIndex?tt(e,o):e)),e$(void 0)}catch{hH.error("历史版本打开失败")}}function tC(e,t,n){let i=O[e];eF.current=Math.max(eF.current,Qc(n)),I(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=jT(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tM(e,t){I(n=>n.map((n,r)=>r===e?t:n))}function tE(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tP(e){var t=O[e];if(t&&jA(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])fp(e).catch(()=>{});I(t=>t.map((t,n)=>n===e?void 0:t))}function tO(e){let t=O[e];t&&e9([t]),I(t=>t.map((t,n)=>n===e?void 0:t))}async function tI(t,n="chat",r=[]){let a=e?.conversation.id,i=eK?"":ed||eW[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return Uu(e);let r=n.slice(0,1e5),a=Uu(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(Ud(e),JSON.stringify(i))}catch{}return i}(a,t)),ef||"working"===em))return;if(!eK&&!i)return void hH.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"),hH.error(e instanceof Error?e.message:"对话请求失败")}}async function tA(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=eK?"":r||ed||eW[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!eK&&!a)return void hH.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"),hH.error(e instanceof Error?e.message:"对话重试失败")}}}function tz(e){eJ?hH.error("对话正在运行,请先停止后再回退"):ei(e)}async function tT(){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} 个子代理`),hH.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hH.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hH.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tR(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await sZ(n,t.id,e?.conversation.ownerMachineId);o?.(r),hH.success("已创建分支对话")}catch(e){hH.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}async function tD(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){hH.error(e instanceof Error?e.message:"设置更新失败")}}async function t_(t,n){let r=e?.conversation.id;if(r)try{await s0(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hH.error(e instanceof Error?e.message:"审批操作失败")}}async function tL(){let t=e?.conversation.id;if(t){eZ(!0);try{await s1(t,e?.conversation.ownerMachineId)}catch{}}}function t$(){tI("继续","agent")}async function tF(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&&eY&&eZ(!1)},[em,eY]),ew.useEffect(()=>{let e=eO.current;if(eO.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()&&tI(t.trim(),"agent")}}},[em]);let tB=Array.from({length:eH},(r,a)=>(0,eb.jsx)(JZ,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:O[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eR(a),onPanelDrop:tC,onContentChange:tM,onClear:tP,onCut:tO,workspaceFolders:eU,onRequestFileTab:(e,t)=>e_({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:ty,onSaveFileTab:tN,onOpenFileHistory:(e,t)=>e$({paneIndex:e,tab:t})},a)),tV=O.slice(0,eH).some(e=>e?.kind==="subagent-conversation-panel"),tH=E.shell?.agent??42,tU=E.shell?.panes??58,tq=w.agentSide,tW="control-room"===w.mode||k,tK=(0,eb.jsxs)(mq,{type:"single",value:tW?"hidden":tq,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),J9({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),J9({mode:"control-room"}))},children:[(0,eb.jsx)(mW,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(s9,{})}),(0,eb.jsx)(mW,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cr,{})}),(0,eb.jsx)(mW,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(ct,{})})]}),tG=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HT,{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)(HR,{rounds:e1,onJumpToRound:e2,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HA,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e7:void 0,models:e?eG:void 0,modelId:eK?eG[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tD({permissionMode:t})},running:eJ,disabled:!!e&&eX,onModelChange:eu,onSubmit:e?e=>{tI(e.value,"agent",e.attachments??[])}:void 0,onStop:tL,onOpenFile:tw,deliverable:tk,onOpenSubagent:function(e){e.id&&c?.([tE(e)])},onOpenPlan:tu,onOpenSpec:()=>tf(),onOpenTasks:th,planPromptBar:e?(0,eb.jsx)(Ur,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tp,modelRef:ed||eW[0]?.id||"",onOpenPlan:tu,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0,onRetry:tA,onApprovalDecision:t_,onContinue:t$,onRecallUserMessage:tz,onBranchAssistantMessage:tR,onActiveEventChange:e5,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tF,contextUsage:e0})}),s.length>0&&e?(0,eb.jsx)(Qe,{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,tE(e)])}}):null]}),tX=(0,eb.jsx)(hM,{id:"agent",defaultSize:tH,minSize:28,children:tG},"agent-conversation"),tY=(0,eb.jsx)(hM,{id:"panes",defaultSize:tU,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":tV?"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)(mm,{value:x,onValueChange:e=>{let t,n;return t=JW.find(t=>t.id===e)?.slots??4,void((n=O.slice(t).filter(e=>!!e)).length&&e9(n),I(Array.from({length:Math.max(4,t)},(e,n)=>n<t?O[n]:void 0)),v(e))},children:(0,eb.jsx)(mk,{children:JW.map(e=>(0,eb.jsx)(mN,{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))})}),tK,(0,eb.jsx)(eI.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(JU,"cut")},children:(0,eb.jsx)(lJ,{})}),(0,eb.jsx)(eI.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(JH,"clear")},children:(0,eb.jsx)(ca,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(JY,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=Ql(t);P(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:tB},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),tZ=(0,eb.jsx)(J5,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:O,agentSide:tq,columns:A,heights:T,onColumnsChange:z,onHeightsChange:R,onAddCard:tr,onContentChange:tM,onClear:tP,workspaceFolders:eU,onOpenWorkspaceFile:ty,onSaveFileTab:tN,onOpenFileHistory:(e,t)=>e$({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>e_({paneIndex:e,insertIndex:t})}),tJ=(0,eb.jsx)("div",{className:(0,eA.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===tq?"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"===tq?S?(0,eb.jsx)(cn,{}):(0,eb.jsx)(ce,{}):S?(0,eb.jsx)(tc,{}):(0,eb.jsx)(ts,{})})}),tQ=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(JJ,{open:void 0!==ez,onOpenChange:e=>{e||eR(void 0)},onAdd:function(e){if(void 0===ez)return;eF.current+=1;let t=jI(e,`${e}-${eF.current}`),n=O[ez];n&&e9([n]),I(e=>e.map((e,n)=>n===ez?t:e)),eR(void 0)}}),(0,eb.jsx)(Ue,{open:void 0!==eD,folders:eU,onOpenChange:e=>{e||e_(void 0)},onSelectFile:e=>{eD&&tb(e,eD.paneIndex,eD.insertIndex),e_(void 0)}}),(0,eb.jsx)(Qf,{open:void 0!==eL,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:eL?.tab,onOpenChange:e=>{e||e$(void 0)},onSelectVersion:e=>{tS(e)}}),(0,eb.jsx)(d6,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"回退对话到此处?"}),(0,eb.jsx)(uv,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{disabled:eo,children:"取消"}),(0,eb.jsx)(ub,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tT()},children:eo?"回退中…":"确认回退"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(jM,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HA,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?e7:void 0,models:e?eG:void 0,modelId:eK?eG[0]?.id:ed,permissionModeId:eg,onPermissionModeChange:t=>{ex(t),e?.conversation.id&&tD({permissionMode:t})},running:eJ,disabled:!!e&&eX,onModelChange:eu,onSubmit:e?e=>{tI(e.value,"agent",e.attachments??[])}:void 0,onStop:tL,onOpenFile:tw,deliverable:tk,onOpenSubagent:function(e){var t;let n=O.slice(0,eH),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hH.warning("请释放一个窗口再选中浏览");eB.current+=1;let o={id:t=`subagent-${e.id}-${eB.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}]};I(e=>e.map((e,t)=>t===i?o:e))},onRetry:tA,onApprovalDecision:t_,onContinue:t$,onRecallUserMessage:tz,onBranchAssistantMessage:tR,onActiveEventChange:e5,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:ev,onQueuedMessagesChange:ey,onNudge:tF,contextUsage:e0}),paneElements:tB,panes:O,activeSlotCount:eH,onOpenPalette:eR,timeline:(0,eb.jsx)(HR,{rounds:e1,onJumpToRound:e2,activeRunId:X})}),tQ,(0,eb.jsx)(hX,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[tW?(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)(hC,{direction:"horizontal",children:tY})}),(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)(hC,{direction:"horizontal",children:tX}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:tK})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Ul,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:eJ,subagentTree:d,baselineSubagentIds:K,activeSubagentPath:s,onSelectMain:()=>c?.([]),onSelectSubagent:e=>c?.([e])})})]}):j&&!O.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:tG}),(0,eb.jsxs)("div",{className:(0,eA.cn)("absolute top-2 z-20 flex items-center gap-2","left"===tq?"right-3":"left-3"),children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"gap-1.5",onClick:tm,title:"旁问:在独立旁路里临时提问,不影响主对话",children:[(0,eb.jsx)(s7,{className:"size-4"}),"旁问"]}),(0,eb.jsx)(J2,{onAddCard:tr,align:"left"===tq?"end":"start"})]})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===tq?(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:tG}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tZ})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:tZ}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:tG})]})}):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)(hC,{direction:"horizontal",children:tY})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:tG}),tJ]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hC,{direction:"horizontal",defaultLayout:{agent:tH,panes:tU},onLayoutChanged:e=>{let t=e.agent??tH,n=e.panes??tU;!function(e){let t=Ql(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};P(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"===tq?[t,n]:[n,t])},children:["left"===tq?tX:tY,(0,eb.jsx)(hE,{withHandle:!0}),"left"===tq?tY:tX]},`${e?.conversation.id??"empty"}-${tq}`),tJ]}),tQ,(0,eb.jsx)(hX,{position:"top-right"})]}):(0,eb.jsx)(jj,{onCreated:e=>o?.(e),onCancel:l})}function Qf({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)(dE,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fw,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fN,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fS,{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:[Qh(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 Qh(e){return e.replace(/^mut-/,"").slice(0,16)}var Qm=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((e,t)=>{let n=(0,lQ.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}},{}),Qp=ew.forwardRef((e,t)=>(0,eb.jsx)(Qm.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function Qg({className:e,...t}){return(0,eb.jsx)(Qp,{"data-slot":"label",className:(0,eA.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 Qx({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,eA.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 Qv(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 Qb(e){return(await QP(`/api/local/skills${Qv(e)}`)).skills??[]}async function Qy(e,t){return QP(`/api/local/skills/${encodeURIComponent(e)}${Qv(t)}`)}async function Qw(e){await QP(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function Qj(e,t){return QP("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function Qk(e,t){return QP("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function QN(){return(await QP("/api/local/skills/sources")).sources??[]}async function QS(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 QP(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function QC(e,t,n){return QP(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qv(n)}`)}async function QM(e){return QP("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function QE(e,t,n){await QP(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${Qv(n)}`,{method:"DELETE"})}async function QP(e,t){let n=await fetch((0,eT.localAPIURL)(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}Qp.displayName="Label";let QO={global:"全局",project:"项目",conversation:"对话"},QI=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QA({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 QS(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 QC(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 QM({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 QE(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,eA.cn)("grid gap-3",r),children:[(0,eb.jsx)("div",{className:"flex items-center justify-end",children:(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",className:"h-8",onClick:()=>void y(),"aria-label":"刷新记忆",children:(0,eb.jsx)(bs,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mm,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(mk,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mN,{value:e,className:"flex-1",children:QO[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mS,{value:e,className:"mt-3 grid gap-2",children:[(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsxs)(eI.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)(lY,{className:"size-4"}),"新增",QO[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:["暂无",QO[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)(Bm,{variant:"secondary",className:"shrink-0",children:(t=e.type,QI.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)(eI.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)(eI.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)(bc,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dE,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fw,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fj,{children:(0,eb.jsxs)(fN,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QO[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)(Qg,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"描述"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gL,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:QI.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"正文"}),(0,eb.jsx)(y9,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fk,{children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",onClick:()=>m(null),disabled:p,children:"取消"}),(0,eb.jsxs)(eI.Button,{type:"button",onClick:()=>void j(),disabled:p||!h?.name.trim(),children:[(0,eb.jsx)(Gl,{className:"size-4"}),p?"保存中":"保存"]})]})]})})]})}let Qz=(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"}]]),QT=(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 QR({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([Qb(w),QN()]);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 Qy(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 Qw(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 Qj(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 Qk(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,eA.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)(gL,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xx,{className:"h-9 w-full",children:(0,eb.jsx)(gV,{placeholder:"选择源"})}),(0,eb.jsx)(xy,{children:0===i.length?(0,eb.jsx)(xw,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xw,{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)(eI.Button,{type:"button",size:"sm",variant:"outline",className:"h-9",disabled:"__pull__"===u||!b.trim(),onClick:()=>void C(),children:[(0,eb.jsx)(Qz,{className:"size-4"}),"拉取"]}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",className:"h-9",onClick:()=>void j(),"aria-label":"刷新技能列表",children:(0,eb.jsx)(bs,{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)(Bm,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bm,{variant:"outline",children:e.source}):null]})]}),(0,eb.jsxs)("div",{className:"mt-auto flex flex-wrap gap-1.5",children:[(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:"outline",className:"h-7 px-2 text-xs",onClick:()=>void k(e),disabled:p,children:[(0,eb.jsx)(uE,{className:"size-3.5"}),"查看"]}),M&&"global"===e.scope?(0,eb.jsxs)(eI.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)(QT,{className:"size-3.5"}),"装入工作区"]}):null,"global"===e.scope?(0,eb.jsxs)(eI.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)(bc,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dE,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fw,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fj,{children:[(0,eb.jsx)(fN,{children:h?.name}),(0,eb.jsx)(fS,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(w_,{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 QD({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)(Qg,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(v1,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gL,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xw,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xw,{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)(QR,{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)(QA,{conversationId:e,scopes:["project","conversation"]})]})]})}let Q_=(0,l0.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 QL({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,eA.cn)(Q_({variant:t}),e),...n})}function Q$({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,eA.cn)("mb-1 leading-none font-medium",e),...t})}function QF({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,eA.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function QB({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 jd(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 ju(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(eI.Button,{type:"button",size:"sm",onClick:()=>void f(e.path),disabled:l===e.path,children:[(0,eb.jsx)(Gl,{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)(eI.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)(y9,{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 QV=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function QH({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=js(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)(eI.Button,{type:"button",variant:"ghost",size:"icon","aria-label":"关闭设置",onClick:c,className:"shrink-0",children:(0,eb.jsx)(fb.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:QV.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,eA.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)(gL,{value:""===n?jo:n,onValueChange:e=>i?.(e===jo?"":e),children:[(0,eb.jsx)(xx,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(xZ,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(w8,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(w7,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(w9,{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)(QB,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(QD,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(ji,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function QU({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 sI(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)(QH,{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}let Qq=[{value:"reclaude",label:"reclaude(RC)"},{value:"claude-code",label:"Claude Code(CC)"}];function QW({open:e,onOpenChange:t,ownerMachineId:n,onEnterConversation:r}){let[a,i]=ew.useState([]),[o,l]=ew.useState(!1),[s,c]=ew.useState(""),[d,u]=ew.useState("reclaude"),[f,h]=ew.useState(""),[m,p]=ew.useState(!1),[g,x]=ew.useState("");ew.useEffect(()=>{if(!e)return;c(""),u("reclaude"),h(""),x("");let t=!0;return l(!0),async function(){let e=await sC(n);t&&(i(e),l(!1))}(),()=>{t=!1}},[e,n]);let v=ew.useMemo(()=>a.find(e=>e.sessionId===s),[a,s]);async function b(){if(v&&!m){p(!0),x("");try{let e=await sM({sessionId:v.sessionId,cwd:v.cwd,title:v.title,engine:d,ccModel:f,projectId:""},n);t(!1),r?.(e.conversation.id,n)}catch(e){x(e instanceof Error?e.message:"导入失败,请稍后重试。")}finally{p(!1)}}}return(0,eb.jsx)(dE,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fw,{className:"flex max-h-[85vh] max-w-xl flex-col gap-4",children:[(0,eb.jsxs)(fj,{children:[(0,eb.jsx)(fN,{children:"导入 Claude 会话"}),(0,eb.jsx)(fS,{children:"从本机已有的 Claude Code 会话创建对话。继续对话将接续原会话的上下文。"})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto vtl-scrollbar-hidden",children:o?(0,eb.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground",children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),"正在扫描本机 Claude 会话…"]}):0===a.length?(0,eb.jsx)("p",{className:"py-10 text-center text-sm text-muted-foreground",children:"未发现本机 Claude 会话"}):(0,eb.jsx)("div",{className:"space-y-1",children:a.map(e=>{let t=e.sessionId===s,n=function(e){let t=Date.parse(e);if(!Number.isFinite(t))return"";let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<60)return"刚刚";let r=Math.floor(n/60);if(r<60)return`${r} 分钟前`;let a=Math.floor(r/60);if(a<24)return`${a} 小时前`;let i=Math.floor(a/24);return 1===i?"昨天":i<7?`${i} 天前`:new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric"}).format(t)}(e.lastActivityAt);return(0,eb.jsxs)("button",{type:"button",onClick:()=>c(e.sessionId),className:(0,eA.cn)("w-full rounded-lg border px-3 py-2.5 text-left transition-colors",t?"border-primary bg-primary/5":"border-border hover:bg-muted/60"),children:[(0,eb.jsx)("div",{className:"truncate text-sm font-semibold text-foreground",children:e.title||"未命名会话"}),(0,eb.jsxs)("div",{className:"mt-0.5 flex items-center gap-1 text-xs text-muted-foreground",children:[(0,eb.jsx)(bn,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"truncate",children:e.cwd})]}),(0,eb.jsxs)("div",{className:"mt-1 flex items-center gap-2 text-[11px] text-muted-foreground/80",children:[n?(0,eb.jsx)("span",{children:n}):null,n?(0,eb.jsx)("span",{children:"·"}):null,(0,eb.jsxs)("span",{children:[e.messageCount," 条消息"]})]})]},e.sessionId)})})}),v?(0,eb.jsxs)("div",{className:"grid gap-3 border-t pt-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.jsxs)(gL,{value:d,onValueChange:e=>u(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xy,{children:Qq.map(e=>(0,eb.jsx)(xw,{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:"CC 模型"}),(0,eb.jsxs)(gL,{value:""===f?jo:f,onValueChange:e=>h(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"其余设置(工作目录等)将按所选会话自动导入。"})]}):null,g?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:g}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:m,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"button",onClick:()=>void b(),disabled:!v||m,children:m?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eM,{className:"size-4 animate-spin"}),"导入中…"]}):"导入并打开"})]})]})})}function QK(e){return!e||"local"===e}async function QG(e,t){return QJ(await QQ(t,`/${encodeURIComponent(e)}`),t)}async function QX(e,t){return QJ(await QQ(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(uK),edges:e.edges.map(uG)})}),t)}async function QY(e,t,n){return QJ(await QQ(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(uK),edges:t.edges.map(uG),nodeIds:t.nodeIds})}),n)}async function QZ(e,t){return QJ(await QQ(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function QJ(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=QK(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((0,eT.localAPIURL)(QK(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 Q0=(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"}]]),Q1=(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"}]]),Q2=(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"}]]),Q5=(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"}]]),Q4=(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"}]]),Q3=(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"}]]),Q6={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function Q8(e,t,n){return Math.min(Math.max(e,t),n)}function Q7({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...Q6,...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=Q8(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=Q8((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=Q8(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,eA.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,eA.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,eA.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,eA.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,eA.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,eA.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 Q9="/themes/jelly/bg1.png",eee="/themes/jelly/bg2.png",eet="/themes/jelly/bg3.png",een="/themes/jelly/bg4.png";function eer({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 eea({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let eei={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:"主题"},eeo={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:"用量与账单"};eei.local,eei.direct,eei.online,eei.p2p,eei.online,eei.direct,eei.sleeping,eei.cpu,eei.memory,eei.activeRuns;function eel(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function ees({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)(w_,{className:"min-h-0 flex-1",children:e})})}function eec(e){return Math.max(0,...e.map(e=>e.y+e.h))}function eed(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 eeu(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 eef(e,t,n,r,a){for(let i=0;i<eec(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(!eed(l,e))return l}return{id:t,kind:n,x:0,y:eec(e)+2,w:r,h:a}}function eeh(e){return{...e.defaultConfig}}function eem(e){return e.payloads?.[Xe]}function eep({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vy,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vj,{className:"max-h-[420px]",children:[(0,eb.jsx)(vk,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vN,{heading:a,children:t.map(e=>(0,eb.jsxs)(vS,{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)(vC,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function eeg({open:e,dragMode:t,label:n="页面卡片操作",onOpenChange:r,onAdd:a,onDragModeChange:i}){let o=[{key:"add",label:"添加卡片",icon:(0,eb.jsx)(lY,{className:"size-4"}),onClick:a,pressed:!1},{key:"drag",label:"拖拽排版",icon:(0,eb.jsx)(lU,{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)(eI.Button,{type:"button",variant:"outline",size:"icon-sm","aria-label":t.label,"aria-pressed":t.pressed,onClick:t.onClick,className:(0,eA.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)(eI.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)(lG,{className:(0,eA.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eex=(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 eev({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,eA.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=eeu({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});eed(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,eA.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)(eeb,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eey,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function eeb({onSettingsOpen:e,onCut:t,onCopy:n,onResizeStart:r}){return(0,eb.jsx)(l2,{"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)(l5,{children:[(0,eb.jsx)(l4,{type:"button","aria-label":"调整大小",onClick:r,children:(0,eb.jsx)(lK,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"卡片设置",onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),e()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(eex,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"复制",onClick:n,children:(0,eb.jsx)(lV,{className:"size-4"})}),(0,eb.jsx)(l4,{type:"button","aria-label":"剪切",onPointerDown:e=>{e.preventDefault(),e.stopPropagation(),t()},onClick:e=>e.stopPropagation(),children:(0,eb.jsx)(lJ,{className:"size-4"})})]})})}function eey({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,eA.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),eed(d=eeu(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 eew({className:e,...t}){return(0,eb.jsx)(dD,{"data-slot":"sheet-overlay",className:(0,eA.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 eej({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dT,{children:[(0,eb.jsx)(eew,{}),(0,eb.jsxs)(dF,{"data-slot":"sheet-content","data-side":n,className:(0,eA.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)(dX,{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)(fb.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eek({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,eA.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeN({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"sheet-title",className:(0,eA.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eeS({className:e,...t}){return(0,eb.jsx)(dK,{"data-slot":"sheet-description",className:(0,eA.cn)("text-sm text-muted-foreground",e),...t})}function eeC({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)(dE,{open:e,onOpenChange:i,children:(0,eb.jsx)(eej,{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)(eeM,{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)(eek,{className:"border-b",children:[(0,eb.jsx)(eeN,{children:"卡片设置"}),(0,eb.jsxs)(eeS,{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)(ez,{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)(ez,{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)(ez,{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 eeM({width:e,height:t,className:n,children:r}){let[a,i]=XX(),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,eA.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 eeE({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),[P,O]=XX(),I=O.width>0?(d=O.width)<480?2:d<768?4:12:12,A=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<eel(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:eel(r),w:n,h:a})}return r}(x,I),z=O.width>0?(O.width-12*(I-1))/I:96,T=I<12?72:z,R=Math.max(a,eec(A)+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?eeh(t):void 0)}function $(e){v(t=>{let n=eeu(e);return eed(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=eef(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eeh(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]??eeh(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=I<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=[...A].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)(ees,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,eA.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,eA.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)(eeg,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eep,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeC,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:z,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(ees,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,eA.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(Xe)&&(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&&eem(n);if(!n||!a||!_.has(a.kind))return;e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move";let i=P.current,o=i?.getBoundingClientRect();!function(e,t){let n=eem(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eeu({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eec(x),w:n.w,h:n.h}),i=t&&!eed(a,x)?a:eef(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&&z>0?Math.round((e.clientX-o.left-24)/(z+12)):0,y:o&&z>0?Math.round((e.clientY-o.top-24)/(z+12)):eec(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:A.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eev,{layout:t,layouts:A,cellSize:z,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),[Xe]:JSON.stringify(a)},payloads:{[Xe]: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=eef(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eeh(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)(eeg,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eep,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeC,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:z,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eeP({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 eeO({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,eA.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)(eeP,{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)(eeP,{parts:c})})]})}function eeI(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeA({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)(eeO,{value:eeI(t),minSize:n,maxSize:r,className:a})]})}function eez(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeT({className:e,value:t=0,...n}){let r=eez(t);return(0,eb.jsx)("div",{"data-slot":"progress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":r,className:(0,eA.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 eeR({className:e,value:t=0,label:n,showValue:r=!0,...a}){let i=eez(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,eA.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 eeD=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function ee_({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)(eeL,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(Q7,{items:a,scrollCurrentIntoView:!1,className:(0,eA.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,eA.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function eeL({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,eA.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)(eeT,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,eA.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(ee$,{icon:(0,eb.jsx)(VC,{}),value:`${e.snapshots}`}),(0,eb.jsx)(ee$,{icon:(0,eb.jsx)(eeD,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function ee$({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 eeF=(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"}]]),eeB=(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"}]]),eeV=(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 eeH=ew;function eeU(){return(eeU=Object.assign.bind()).apply(null,arguments)}function eeq(e){return ew.createElement(Rp,eeU({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var eeW=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kw(e))return e;var a=kw(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)}},eeK=["children"],eeG=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function eeX(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,eeK);return ew.createElement(eeG.Provider,{value:n},t)}var eeY=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kS(r,t,0)};function eeZ(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 eeJ(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eeZ(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)):eeZ(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var eeQ=j7([OQ,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),ee0=j7([eeQ],e=>null==e?void 0:e.maxBarSize),ee1=j7([CC,OQ,YM,YE,(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)),ee2=j7([ee1,e=>e.rootProps.barSize,(e,t)=>{var n=CC(e),r=YM(e,t),a=YE(e,t);if(null!=r&&null!=a)return"horizontal"===n?Au(e,"xAxis",r):Au(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Mh),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:eeY(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eeY(t,n,e.barSize)}))]}),ee5=(e,t,n)=>{var r,a,i=CC(e),o=YM(e,t),l=YE(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=Ax(e,"xAxis",o,n),a=Ag(e,"xAxis",o,n)):(r=Ax(e,"yAxis",l,n),a=Ag(e,"yAxis",l,n)),kK(r,a)},ee4=j7([ee2,CV,e=>e.rootProps.barGap,CH,(e,t,n)=>{var r,a,i,o,l=eeQ(e,t);if(null==l)return 0;var s=YM(e,t),c=YE(e,t);if(null==s||null==c)return 0;var d=CC(e),u=CV(e),{maxBarSize:f}=l;return"horizontal"===d?(i=Ax(e,"xAxis",s,n),o=Ag(e,"xAxis",s,n)):(i=Ax(e,"yAxis",c,n),o=Ag(e,"yAxis",c,n)),null!=(r=null!=(a=kK(i,o,!0))?a:null==f?u:f)?r:0},ee5,ee0],(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=kS(e,n,0,!0),c=[];if(kz(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=kS(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=kz(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=>eeJ(eeJ({},e),{},{position:eeJ(eeJ({},e.position),{},{offset:e.position.offset-a/2})}))),l}),ee3=j7([ee4,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}}),ee6=j7([(e,t,n)=>{var r=CC(e),a=YM(e,t),i=YE(e,t);if(null!=a&&null!=i)return"horizontal"===r?Im(e,"yAxis",i,n):Im(e,"xAxis",a,n)},eeQ],(e,t)=>{var n=Mu(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)}}}),ee8=j7([k6,k7,(e,t,n)=>{var r=YM(e,t);if(null!=r)return Ax(e,"xAxis",r,n)},(e,t,n)=>{var r=YE(e,t);if(null!=r)return Ax(e,"yAxis",r,n)},(e,t,n)=>{var r=YM(e,t);if(null!=r)return Ag(e,"xAxis",r,n)},(e,t,n)=>{var r=YE(e,t);if(null!=r)return Ag(e,"yAxis",r,n)},ee3,CC,kr,ee5,ee6,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||!kw(t[0])||!kw(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(!kw(e[0])||e[0]<n)&&(a[0]=n),(!kw(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=k_(e,n))||(j=[b,j]);var w=eeW(r,0)(j[1],f);if("horizontal"===t){var j,k,N,S,C,M,E,P=s.scale.map(j[0]),O=s.scale.map(j[1]);if(null==P||null==O)return null;k=kU({axis:l,ticks:c,bandSize:o,offset:i.offset,entry:e,index:f}),N=null!=(E=null!=O?O:P)?E:void 0,S=i.size;var I=P-O;if(C=kb(I)?0:I,M={x:k,y:h.top,width:S,height:h.height},Math.abs(w)>0&&Math.abs(C)<Math.abs(w)){var A=kv(C||w)*(Math.abs(w)-Math.abs(C));N-=A,C+=A}}else{var z=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==z||null==T)return null;if(k=z,N=kU({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-z,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=kv(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?etm(etm({},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})}}),ee7=(e,t)=>t,ee9=(e,t,n)=>n,ete=j7([ee7,OQ,ee9],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),ett=j7([ete],e=>e.map(e=>e.id)),etn=j7([e=>e,ee7,ee9],(e,t,n)=>{var r=ett(e,t,n),a=[];return r.forEach(t=>{var r=ee8(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}),etr=["index"];function eta(){return(eta=Object.assign.bind()).apply(null,arguments)}var eti=(0,ew.createContext)(void 0),eto=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),etl=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,etr),r=(e=>{var t=(0,ew.useContext)(eti);if(null!=t){var{stackId:n}=t;return"url(#".concat(eto(n,e),")")}})(t);return ew.createElement(AZ,eta({className:"recharts-bar-stack-layer",clipPath:r},n))},ets=["onMouseEnter","onMouseLeave","onClick"],etc=["value","background","tooltipPosition"],etd=["id"],etu=["onMouseEnter","onClick","onMouseLeave"];function etf(){return(etf=Object.assign.bind()).apply(null,arguments)}function eth(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 etm(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eth(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)):eth(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etp(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 etg=eeH.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:kI,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:kX(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return eeH.createElement(Dd,{tooltipEntrySettings:d})});function etx(e){var t,n=No(_a),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etp(o,ets),u=Dl(l,a,o.id),f=Ds(s),h=Dc(c,a,o.id);if(!i||null==r)return null;var m=AK(i);return eeH.createElement(_G,{zIndex:(t=C1.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kz(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etp(e,etc);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=etm(etm(etm(etm(etm({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),zv(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return eeH.createElement(eeq,etf({key:"background-bar-".concat(t)},x))}))}function etv(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 etm(etm({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return eeH.createElement(Ls,{value:t?a:void 0},n)}function etb(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=No(_a),c=No(_o),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,eeH.useState)(!1),[h,m]=(0,eeH.useState)(!1);(0,eeH.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,eeH.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=eeH.createElement(eeq,etf({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?eeH.createElement(_G,{zIndex:C1.activeBar},eeH.createElement(etl,{index:i.originalDataIndex},v)):v}function ety(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return eeH.createElement(eeq,etf({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function etw(e){var t,{data:n,props:r}=e,a=null!=(t=AW(r))?t:{},{id:i}=a,o=etp(a,etd),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etp(r,etu),m=Dl(d,s,i),p=Ds(f),g=Dc(u,s,i);return n?eeH.createElement(eeH.Fragment,null,n.map((e,t)=>eeH.createElement(etl,etf({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"},zv(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?eeH.createElement(etb,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):eeH.createElement(ety,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etj(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=TP(t,"recharts-bar-"),[h,m]=(0,eeH.useState)(!1),p=(0,eeH.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,eeH.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return eeH.createElement(etv,{showLabels:!h,rects:r},eeH.createElement(TE,{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 etm(etm({},t),{},{x:kM(r.x,t.x,e),y:kM(r.y,t.y,e),width:kM(r.width,t.width,e),height:kM(r.height,t.height,e)});if("horizontal"===a){var i=kM(0,t.height,e),o=kM(t.stackedBarStart,t.y,e);return etm(etm({},t),{},{y:o,height:i})}var l=kM(0,t.width,e),s=kM(t.stackedBarStart,t.x,e);return etm(etm({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:eeH.createElement(AZ,null,eeH.createElement(etw,{props:t,data:i}))}),eeH.createElement(Lf,{label:t.label}),t.children)}function etk(e){var t=(0,eeH.useRef)(null);return eeH.createElement(etj,{previousRectanglesRef:t,props:e})}var etN=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:k_(e,t)}};class etS extends eeH.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,jU.clsx)("recharts-bar",r);return eeH.createElement(AZ,{className:c,id:s},o&&eeH.createElement("defs",null,eeH.createElement(YC,{clipPathId:s,xAxisId:a,yAxisId:i})),eeH.createElement(AZ,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},eeH.createElement(etx,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),eeH.createElement(etk,this.props)))}}var etC={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:C1.bar};function etM(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}=YS(n,r),h=No(CC),m=Ct(),p=Ta(e.children,z7),g=No(t=>ee8(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,eeH.createElement(eeX,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etN,errorBarOffset:t},eeH.createElement(etS,etf({},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})))}eeH.memo(function(e){var t,n,r=zK(e,etC),a=(t=r.stackId,null!=(n=(0,ew.useContext)(eti))?n.stackId:null!=t?kV(t):void 0),i=Ct();return eeH.createElement(_S,{id:r.id,type:"bar"},e=>eeH.createElement(eeH.Fragment,null,eeH.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kX(n,t),payload:e}]})(r)}),eeH.createElement(etg,{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}),eeH.createElement(_T,{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}),eeH.createElement(_G,{zIndex:r.zIndex},eeH.createElement(etM,etf({},r,{id:e})))))},FC).displayName="Bar";let etE=(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 etP({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)(eeO,{value:eeI(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 etO=ew,etI=(e,t,n,r)=>Ax(e,"xAxis",t,r),etA=(e,t,n,r)=>Ag(e,"xAxis",t,r),etz=(e,t,n,r)=>Ax(e,"yAxis",n,r),etT=(e,t,n,r)=>Ag(e,"yAxis",n,r),etR=j7([CC,etI,etz,etA,etT],(e,t,n,r,a)=>kL(e,"xAxis")?kK(t,r,!1):kK(n,a,!1));function etD(e){return"line"===e.type}var et_=j7([OQ,(e,t,n,r,a)=>a],(e,t)=>e.filter(etD).find(e=>e.id===t)),etL=j7([CC,etI,etz,etA,etT,et_,etR,kn],(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=k_(e,o);if("horizontal"===t){var d=kH({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=kH({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})}}),et$=["id"],etF=["type","layout","connectNulls","needClip","shape"],etB=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function etV(){return(etV=Object.assign.bind()).apply(null,arguments)}function etH(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 etU(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etH(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)):etH(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etq(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 etW=etO.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:kI,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:kX(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etO.createElement(Dd,{tooltipEntrySettings:u})}),etK=(e,t)=>"".concat(t,"px ").concat(e,"px");function etG(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=AW(etq(r,et$));return etO.createElement(Yy,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function etX(e){var{showLabels:t,children:n,points:r}=e,a=(0,etO.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 etU(etU({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etO.createElement(Ls,{value:t?a:void 0},n)}function etY(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=etU(etU({},AG(etq(i,etF))),{},{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 etO.createElement(etO.Fragment,null,(null==r?void 0:r.length)>1&&etO.createElement(Rp,etV({shapeType:"curve",option:d},u,{pathRef:n})),etO.createElement(etG,{points:r,clipPathId:t,props:i}))}function etZ(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=TP(o,"recharts-line-"),b=(0,etO.useRef)(v),[y,w]=(0,etO.useState)(!1),j=(0,etO.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etO.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,etO.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etO.createElement(etX,{points:o,showLabels:!y},n.children,etO.createElement(TE,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kM(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return etK(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))):etK(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 etU(etU({},t),{},{x:kM(a.x,t.x,e),y:kM(a.y,t.y,e)})}return f?etU(etU({},t),{},{x:kM(2*h,t.x,e),y:kM(m/2,t.y,e)}):etU(etU({},t),{},{x:t.x,y:t.y})});return a.current=p,etO.createElement(etY,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etO.createElement(etY,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etO.createElement(Lf,{label:n.label}))}function etJ(e){var{clipPathId:t,props:n}=e,r=(0,etO.useRef)(null),a=(0,etO.useRef)(0),i=(0,etO.useRef)(null);return etO.createElement(etZ,{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:k_(e.payload,t)}};class et0 extends etO.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,jU.clsx)("recharts-line",r),{r:m,strokeWidth:p}=YL(t),g=Ti(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etO.createElement(_G,{zIndex:f},etO.createElement(AZ,{className:h},u&&etO.createElement("defs",null,etO.createElement(YC,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etO.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etO.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etO.createElement(eeX,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:etQ,errorBarOffset:0},etO.createElement(etJ,{props:this.props,clipPathId:d}))),etO.createElement(YN,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var et1={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:C1.line,type:"linear"};function et2(e){var t=zK(e,et1),{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=etq(t,etB),{needClip:x}=YS(h,m),v=No(F7),b=No(CC),y=Ct(),w=No(e=>etL(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 etO.createElement(et0,etV({},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 et5=etO.memo(function(e){var t=zK(e,et1),n=Ct();return etO.createElement(_S,{id:t.id,type:"line"},e=>etO.createElement(etO.Fragment,null,etO.createElement(_w,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:kX(n,t),payload:e}]})(t)}),etO.createElement(etW,{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}),etO.createElement(_T,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etO.createElement(et2,etV({},t,{id:e}))))},FC);et5.displayName="Line";var et4=["axis"],et3=(0,ew.forwardRef)((e,t)=>ew.createElement(Y7,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:et4,tooltipPayloadSearcher:LA,categoricalChartProps:e,ref:t}));let et6={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},et8={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},et7={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)(og,{type:"target",position:D.Top,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{type:"source",position:D.Bottom,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{type:"target",position:D.Left,className:"!size-0 !border-0 !bg-transparent"}),(0,eb.jsx)(og,{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,eA.cn)("size-2.5 shrink-0 rounded-full",et6[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]})}},et9={topologyEdge:function({id:e,sourceX:t,sourceY:n,targetX:r,targetY:a,sourcePosition:i,targetPosition:o,data:l}){let[s]=aC({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)(oD,{id:e,path:s,className:(0,eA.cn)("fill-none",et8[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 ene({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,eA.cn)("h-full min-h-0 overflow-hidden rounded-xl bg-muted/25",n),...r,children:(0,eb.jsx)(lu,{children:(0,eb.jsx)(lm,{nodes:a,edges:i,nodeTypes:et7,edgeTypes:et9,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)(lj,{gap:28,size:1,color:"var(--border)",className:"opacity-80"})})})})}function ent({nodes:e,links:t}){return(0,eb.jsx)(ene,{nodes:e,links:t})}function enn({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 enr({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,eA.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,eA.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function ena({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)(Q7,{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 eni({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)(eno,{item:e})}}),[e]);return(0,eb.jsx)(Q7,{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 eno({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)(eeT,{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)(eeT,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function enl({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)(ens,{worker:e,divided:t>0},e.id))})}function ens({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eA.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)(enc,{label:"CPU",value:e.cpu}),(0,eb.jsx)(enc,{label:"MEM",value:e.memory})]})]})}function enc({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeR,{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 end({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)(Q7,{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 enu({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)(enf,{machine:e,divided:t>0},e.id))})}function enf({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,eA.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)(enm,{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)(enh,{icon:(0,eb.jsx)(uC,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(eeF,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(uM,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(enh,{icon:(0,eb.jsx)(eeB,{}),label:"NET",value:e.network})]})]})}function enh({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)(eeT,{value:n,className:"h-1.5"})]})}function enm({status:e}){return(0,eb.jsx)("span",{className:(0,eA.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enp({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)(Q7,{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 eng({config:e,data:t}){return(0,eb.jsx)(Vo,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Ze,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZR,{vertical:!1}),(0,eb.jsx)(ZZ,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(BY,{content:(0,eb.jsx)(Vs,{indicator:"line"})}),(0,eb.jsx)(Y4,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(Y4,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(Y4,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enx({services:e}){let[t,n]=XX(),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)(env,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function env({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,eA.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,eA.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,eA.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 enb=[{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 eny(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:[]}}}enb.push(eny("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),eny("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),eny("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),eny("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),eny("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let enw=enb.filter(e=>"idle"!==e.status),enj=enb.filter(e=>"idle"===e.status);function enk(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function enN(e,t){return(0,eb.jsx)("section",{className:(0,eA.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:eer({image:t,opacity:.88,blur:"0px"}),children:e})}let enS=[{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*enj.length)+1)}];function enC({open:e,title:t,description:n,eyebrow:r,panels:a,defaultPanelId:i="overview",onOpenChange:o}){let l=sv(),[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)(dE,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fw,{hideClose:!0,className:(0,eA.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)(fN,{className:"sr-only",children:t}),(0,eb.jsxs)(fS,{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)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"关闭",onClick:()=>o(!1),children:(0,eb.jsx)(fb.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,eA.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)(Bm,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(w_,{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)(w_,{className:"h-full",children:(0,eb.jsx)("div",{className:"space-y-1 p-2",children:a.map(e=>(0,eb.jsxs)(eI.Button,{"data-slot":"resource-management-dialog-nav-item",type:"button",variant:"ghost",className:(0,eA.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)(Bm,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(w_,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enM({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)(uz,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("活跃画布","画布列表"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"当前正在编辑的画布数量",value:String(enw.length)}),Q9)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(VC,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("运行节点","画布节点"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),eee)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(jF,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("未保存","画布保存状态"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"等待写入的画布变更",value:"4"}),eet)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Ga,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enk("快照","画布快照"),render:e=>enN((0,eb.jsx)(etP,{label:e.title,description:"可回退的历史存档",value:"46"}),een)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uz,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enk("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(enn,{title:t.title,count:enw.length}),(0,eb.jsx)(ee_,{canvases:enw,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(m4,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enj.length)+1)},defaultConfig:enk("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(enn,{title:t.title,count:enj.length}),(0,eb.jsx)(ee_,{canvases:enj,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeE,{boardId:"canvas-library",definitions:i,initialLayouts:enS,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enP,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function enE({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 enP({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(enC,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VM,{}),content:(0,eb.jsx)(enO,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(Q0,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enA,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(Q3,{}),content:(0,eb.jsx)(enA,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(m4,{}),content:(0,eb.jsx)(enA,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(Q4,{}),content:(0,eb.jsx)(enA,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gl,{}),content:(0,eb.jsx)(enA,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Ga,{}),content:(0,eb.jsx)(enA,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(Q2,{}),content:(0,eb.jsx)(enA,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(Q5,{}),content:(0,eb.jsx)(enA,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enO({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)(enI,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enI,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enI,{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)(enE,{icon:(0,eb.jsx)(VC,{}),value:e.runtime})]}),(0,eb.jsx)(Q7,{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 enI({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 enA({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,eA.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(Q1,{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 enz({open:e,onOpenChange:t,onAdd:n}){return(0,eb.jsx)(vy,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vb,{loop:!0,children:[(0,eb.jsx)(vw,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vj,{children:[(0,eb.jsx)(vk,{children:"没有匹配节点。"}),(0,eb.jsx)(vN,{heading:"可用节点",children:uB.map(e=>(0,eb.jsxs)(vS,{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)(vC,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enT({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 uU(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,uB.find(e=>e.id===n)?.size??uD({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:u$(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:u_(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 fr(e):await fe(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{hH.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 hH.error("文件路径不可用"),Error("file path is unavailable");try{let i=await uJ({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),hH.success("文件已保存")}catch(e){throw hH.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?.[G7]:void 0;if(a)return a;let i=e.dataTransfer.getData(G7);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]),P=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]),O=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)(JV,{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}),I=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=[]:uU(e.id)&&(r.tab=uW(e.id,`${t}-tab`)),{id:t,type:"blank",position:u$(n,e.size),data:r,width:e.size.width,height:e.size.height,style:u_(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]),A=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=P(c.id,e.clientX,n.length);C(c.id,r,s),i(void 0);return}let d=a?a.payloads?.[G8]: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:u$(n,r),style:e.style??u_(r),selected:!1,data:{...e.data??{},resizing:!1}}}({source:d.node,nodeId:u,center:o})]),i(u)},[n,E,S,p,P,C,r,i]),z=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[G8,G7].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&&uU(n.kind))return n;let r=t.kind;if(uU(r))return uW(r,e.id)}(e=uK(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[G8]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[G8]:u.id},s&&(c[G7]=s,d[G7]=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?uq(l.kind):(0,eb.jsx)(uk,{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:I,filePickerDialog:(0,eb.jsx)(XG,{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:z,handleCanvasDrop:A,handleNodeCanvasConnect:R,handleNodeCanvasEdgeAction:D,handleNodeCanvasNodeAction:_,renderedCanvasNodes:O}}({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)(sx,{"aria-label":"新建画布",className:"h-full min-h-0 rounded-none border-0",viewportClassName:"h-full",nodes:w,edges:t,nodeTypes:uT,edgeTypes:uR,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)(enz,{open:u,onOpenChange:h,onAdd:f}),y,(0,eb.jsx)(hX,{position:"top-right"})]})}async function enR(){return(await enU("/api/local/projects")).projects??[]}async function enD(e){return enU(`/api/local/projects/${encodeURIComponent(e)}`)}async function en_(e){return enU("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function enL(e,t){return enU(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function en$(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function enF(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function enB(e){return enU(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function enV(e){return((await enU(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>s6(e,void 0))}async function enH(e,t){return s6((await enU("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function enU(e,t){let n=await fetch((0,eT.localAPIURL)(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}xS.length;let enq=(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"}]]),enW=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],enK=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],enG=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],enX=[{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)强制上卡。"}],enY=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],enZ=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],enJ=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function enQ({onCreated:e,onCancel:t}){let{machines:n}=xC(),{models:r}=xY(),[a,i]=ew.useState("local"),{engines:o}=jv(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([]),[P,O]=ew.useState(""),[I,A]=ew.useState(""),[z,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=js(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:en0(P,1,16),maxSpawnDepth:en0(I,1,5),hitlStrictness:z,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await en_({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:en0(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,z,x,X,M,P,I,e,a,p,B,H,w,b]),Q=c===enW.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:enW.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,eA.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)(m1,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,eA.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<enW.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,eA.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)(en5,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(en2,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gL,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xy,{children:enK.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xw,{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)(en2,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gL,{value:""===h?jo:h,onValueChange:e=>m(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(en2,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gL,{value:p,onValueChange:g,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enG.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enG.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(ji,{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)(en2,{label:"工程名称(必填)",children:[(0,eb.jsx)(ez,{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)(en2,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(y9,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(w9,{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)(en2,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(ez,{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)(gL,{value:""===h?jo:h,onValueChange:e=>m(e===jo?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{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)(xZ,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(en2,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:16,value:P,onChange:e=>O(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(en2,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:5,value:I,onChange:e=>A(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(en2,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gL,{value:z,onValueChange:e=>T(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enX.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:enX.find(e=>e.value===z)?.desc})]}),(0,eb.jsxs)(en2,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gL,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enY.map(e=>(0,eb.jsx)(xw,{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===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)(hI,{}),"危险反思智能体"]}),(0,eb.jsx)(v1,{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)(en2,{label:"触发档位(severity)",children:(0,eb.jsxs)(gL,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enZ.map(e=>(0,eb.jsx)(xw,{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)(uj,{}),"评审智能体"]}),(0,eb.jsx)(v1,{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)(en2,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gL,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:enJ.map(e=>(0,eb.jsx)(xw,{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)(en1,{icon:(0,eb.jsx)(m4,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(eO,{}),label:"运行环境",value:Y}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(uC,{}),label:"运行引擎",value:enK.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(m0,{}),label:"模型",value:X?jc(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(enq,{}),label:"权限 / HITL",value:`${enG.find(e=>e.value===p)?.label??p} \xb7 ${enX.find(e=>e.value===z)?.label??z}`}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(Q2,{}),label:"编排上限",value:`同伴 ${P.trim()||`默认8`} \xb7 深度 ${I.trim()||`默认3`}`}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(G_,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(m4,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(en1,{icon:(0,eb.jsx)(uj,{}),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)(eI.Button,{type:"button",variant:"ghost",disabled:q,onClick:()=>{0===c?t?.():d(e=>Math.max(0,e-1))},children:[(0,eb.jsx)(m2,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(eI.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(m3,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(eI.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(enW.length-1,e+1)),children:["下一步",(0,eb.jsx)(m5,{className:"size-4"})]})]})})]})}function en0(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 en1({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 en2({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 en5({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)(en2,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gL,{value:e,onValueChange:t,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xy,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xw,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let en4=[{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)强制上卡。"}],en3=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],en6=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],en8=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],en7=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],en9=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],ere=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eex,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(m0,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(Q3,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uA,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(bn,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(GF,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(Q3,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(Q2,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(enq,{})}];function ert({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 enD(e);n(t),s(era(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=era(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?ero(l):void 0;async function y(){if(!l||!t)return;let r=ero(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await enL(e,(a=l,t={maxPeers:eri(a.maxPeers,1,16),maxSpawnDepth:eri(a.maxSpawnDepth,1,5),budgetSoftPct:eri(a.budgetSoftPct,1,100),budgetHardPct:eri(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=js(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:eri(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(era(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)(hI,{className:"size-8 text-hot-pink"}),(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:i}),(0,eb.jsx)(eI.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)(eex,{}),"工程设置"]}),(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:ere.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,eA.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)(erl,{icon:(0,eb.jsx)(eex,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(ers,{label:"名称",children:(0,eb.jsx)(ez,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(ers,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(y9,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(m0,{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)(hI,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),js(l.engine)?(0,eb.jsx)(ers,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(m0,{className:"size-4"}),children:(0,eb.jsxs)(gL,{value:""===l.ccModel?jo:l.ccModel,onValueChange:e=>w({ccModel:e===jo?"":e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xy,{children:jl.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(xZ,{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)(ern,{}),(0,eb.jsx)(w8,{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)(ern,{}),(0,eb.jsx)(w7,{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)(ern,{}),(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)(hI,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(w9,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:js(l.engine)?e.slice(-1):e})}),js(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)(ern,{}),(0,eb.jsx)(ji,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:js(l.engine),hint:js(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(Q2,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(ers,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(ers,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(ez,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(G_,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(ers,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(ez,{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)(ers,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(ez,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(ers,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(ez,{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)(erl,{icon:(0,eb.jsx)(enq,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(ers,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gL,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en4.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en4.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(ers,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gL,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en3.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en3.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(ers,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(ez,{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)(hI,{}),"危险反思智能体"]}),(0,eb.jsx)(v1,{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)(ers,{label:"触发档位(severity)",children:(0,eb.jsxs)(gL,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en6.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ers,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(ez,{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)(uj,{}),"评审智能体"]}),(0,eb.jsx)(v1,{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)(ers,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gL,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en8.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(ers,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(ez,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(erl,{icon:(0,eb.jsx)(Q3,{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)(hI,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(ers,{label:"引擎(engine)",children:(0,eb.jsxs)(gL,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en7.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(ers,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gL,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:en9.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:en9.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,eA.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)(m1,{}),"已保存"]}):null,v?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(era(t)),children:"撤销"}):null,(0,eb.jsxs)(eI.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)(m1,{className:"size-4"}),"保存"]})]})})]}):null}function ern(){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)(hI,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function err(e){return e&&e>0?String(e):""}function era(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:err(t.maxPeers),maxSpawnDepth:err(t.maxSpawnDepth),budgetTokens:err(e.budgetTokens),budgetSoftPct:err(t.budgetSoftPct),budgetHardPct:err(t.budgetHardPct),approvalParkTtlSeconds:err(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 eri(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 ero(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 erl({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 ers({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 erc=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function erd({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,eA.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)(xp,{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 eru({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,eA.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function erf(){return{kind:"human",id:"local",displayName:"我"}}async function erh(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erM(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function erm(e){return erM(`/api/local/issues/${encodeURIComponent(e)}`)}async function erp(e,t){return erM(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function erg(e,t){return erM(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erx(e){await erM(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erv(e,t){return erM(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function erb(e,t,n=erf()){return erM(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function ery(e){return(await erM(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function erw(e){return(await erM(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erj(e,t,n,r){return erM(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erk(e){await erM(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erN(e){return(await erM(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erS(e,t,n,r){await erM(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erC extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erM(e,t){let n=await fetch((0,eT.localAPIURL)(e),{cache:"no-store",...t,headers:{...t?.body?{"Content-Type":"application/json"}:{},...t?.headers}}),r=await n.json().catch(()=>({}));if(!n.ok)throw new erC("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let erE=[{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"}],erP={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erO=[...erE,erP],erI={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erA=["task","feature","bug","chore","question"],erz={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"},erT={low:"低",normal:"普通",high:"高",urgent:"紧急"},erR=["low","normal","high","urgent"],erD={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"},er_={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},erL=["depends_on","blocks","parent","relates_to"],er$={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"}},erF={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function erB(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 erV={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},erH={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"},erU=(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"}]]),erq=(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 erW({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([erm(e),ery(e).catch(()=>[]),erw(t).catch(()=>[]),erh(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hH.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 erw(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erj(t,o.id,e,n),await k()}catch(e){hH.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erk(e),await k()}catch(e){hH.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await erg(o.id,e);l(t),a?.(t);let n=await ery(o.id).catch(()=>s);c(n)}catch(e){hH.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erv(o.id,erf());l(e),a?.(e);let t=await ery(o.id).catch(()=>s);c(t),hH.success("认领成功")}catch(e){e instanceof erC&&409===e.status?(hH.error("认领失败:该 issue 已被他人认领"),j()):hH.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await erb(o.id,v.trim()),b("");let e=await ery(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hH.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function P(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erx(o.id),i?.(o.id),r()}catch(e){hH.error(e instanceof Error?e.message:"删除失败")}finally{x(!1)}}}let O=o?.progress??{percent:0,checklist:[]};function I(e){return 0===e.length?O.percent:Math.round(e.filter(e=>e.done).length/e.length*100)}async function A(e){let t=O.checklist.map((t,n)=>n===e?{...t,done:!t.done}:t);await C({progress:{percent:I(t),checklist:t}})}async function z(e){let t=e.trim();if(!t)return;let n=[...O.checklist,{text:t,done:!1}];await C({progress:{percent:I(n),checklist:n}})}async function T(e){let t=O.checklist.filter((t,n)=>n!==e);await C({progress:{percent:I(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)(dE,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsxs)(fw,{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)(fN,{className:"sr-only",children:o?`#${o.number} ${o.title}`:"issue 详情"}),(0,eb.jsx)(fS,{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)(erK,{label:"标题",children:(0,eb.jsx)(ez,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(erK,{label:"描述",children:(0,eb.jsx)(y9,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(erK,{label:`进度 \xb7 ${O.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeT,{value:O.percent,className:"h-2"}),(0,eb.jsx)("div",{className:"flex flex-col gap-1.5",children:O.checklist.map((e,t)=>(0,eb.jsxs)("div",{className:"group flex items-center gap-2 text-sm",children:[(0,eb.jsx)(xH,{checked:e.done,onCheckedChange:()=>void A(t)}),(0,eb.jsx)("span",{className:(0,eA.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)(fb.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(erG,{onAdd:e=>void z(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)(erY,{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:erF[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:erB(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)(y9,{value:v,onChange:e=>b(e.target.value),rows:2,placeholder:"写评论…",className:"min-h-9"}),(0,eb.jsx)(eI.Button,{size:"sm",disabled:!v.trim()||g,onClick:()=>void E(),children:(0,eb.jsx)(erq,{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)(erK,{label:"状态",children:(0,eb.jsx)(erd,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erO.map(e=>(0,eb.jsx)(eru,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(erK,{label:"优先级",children:(0,eb.jsx)(erd,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erR.map(e=>(0,eb.jsx)(eru,{value:e,children:erT[e]},e))})}),(0,eb.jsx)(erK,{label:"类型",children:(0,eb.jsx)(erd,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erA.map(e=>(0,eb.jsx)(eru,{value:e,children:erI[e]},e))})}),(0,eb.jsx)(erK,{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)(erY,{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)(eI.Button,{variant:"outline",size:"sm",className:"w-full",disabled:g,onClick:()=>void M(),children:[(0,eb.jsx)(lU,{className:"size-4"})," 认领"]})}),(0,eb.jsx)(erK,{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)(fb.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)(ez,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})]})}),(0,eb.jsx)(erK,{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=er$[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)(erU,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",er_[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)(fb.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(erX,{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:["创建于 ",erB(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",erB(o.updatedAt)]})]}),(0,eb.jsxs)(eI.Button,{variant:"ghost",size:"sm",className:"text-hot-pink hover:bg-hot-pink/10 hover:text-hot-pink",disabled:g,onClick:()=>void P(),children:[(0,eb.jsx)(bc,{className:"size-4"})," 删除 issue"]})]})]})]})]})})}function erK({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 erG({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)(ez,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})}function erX({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)(erd,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:erL.map(e=>(0,eb.jsx)(eru,{value:e,children:er_[e]},e))}),(0,eb.jsx)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"sm",onClick:()=>{o(!1),s("")},children:"取消"})})]}):(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",className:"w-full",disabled:r,onClick:()=>o(!0),children:[(0,eb.jsx)(lY,{className:"size-4"})," 添加关联"]})}function erY({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,eA.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)(uj,{className:n}):(0,eb.jsx)(VP,{className:n})})}let erZ=["backlog","todo","in_progress","blocked","review","done","cancelled"],erJ={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=erZ.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)(Q2,{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:er$[e].stroke}}),er_[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)(Q2,{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:er$[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=er0(t,n),a=er0(n,t),i=er$[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:er_[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=erJ[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,eA.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,eA.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,erO.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 er0(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 er1="application/x-vantaloom-issue";function er2({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([erh(e),erw(e).catch(()=>[]),erN(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[...erE,erP])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 erg(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(er1)||e.dataTransfer.getData("text/plain");r&&M(r,t,n)}async function P(e,t,n){g(null);try{await erS(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erC&&404===e.status||g(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),S({silent:!0})}let O=w?[...erE,erP]:erE;return(0,eb.jsxs)(ees,{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)(erc,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(Q2,{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,eA.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)(erc,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,eA.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)(Q2,{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)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void S(),disabled:u,children:[(0,eb.jsx)(bs,{className:(0,eA.cn)("size-4",u&&"animate-spin")}),"刷新"]})]})]}),i.length>0?(0,eb.jsx)(er5,{approvals:i,onResolve:P}):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)(eI.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,eA.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:O.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,eA.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,eA.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)(lY,{className:"size-4"})})]}),(0,eb.jsxs)("div",{className:(0,eA.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)(er6,{onCancel:()=>N(null),onCreate:async r=>{try{let a=await erp(e,{...r}),i="backlog"===t.status?a:await erg(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)(er3,{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)(erW,{issueId:b,projectId:e,open:null!==b,onClose:()=>y(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),erw(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))})]})}function er5({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)(enq,{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)(er4,{approval:e,onResolve:t},e.approvalId))})]})}function er4({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,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erH[e.classification]),children:erV[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)(jC,{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:erB(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(ez,{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)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:null!==n,onClick:()=>{i(!1),l("")},children:"取消"}),(0,eb.jsxs)(eI.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)(fb.XIcon,{className:"size-4"}),"确认拒绝"]})]})]}):(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",size:"sm",disabled:null!==n,onClick:()=>i(!0),children:[(0,eb.jsx)(fb.XIcon,{className:"size-4"}),"拒绝"]}),(0,eb.jsxs)(eI.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)(m1,{className:"size-4"}),"通过"]})]})]})}function er3({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(er1,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,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erz[e.type]),children:erI[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,eA.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erD[e.priority]),children:erT[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)(erY,{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 er6({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)(ez,{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)(erd,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erA.map(e=>(0,eb.jsx)(eru,{value:e,children:erI[e]},e))}),(0,eb.jsx)(erd,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erR.map(e=>(0,eb.jsx)(eru,{value:e,children:erT[e]},e))})]}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",onClick:t,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",disabled:!n.trim()||s,children:s?(0,eb.jsx)(eM,{className:"size-4 animate-spin"}):"新建"})]})]})}let er8=(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"}]]),er7=(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 er9({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([enF(e).catch(()=>void 0),enB(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 enD(e);if(!t)return;r(a);let o=await enV(e).catch(()=>[]);if(!t)return;c(o);let l=await erh(e).catch(()=>[]);if(!t)return;u(l);let s=await erN(e).catch(()=>[]);if(!t)return;let d=await en$(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 QG(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)(ees,{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)(uk,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(eae,{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)(eex,{}),"设置"]}):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)(ear,{icon:(0,eb.jsx)(uj,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(erc,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(G_,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(ear,{icon:(0,eb.jsx)(uk,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(eat,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(ean,{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)(eal,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eas,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function eae({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)(enq,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function eat({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)(eeV,{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 enL(e,{budgetTokens:n}),l=await en$(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)(eeV,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,eA.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,eA.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)(m1,{}),"保存"]}),(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)(fb.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)(H_,{}),"调整"]})]})})]})}function ean({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)(uj,{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,eA.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)(VC,{}),(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 ear({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,eA.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 eaa({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)(bs,{className:(0,eA.cn)(e&&"animate-spin")}),"刷新"]})}let eai=["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 eao(e,t){return"其他"===t?"bg-ash-gray":eai[e%eai.length]??"bg-ash-gray"}function eal({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)(er8,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(eaa,{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,eA.cn)("h-full",eao(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,eA.cn)("size-2.5 shrink-0 rounded-sm",eao(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 eas({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)(VC,{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)(eaa,{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,eA.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)(er7,{}):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 eac={delete:"Delete",empty:"Drop here",title:"Trash"};function ead({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eac,...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,eA.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,eA.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)(bc,{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)(fb.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)(bc,{className:"size-5"})})})}function eau({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,ix.createPortal)((0,eb.jsxs)("div",{className:(0,eA.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(ead,{active:!e&&void 0!==a,items:e?[]:n,className:(0,eA.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,eA.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)(X7,{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?.[G9],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[Xe],a&&i&&(i[G9]={...a,config:{...a.config}}),l&&i&&(i[Xe]={...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 eaf=(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"}]]),eah=(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"}]]),eam=(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"}]]),eap=(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"}]]),eag=(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"}]]),eax=(0,ek.default)("radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]),eav=(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"}]]),eab=(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"}]]),eay=(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"}]]),eaw=(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"}]]),eaj=(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 eak="Collapsible",[eaN,eaS]=ci(eak),[eaC,eaM]=eaN(eak),eaE=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=ch({prop:r,defaultProp:a??!1,onChange:o,caller:eak});return(0,eb.jsx)(eaC,{scope:n,disabled:i,contentId:cu(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cx.div,{"data-state":eaT(s),"data-disabled":i?"":void 0,...l,ref:t})})});eaE.displayName=eak;var eaP="CollapsibleTrigger",eaO=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eaM(eaP,n);return(0,eb.jsx)(cx.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":eaT(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:cl(e.onClick,a.onOpenToggle)})});eaO.displayName=eaP;var eaI="CollapsibleContent",eaA=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eaM(eaI,e.__scopeCollapsible);return(0,eb.jsx)(cR,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaz,{...r,ref:t,present:e})})});eaA.displayName=eaI;var eaz=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eaM(eaI,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,co.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)},[]),cs(()=>{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)(cx.div,{"data-state":eaT(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 eaT(e){return e?"open":"closed"}var eaR=e.i(91e3);let eaD={"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-autopilot":"settings","preferences-system-prompt":"settings","preferences-skills":"settings","preferences-memory":"settings","preferences-layout":"settings","network-topology":"settings","network-settings":"settings","search-settings":"settings","check-update":"settings",account:"settings"};function ea_({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=eaD[n]??(eaJ.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,eA.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,eA.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)(eaL,{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)(eaH,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eaY,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(ea4,{onItemSelect:i,onAccountSettings:g})]})}function eaL({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 enR();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)(ea1,{icon:eab,label:eeo.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)(ea2,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:eeo.projectEmpty}):g.map(c=>(0,eb.jsx)(ea$,{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 ea$({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 erN(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 enV(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)(eaE,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,eA.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)(eaO,{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)(xp,{className:(0,eA.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)(uk,{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)(ea5,{active:!0})]})]}),(0,eb.jsx)(eaA,{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)(eaF,{icon:(0,eb.jsx)(uk,{className:"size-4"}),label:eeo.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(eaF,{icon:(0,eb.jsx)(eah,{className:"size-4"}),label:eeo.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(eaF,{icon:(0,eb.jsx)(eex,{className:"size-4"}),label:eeo.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)(eaU,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eaG,{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:eeo.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)(lY,{className:"size-4 shrink-0"}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:eeo.projectNewConversation})]})]})})})]})}function eaF({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 eaB="__all__",eaV={status:"all",location:eaB,sort:"recent"};function eaH({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 sP();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(eaV),m=ew.useMemo(()=>{let e=new Set;for(let t of s)e.add(t.ownerMachineId||sk);return Array.from(e)},[s]),p=ew.useCallback(e=>sN(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===eaB||(e.ownerMachineId||sk)===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!==eaV.status||f.location!==eaV.location||f.sort!==eaV.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)(eaU,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eaG,{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.jsxs)(yw,{children:[(0,eb.jsx)(yk,{asChild:!0,children:(0,eb.jsx)(ea1,{icon:tl,label:eeo.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsx)(yI,{className:"min-w-44",children:(0,eb.jsxs)(yA,{onSelect:()=>t({item:{id:"import-claude-session"}}),children:[(0,eb.jsx)(v3,{}),(0,eb.jsx)("span",{className:"flex-1",children:"导入 Claude 会话"})]})})]})}),(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)(eaW,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(ea2,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eaU({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=Hd(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,eA.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,eA.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)(eaU,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eaq={all:"全部",running:"运行中",idle:"空闲"};function eaW({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===eaB?"全部":a(e.location);return(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,eA.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)(Q3,{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)(y1,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(y4,{children:"筛选与排序"}),(0,eb.jsxs)(y0,{children:[(0,eb.jsxs)(y8,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eaq[e.status]})]}),(0,eb.jsx)(y7,{children:(0,eb.jsxs)(yG,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(y5,{value:"all",children:"全部"}),(0,eb.jsx)(y5,{value:"running",children:"运行中"}),(0,eb.jsx)(y5,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(y0,{children:[(0,eb.jsxs)(y8,{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)(y7,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(yG,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(y5,{value:eaB,children:"全部"}),r.map(e=>(0,eb.jsx)(y5,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(y3,{}),(0,eb.jsx)(y4,{children:"排序"}),(0,eb.jsxs)(yG,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(y5,{value:"recent",children:"最近活动"}),(0,eb.jsx)(y5,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y3,{}),(0,eb.jsx)(y2,{onSelect:()=>t(eaV),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eaK({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,eA.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 eaG({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)(eaK,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eaX,{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 eaX({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)(yA,{onSelect:()=>l(),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yA,{onSelect:()=>c(),children:[(0,eb.jsx)(VC,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yA,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bc,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,eA.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)(ea5,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{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)(lG,{className:"size-4"})})}),(0,eb.jsxs)(y1,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(y2,{onSelect:()=>l(),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(y2,{onSelect:()=>c(),children:[(0,eb.jsx)(VC,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(y2,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bc,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yw,{children:[(0,eb.jsx)(yk,{asChild:!0,children:g}),(0,eb.jsx)(yI,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(d6,{open:u,onOpenChange:f,children:(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:d}),(0,eb.jsxs)(uv,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eaY({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(w_,{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)(eaQ,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eaZ,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eaZ({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,eA.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)(ea5,{active:!0})]})}let eaJ=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uC,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(m0,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uj,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eaw,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uC,{})},{id:"preferences-autopilot",label:"自动巡检",icon:(0,eb.jsx)(eax,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eex,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eav,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(jF,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(eag,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eah,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(Ux,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(GF,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(Q2,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(Q2,{})},{id:"search-settings",label:"搜索设置",icon:(0,eb.jsx)(xM,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(v3,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bs,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eaj,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jC,{})}]}];function eaQ({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eaJ.map(n=>(0,eb.jsx)(ea0,{title:n.title,icon:n.icon,items:n.items,activeWorkspace:e,onItemSelect:t},n.id))})}function ea0({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)(eaE,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaO,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,eA.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)(xp,{className:(0,eA.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eaA,{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,eA.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)(ea5,{active:!0})]},e.id)})})]})}let ea1=ew.forwardRef(function({icon:e,label:t,onClick:n,...r},a){return(0,eb.jsxs)("button",{ref:a,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",...r,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 ea2(){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 ea5({active:e}){return(0,eb.jsx)("span",{className:(0,eA.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function ea4({onItemSelect:e,onAccountSettings:t}){let{user:n}=ti(),r=n?.name??eei.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(yF,{children:[(0,eb.jsx)(yV,{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)(m5,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(y1,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(y4,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(y2,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eex,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(y2,{disabled:!0,children:[(0,eb.jsx)(eaf,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(y2,{disabled:!0,children:[(0,eb.jsx)(Un,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(y3,{}),(0,eb.jsxs)(y2,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Ga,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(ea6,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(y3,{}),(0,eb.jsx)(ea8,{})]})]})]})})}let ea3=["light","dark","jelly"];function ea6(){let{resolvedTheme:e,setTheme:t}=(0,hA.useTheme)(),[n,r]=ew.useState(eaR.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaR.appearanceThemeStorageKey)??eaR.defaultAppearanceTheme;r(e),(0,eaR.applyAppearanceTheme)({theme:e})},[]);let a=n===eaR.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=ea3[(ea3.indexOf(a)+1)%ea3.length]??"light";function o(e){r(e),window.localStorage.setItem(eaR.appearanceThemeStorageKey,e),(0,eaR.applyAppearanceTheme)({theme:e})}let l="dark"===a?eap:eay;return(0,eb.jsxs)(y2,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(eaR.jellyAppearanceTheme);return}o(eaR.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:eei.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function ea8(){let{logout:e}=ti();return(0,eb.jsxs)(y2,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eam,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let ea7=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}),ea9=()=>{let e=ew.default.useContext(ea7);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function eie(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function eit(){return ein(/^iPhone/)||ein(/^iPad/)||ein(/^Mac/)&&navigator.maxTouchPoints>1}function ein(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 eir="u">typeof window?ew.useLayoutEffect:ew.useEffect;function eia(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let eii="u">typeof document&&window.visualViewport;function eio(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function eil(e){for(eio(e)&&(e=e.parentElement);e&&!eio(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let eis=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eic=0;function eid(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function eiu(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=eil(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 eif(e){return e instanceof HTMLInputElement&&!eis.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eih(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eim=new WeakMap;function eip(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||eim.set(e,r)}let eig=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function eix(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(", ")[eig(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eig(t)?5:4]):null}function eiv(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let eib=[.32,.72,0,1],eiy="vaul-dragging";function eiw(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 eij({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=eiw(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=eiw(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 eik=()=>()=>{},eiN=null,eiS=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=ea9(),c=eih(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dD,{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})});eiS.displayName="Drawer.Overlay";let eiC=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}=ea9(),[y,w]=ew.default.useState(!1),j=eih(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}=ea9(),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?eiv(document.body,{background:"black"}):eik,eiv(t,{transformOrigin:eig(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${eib.join(",")})`}));let n=eiv(t,{borderRadius:"8px",overflow:"hidden",...eig(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(dF,{"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)}})});eiC.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}=ea9(),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 eiM=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:P=!1}){var O,I;let[A=!1,z]=eij({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==(O=Z.current)?void 0:O.getBoundingClientRect().height)||0),Q=ew.default.useRef((null==(I=Z.current)?void 0:I.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]=eij({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)),eig(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),eip(r.current,{transition:`transform 0.5s cubic-bezier(${eib.join(",")})`,transform:eig(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eip(a.current,{transition:`opacity 0.5s cubic-bezier(${eib.join(",")})`,opacity:"0"}):eip(a.current,{transition:`opacity 0.5s cubic-bezier(${eib.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&&eip(a.current,{transition:`opacity 0.5s cubic-bezier(${eib.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=eig(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]||eip(r.current,{transform:eig(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;eir(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eic&&eit()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=eia((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=eia(eid(document,"touchstart",e=>{((a=eil(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eid(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}),eid(document,"touchend",e=>{let t=e.target;eif(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eid(document,"focus",e=>{let t=e.target;eif(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",eii&&(eii.height<window.innerHeight?requestAnimationFrame(()=>{eiu(t)}):eii.addEventListener("resize",()=>eiu(t),{once:!0}))}))},!0),eid(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eic&&(null==o||o())}}},[t])}({isDisabled:!A||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(eie()&&null===eiN&&e&&!i){eiN={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(eie()&&null!==eiN&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eiN),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eiN=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:A,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?eix(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(eiy),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||z(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=eix(Z.current,w);eip(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${eib.join(",")})`}),eip(F.current,{transition:`opacity 0.5s cubic-bezier(${eib.join(",")})`,opacity:"1"}),l&&t&&t>0&&A&&eip(e,{borderRadius:"8px",overflow:"hidden",...eig(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(${eib.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eif(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(()=>(A&&(eip(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eim.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[A]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dE,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),z(e))},open:A},ew.default.createElement(ea7.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,eit()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eig(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eiy),q.current=!1,_(!1),H.current=new Date;let r=eix(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-(eig(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-(eig(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(eiy),q.current=!0,eip(Z.current,{transition:"none"}),eip(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eip(Z.current,{transform:eig(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),eip(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);eip(c,{borderRadius:`${t}px`,transform:eig(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eip(Z.current,{transform:eig(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:A,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;eip(Z.current,{transform:eig(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),eip(Z.current,{transition:`transform 0.5s cubic-bezier(${eib.join(",")})`,transform:eig(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=eix(Z.current,w);eip(Z.current,{transition:"none",transform:eig(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eig(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eip(Z.current,{transition:`transform 0.5s cubic-bezier(${eib.join(",")})`,transform:eig(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:P}},n))},eiE=function(e){let t=ea9(),{container:n=t.container,...r}=e;return ew.default.createElement(dT,{container:n,...r})};function eiP({className:e,...t}){return(0,eb.jsx)(eiS,{"data-slot":"drawer-overlay",className:(0,eA.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 eiO({className:e,children:t,...n}){return(0,eb.jsxs)(eiE,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiP,{}),(0,eb.jsxs)(eiC,{"data-slot":"drawer-content",className:(0,eA.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 eiI({className:e,...t}){return(0,eb.jsx)(dq,{"data-slot":"drawer-title",className:(0,eA.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eiA({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)(eiz,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiM,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiO,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eiI,{className:"sr-only",children:"导航"}),(0,eb.jsx)(ea_,{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 eiz({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,eA.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)(s9,{})}),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 eiT=(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"}]]),eiR=[{id:"canvas",label:eeo.canvas,icon:(0,eb.jsx)(uk,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uj,{})},{id:"settings",label:eeo.settings,icon:(0,eb.jsx)(eex,{})}],eiD=[{id:"canvas",title:eeo.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:eeo.canvas,items:[{id:"open-recent-canvas",label:eeo.canvasRecent,icon:(0,eb.jsx)(uk,{})},{id:"new-canvas",label:eeo.canvasNew,icon:(0,eb.jsx)(lY,{})},{id:"all-canvases",label:eeo.canvasAll,icon:(0,eb.jsx)(uM,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:eeo.conversationRecent,icon:(0,eb.jsx)(eiT,{})},{id:"new-agent-conversation",label:eeo.conversationNew,icon:(0,eb.jsx)(uj,{})}]}]},{id:"settings",title:eeo.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eex,{})}]}]}],ei_=(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"}]]),eiL=(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"}]]),ei$=(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"}]]),eiF=(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 eiB(){let{user:e,machine:t,logout:n,unbind:r,refreshUser:a}=ti(),[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 eY("online");let e=eH();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 eJ(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)(Bm,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(j$,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(Qx,{}),(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)(Qx,{}),(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)(eI.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:b,disabled:i,children:[i?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(bs,{}),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)(ez,{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)(eI.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)(m1,{})}),(0,eb.jsx)(eI.Button,{size:"icon-sm",variant:"ghost",className:"size-8 shrink-0",onClick:()=>f(!1),disabled:p,"aria-label":"取消",children:(0,eb.jsx)(fb.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)(H_,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bm,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(ei$,{className:"size-3"}):(0,eb.jsx)(eiF,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(Qx,{}),(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)(eiF,{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)(eiV,{}),(0,eb.jsx)(eiH,{}),(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)(d6,{children:[(0,eb.jsx)(d8,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(eiL,{}),"解除绑定"]})}),(0,eb.jsxs)(um,{children:[(0,eb.jsxs)(up,{children:[(0,eb.jsx)(ux,{children:"确认解除设备绑定?"}),(0,eb.jsx)(uv,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(ug,{children:[(0,eb.jsx)(uy,{children:"取消"}),(0,eb.jsx)(ub,{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)(Qx,{}),(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)(eI.Button,{variant:"outline",size:"sm",className:"shrink-0",onClick:j,children:[(0,eb.jsx)(eam,{}),"退出登录"]})]})]})]})})}):null}function eiV(){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 eQ(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)(ei_,{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)(ez,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(ez,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(ez,{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)(eI.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 eiH(){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 jh({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 jf();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)(uw,{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)(Qg,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(v1,{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 eiU=["PageUp","PageDown"],eiq=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],eiW={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eiK="Slider",[eiG,eiX,eiY]=hY(eiK),[eiZ,eiJ]=ci(eiK,[eiY]),[eiQ,ei0]=eiZ(eiK),ei1=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]=ch({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=m6(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)(eiQ,{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)(eiG.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(eiG.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?ei4:ei3,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:cl(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=eiU.includes(e.key)||e.shiftKey&&eiq.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});ei1.displayName=eiK;var[ei2,ei5]=eiZ(eiK,{startEdge:"left",endEdge:"right",size:"width",direction:1}),ei4=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,co.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=h1(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=eoo([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(ei2,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(ei6,{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=eiW[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),ei3=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,co.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=eoo([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(ei2,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(ei6,{"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=eiW[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),ei6=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=ei0(eiK,n);return(0,eb.jsx)(cx.span,{...c,ref:t,onKeyDown:cl(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eiU.concat(eiq).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:cl(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:cl(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:cl(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),ei8="SliderTrack",ei7=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=ei0(ei8,n);return(0,eb.jsx)(cx.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});ei7.displayName=ei8;var ei9="SliderRange",eoe=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=ei0(ei9,n),i=ei5(ei9,n),o=ew.useRef(null),l=(0,co.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>eoi(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cx.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});eoe.displayName=ei9;var eot="SliderThumb",eon=ew.forwardRef((e,t)=>{let n=eiX(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,co.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(eor,{...e,ref:i,index:o})}),eor=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=ei0(eot,c),m=ei5(eot,c),[p,g]=ew.useState(null),x=(0,co.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=ga(p),y=h.values[d],w=void 0===y?0:eoi(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=eoo([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)(eiG.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cx.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:cl(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(eoa,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});eon.displayName=eot;var eoa=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,co.useComposedRefs)(a,r),o=gk(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)(cx.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function eoi(e,t,n){return m6(100/(n-t)*(e-t),[0,100])}function eoo(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 eol(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function eos({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>eol(n)??eol(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(ei1,{"data-slot":"slider",defaultValue:eol(t),value:eol(n),min:r,max:a,className:(0,eA.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)(ei7,{"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)(eoe,{"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)(eon,{"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))]})}eoa.displayName="RadioBubbleInput";let eoc=[1e4,3e4,12e4,3e5,6e5];function eod(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 eou(e){return(e&&e.length?e:eoc).map(e=>Math.round(e/1e3)).join(", ")}function eof(){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 jh({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eod(n)),h(eou(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([jf(),xU()]);t(eod(e)),h(eou(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void p(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(eos,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eoh,{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)(Qg,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(v1,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(Qx,{}),(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)(Qg,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(v1,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoh,{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)(Qg,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(ez,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eoh,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(y9,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:s||"无法加载代理配置"})]})}function eoh({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.label},e.id))]})]})}let eom="__native__";function eop(e){return{enabled:!1,pollIntervalSec:0,targetFolder:"",engine:"reclaude",model:"",maxItemsPerRun:0,...e.autopilot??{}}}function eog(){var e;let[t,n]=ew.useState(null),[r,a]=ew.useState(!0),[i,o]=ew.useState(!1),[l,s]=ew.useState(""),[c,d]=ew.useState(!1);function u(e){n(t=>t?{...t,...e}:t),d(!0)}async function f(){if(t&&!i){o(!0),s("");try{let e=await jh({autopilot:t});n(eop(e)),d(!1)}catch(e){s(e instanceof Error?e.message:"Save failed")}finally{o(!1)}}}if(ew.useEffect(()=>{!async function(){try{let e=await jf();n(eop(e))}catch(e){s(e instanceof Error?e.message:"Failed to load config")}finally{a(!1)}}()},[]),r)return(0,eb.jsx)("div",{className:"rounded-lg border border-dashed px-3 py-6 text-sm text-muted-foreground",children:"正在读取自动巡检配置"});if(!t)return(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:l||"无法加载自动巡检配置"})]});let h=!t.enabled;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.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("h3",{className:"text-base font-semibold tracking-normal",children:"自动巡检 (Autopilot)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"让本机定期轮询 Hub 的新前端报错与用户反馈,自动发起巡检会话并请求你批准后修复。"})]}),c&&(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",onClick:()=>void f(),disabled:i,children:[(0,eb.jsx)(Gl,{className:"size-4"}),i?"保存中":"保存"]})]}),l?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:l})]}):null,(0,eb.jsx)("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 space-y-1",children:[(0,eb.jsx)(Qg,{className:"text-sm font-semibold",children:"启用自动巡检"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,本机会定期轮询 Hub 的新前端报错和用户反馈,自动创建巡检会话提出待办并请求你批准后再修复(默认关闭)。"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"需要本机以 Hub 管理员身份登录。"})]}),(0,eb.jsx)(v1,{checked:t.enabled,onCheckedChange:e=>u({enabled:e})})]})}),(0,eb.jsxs)("section",{className:(0,eA.cn)("grid gap-4 rounded-lg border bg-card p-4 transition-opacity",h&&"opacity-60"),children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"目标工程目录"}),(0,eb.jsx)(ez,{value:t.targetFolder,onChange:e=>u({targetFolder:e.currentTarget.value}),placeholder:"D:\\\\Projects\\\\Vantaloom-ui"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"巡检会话使用的工程根目录(绝对路径)。留空则巡检不会运行。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"引擎"}),(0,eb.jsxs)(gL,{value:""===(e=t.engine)||"vantaloom"===e?eom:e,onValueChange:e=>u({engine:e===eom?"":e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:"选择引擎"})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"reclaude",children:"reclaude(默认)"}),(0,eb.jsx)(xw,{value:"claude-code",children:"claude-code"}),(0,eb.jsx)(xw,{value:eom,children:"原生 vantaloom"})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"巡检会话使用的 Agent 运行引擎。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"模型"}),(0,eb.jsx)(ez,{value:t.model,onChange:e=>u({model:e.currentTarget.value}),placeholder:"claude-sonnet-4 / 模型路由"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"reclaude/claude-code 填 Claude 模型 id;原生填模型路由。"})]}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"轮询间隔(秒)"}),(0,eb.jsx)(ez,{type:"number",min:0,value:t.pollIntervalSec||"",onChange:e=>u({pollIntervalSec:Number(e.currentTarget.value)||0}),placeholder:"60"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空/0 使用默认 60。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"每轮最多处理条数"}),(0,eb.jsx)(ez,{type:"number",min:0,value:t.maxItemsPerRun||"",onChange:e=>u({maxItemsPerRun:Number(e.currentTarget.value)||0}),placeholder:"10"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空/0 使用默认 10。"})]})]})]})]})}let eox=(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 eov="Accordion",eob=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eoy,eow,eoj]=hY(eov),[eok,eoN]=ci(eov,[eoj,eaS]),eoS=eaS(),eoC=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eoy.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoA,{...r,ref:t}):(0,eb.jsx)(eoI,{...r,ref:t})})});eoC.displayName=eov;var[eoM,eoE]=eok(eov),[eoP,eoO]=eok(eov,{collapsible:!1}),eoI=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=ch({prop:n,defaultProp:r??"",onChange:a,caller:eov});return(0,eb.jsx)(eoM,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eoP,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eoR,{...o,ref:t})})})}),eoA=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=ch({prop:n,defaultProp:r??[],onChange:a,caller:eov}),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)(eoM,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eoP,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eoR,{...i,ref:t})})})}),[eoz,eoT]=eok(eov),eoR=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,co.useComposedRefs)(l,t),c=eow(n),d="ltr"===h1(a),u=cl(e.onKeyDown,e=>{if(!eob.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)(eoz,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eoy.Slot,{scope:n,children:(0,eb.jsx)(cx.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoD="AccordionItem",[eo_,eoL]=eok(eoD),eo$=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoT(eoD,n),o=eoE(eoD,n),l=eoS(n),s=cu(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eo_,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eaE,{"data-orientation":i.orientation,"data-state":eoW(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eo$.displayName=eoD;var eoF="AccordionHeader",eoB=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoT(eov,n),i=eoL(eoF,n);return(0,eb.jsx)(cx.h3,{"data-orientation":a.orientation,"data-state":eoW(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eoB.displayName=eoF;var eoV="AccordionTrigger",eoH=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoT(eov,n),i=eoL(eoV,n),o=eoO(eoV,n),l=eoS(n);return(0,eb.jsx)(eoy.ItemSlot,{scope:n,children:(0,eb.jsx)(eaO,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eoH.displayName=eoV;var eoU="AccordionContent",eoq=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoT(eov,n),i=eoL(eoU,n),o=eoS(n);return(0,eb.jsx)(eaA,{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 eoW(e){return e?"open":"closed"}function eoK({...e}){return(0,eb.jsx)(eoC,{"data-slot":"accordion",...e})}function eoG({className:e,...t}){return(0,eb.jsx)(eo$,{"data-slot":"accordion-item",className:(0,eA.cn)("border-b last:border-b-0",e),...t})}function eoX({className:e,children:t,...n}){return(0,eb.jsx)(eoB,{className:"flex",children:(0,eb.jsxs)(eoH,{"data-slot":"accordion-trigger",className:(0,eA.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)(xp,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function eoY({className:e,children:t,...n}){return(0,eb.jsx)(eoq,{"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,eA.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eoq.displayName=eoU;let eoZ={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eoJ(e){return{...e.claudeCode??{}}}function eoQ(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 eo0(){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 jp()).engines??[];r(e),t(t=>t?eoQ(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([jf(),jm(),xU()]),o=n.engines??[];t(eoQ(eoJ(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 jh({claudeCode:e});t(eoJ(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void b(),disabled:s,children:[(0,eb.jsx)(Gl,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(eI.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)(v3,{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:eoZ[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,eA.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)(eP,{}):(0,eb.jsx)(eox,{}),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)(eoK,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(eoG,{value:"adapter",children:[(0,eb.jsx)(eoX,{children:"适配器"}),(0,eb.jsxs)(eoY,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"适配器命令"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"适配器入口 (…/@zed-industries/claude-code-acp/dist/index.js)"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(ez,{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)(eoG,{value:"auth",children:[(0,eb.jsx)(eoX,{children:"认证"}),(0,eb.jsxs)(eoY,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(ez,{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)(eoG,{value:"summary",children:[(0,eb.jsx)(eoX,{children:"摘要模型"}),(0,eb.jsx)(eoY,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eo1,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:f||"无法加载引擎配置"})]})}function eo1({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.label},e.id))]})]})}let eo2=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eah,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(Uh,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eO,{})}],eo5=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(s9,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(ct,{})}];function eo4(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=J7();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:eo2.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),J9({mode:e})},className:(0,eA.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,eA.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:eo5.map(e=>{let t=n===e.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var t;r(t=e.id),J9({agentSide:t})},className:(0,eA.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 eo3(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function eo6(){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 jh({memory:e});t(eo3(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jf();t(eo3(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(eos,{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)(Qx,{}),(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)(Qg,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(v1,{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)(QA,{scopes:["global"]})]})]}):(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载记忆配置"})]})}let eo8=(0,ek.default)("check-check",[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]]),eo7=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function eo9(e){return{id:e.id,providerName:e.providerName,protocol:e.protocol,endpointUrl:e.endpointUrl,apiKey:e.apiKey??"",models:e.models,selectedModelIds:e.selectedModelIds,builtin:e.builtin,loadingModels:!1,saving:!1,error:e.lastError??"",savedKeyAvailable:!!e.apiKey||!!e.builtin,editing:!1}}function ele(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await xU();t(e.routes.map(eo9))}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 xW({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>eo9(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 xK(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 xU();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):[eo9(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)(eI.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)(lY,{className:"size-4"}),"添加模型路由"]})]}),a?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{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)(eln,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function elt({value:e,title:t}){let[n,r]=ew.useState(!1);return(0,eb.jsx)("button",{type:"button",tabIndex:-1,title:t??"复制",disabled:!e,onClick:async()=>{if(e)try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),1200)}catch{}},className:"absolute right-1 top-1/2 flex size-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-40",children:n?(0,eb.jsx)(m1,{className:"size-3.5 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3.5"})})}function eln({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})}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 xq({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]);let d=e.models.length>0&&e.selectedModelIds.length===e.models.length;if(!e.editing||e.builtin){let t=e.selectedModelIds.map(t=>e.models.find(e=>e.id===t)?.displayName||t).filter(Boolean),n=eo7.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)(lq,{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)(eI.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>c({editing:!0}),children:[(0,eb.jsx)(H_,{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)(ez,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gL,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:eo7.map(e=>(0,eb.jsx)(xw,{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.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(ez,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",className:"pr-8",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(elt,{value:e.endpointUrl,title:"复制端点 URL"})]}),(0,eb.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(ez,{value:e.apiKey,type:"text",placeholder:"API Key",autoComplete:"off",spellCheck:!1,className:"pr-8 font-mono",onChange:e=>c({apiKey:e.currentTarget.value})}),(0,eb.jsx)(elt,{value:e.apiKey,title:"复制 API Key"})]})]}),(0,eb.jsx)(Qx,{}),(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)(m0,{className:"size-4 text-muted-foreground"}),"可用模型",e.models.length>0?(0,eb.jsxs)("span",{className:"text-xs font-normal text-muted-foreground tabular-nums",children:[e.selectedModelIds.length,"/",e.models.length]}):null]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[e.loadingModels?(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"拉取中"}):null,e.models.length>0?(0,eb.jsxs)(eI.Button,{type:"button",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>c({selectedModelIds:d?[]:e.models.map(e=>e.id)}),children:[(0,eb.jsx)(eo8,{className:"size-3.5"}),d?"全不选":"全选"]}):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,eA.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)(xH,{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)(ez,{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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"模型路由错误"}),(0,eb.jsx)(QF,{className:"break-words",children:e.error})]}):null,(0,eb.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,eb.jsxs)(eI.Button,{type:"button",variant:"destructive",onClick:r,disabled:e.saving,children:[(0,eb.jsx)(bc,{className:"size-4"}),"删除"]}),(0,eb.jsx)(eI.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function elr(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function ela(){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 jh({skills:e});t(elr(n)),r(await QN()),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([jf(),QN()]);t(elr(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{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)(eI.Button,{type:"button",size:"sm",onClick:()=>void x(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(eos,{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)(Bm,{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)(eI.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)(fb.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)(Qg,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(ez,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(eI.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)(lY,{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)(QR,{})]})]})}async function eli(){return ell("/api/local/subagent-config")}async function elo(e){return ell("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function ell(e,t){let n=await fetch((0,eT.localAPIURL)(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 els(e){return{explore:{...e.explore},workflow:{...e.workflow},operator:{...e.operator},custom:{...e.custom,models:[...e.custom.models??[]]}}}let elc={explore:{title:"探索子代理",icon:(0,eb.jsx)(VS,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uz,{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)(uA,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function eld(){let[e,t]=ew.useState(null),{models:n,loading:r}=xY(),[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 elo({explore:e.explore,workflow:e.workflow,operator:e.operator,custom:e.custom});t(els(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 eli();t(els(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)(eI.Button,{type:"button",size:"sm",onClick:()=>void f(),disabled:o,children:[(0,eb.jsx)(Gl,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(elu,{tourId:`subagent-${a}`,meta:elc[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)(elf,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:s||"无法加载子代理配置"})]})}function elu({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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(elh,{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)(Qg,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(v1,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"系统提示词"}),t.promptOverride?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>a({promptOverride:""}),children:"恢复默认"}):null]}),(0,eb.jsx)(y9,{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 elf({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)(uj,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(v0,{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 elh({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gL,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{placeholder:r})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))]})]})}function elm(){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 jh({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jf();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)(eI.Button,{type:"button",size:"sm",onClick:()=>void d(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:s})]}):null,(0,eb.jsx)(y9,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elp({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)(eof,{}):"subagent-config"===e?(0,eb.jsx)(eld,{}):"cc-engine-config"===e?(0,eb.jsx)(eo0,{}):"autopilot"===e?(0,eb.jsx)(eog,{}):"system-prompt"===e?(0,eb.jsx)(elm,{}):"skills"===e?(0,eb.jsx)(ela,{}):"memory"===e?(0,eb.jsx)(eo6,{}):"layout"===e?(0,eb.jsx)(eo4,{}):(0,eb.jsx)(ele,{})})})}let elg=(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 elx(e,t){if(e.isLocal)return(0,eT.localAPIURL)(t);let n=t.replace(/^\/v1(?=\/)/,"");return(0,eT.localAPIURL)(`/v1/remote/${e.id}${n}`)}async function elv(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 elb(){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((0,eT.localAPIURL)("/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(elx(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 elv(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(elx(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)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void o(),disabled:n,children:[(0,eb.jsx)(bs,{className:(0,eA.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)(eO,{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)(eI.Button,{size:"sm",onClick:()=>void l(e),children:[(0,eb.jsx)(elg,{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)(eP,{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 ely=(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"}]]),elw=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),elj=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elk(){let{user:e}=ti(),[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 e4())}catch(e){o(e instanceof Error?e.message:"读取余额失败")}finally{a(!1)}},[]);ew.useEffect(()=>{e&&(k(),e8().then(e=>f(e.models)).catch(()=>f([])))},[e,k]),ew.useEffect(()=>{if(!e)return;let t=!1;return g(!0),e3(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 e6(e);j({kind:"ok",text:`兑换成功,到账 ${e2(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)(eaj,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"账户余额"})]}),(0,eb.jsxs)(eI.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)(bs,{}),"刷新"]})]}),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?"—":e2(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)(ely,{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)(ez,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(eI.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,eA.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)(elw,{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)(gL,{value:c,onValueChange:d,children:[(0,eb.jsx)(xx,{size:"sm",className:"w-44",children:(0,eb.jsx)(gV,{placeholder:"全部模型"})}),(0,eb.jsxs)(xy,{children:[(0,eb.jsx)(xw,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xw,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gL,{value:l,onValueChange:s,children:[(0,eb.jsx)(xx,{size:"sm",className:"w-32",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elj.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(elN,{label:"花费",value:e2(N.costMicro,4)}),(0,eb.jsx)(elN,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(elN,{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)(Cw,{width:"100%",height:"100%",children:(0,eb.jsxs)(Ze,{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)(ZR,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(ZZ,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Z7,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(BY,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(Y4,{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)(eaj,{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 elN({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 elS=(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"}]]),elC=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elM=Object.fromEntries(elC.map(e=>[e.value,e.label])),elE={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elP(){let{user:e}=ti(),[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 e9();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 e7({title:t.trim(),type:r,content:i.trim()}),c=!1;for(let t of l)try{await te(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)(ez,{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)(gL,{value:r,onValueChange:a,children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elC.map(e=>(0,eb.jsx)(xw,{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)(y9,{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,eA.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)(eI.Button,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:()=>p.current?.click(),children:[(0,eb.jsx)(elS,{}),"添加图片"]}),(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)(fb.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,eA.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)(eI.Button,{onClick:()=>void N(),disabled:c||!t.trim(),children:[c?(0,eb.jsx)(eM,{className:"animate-spin"}):(0,eb.jsx)(erq,{}),"提交反馈"]})})]}),(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=elE[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)(Bm,{variant:"outline",children:elM[e.type]??e.type}),(0,eb.jsx)(Bm,{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)(elI,{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)(dE,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fw,{className:"max-w-3xl",children:y?(0,eb.jsx)(elA,{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)(jC,{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 elO(e,t){let[n,r]=ew.useState(null);return ew.useEffect(()=>{let n=!0,a=null;return tt(e,t).then(e=>{a=e,n?r(e):URL.revokeObjectURL(e)}).catch(()=>{}),()=>{n=!1,a&&URL.revokeObjectURL(a)}},[e,t]),n}function elI({issueId:e,imageId:t}){let n=elO(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 elA({issueId:e,imageId:t,className:n}){let r=elO(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 elz={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},elT={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elR(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((0,eT.localAPIURL)(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 elD(){let e=elR("/api/local/machines/fleet",elz),{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)(ent,{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 el_=[{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 elL(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 el$(){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 jh({network:e});t(elL(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 jf();t(elL(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载网络设置"})]});let f=el_.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)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{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)(Qg,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(v1,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(hI,{}),(0,eb.jsx)(Q$,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(QF,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(Qx,{}),(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)(Qg,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(v1,{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)(Qg,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gL,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:el_.map(e=>(0,eb.jsx)(xw,{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)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(ez,{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)(Qg,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(eos,{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)(Qx,{}),(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)(Qg,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(v1,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function elF(){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)(el$,{})})})]})}let elB=[{value:"",label:"不使用(仅搜索引擎兜底)",help:"不接入 AI 搜索渠道,只用下方的搜索引擎兜底抓取。无需任何 Key。"},{value:"tavily",label:"Tavily(国际 · 为 LLM 优化)",help:"专为 AI agent 设计,结果干净、含摘要,免费额度较大。需走代理访问。在 tavily.com 获取 API Key。"},{value:"bocha",label:"博查 Bocha(国内 · 直连免代理)",help:"国产、为大模型设计的搜索 API,人民币计费、国内直连无需翻墙。在 bochaai.com 获取 API Key。"},{value:"brave",label:"Brave Search(国际 · 独立索引)",help:"独立网页索引,隐私友好、价格便宜。需走代理访问。在 brave.com/search/api 获取订阅 Token。"},{value:"serper",label:"Serper(国际 · Google 结果)",help:"Google 搜索结果转 JSON,便宜快速。需走代理访问。在 serper.dev 获取 API Key。"}],elV=[{value:"bing",label:"Bing(默认,较稳定)"},{value:"duckduckgo",label:"DuckDuckGo"}],elH=[{value:"auto",label:"自动(先 Jina 后 Firecrawl)",help:"默认。先用 Jina Reader(免费、轻),失败或为空时若配置了 Firecrawl Key 再用 Firecrawl 兜底。"},{value:"jina",label:"仅 Jina Reader",help:"只用 Jina Reader(r.jina.ai)。免费可用、有速率限制;填 Key 可提高限额。"},{value:"firecrawl",label:"仅 Firecrawl",help:"只用 Firecrawl(正文抽取更强),必须配置下方的 Firecrawl API Key。"}];function elU(e){let t=e.search;return{enable:t?.enable??!0,provider:t?.provider??"",apiKey:t?.apiKey??"",endpoint:t?.endpoint??"",enableEngineFallback:t?.enableEngineFallback??!0,engine:t?.engine??"bing",defaultReader:t?.defaultReader??"auto",jinaApiKey:t?.jinaApiKey??"",firecrawlApiKey:t?.firecrawlApiKey??"",maxResults:t?.maxResults??8,githubToken:t?.githubToken??""}}function elq(){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 jh({search:e});t(elU(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 jf();t(elU(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)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"读取失败"}),(0,eb.jsx)(QF,{children:o||"无法加载搜索设置"})]});let f=elB.find(t=>t.value===(e.provider??"")),h=elH.find(t=>t.value===(e.defaultReader??"auto"));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:"搜索设置"}),s&&(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",onClick:()=>void u(),disabled:a,children:[(0,eb.jsx)(Gl,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(QL,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q$,{children:"错误"}),(0,eb.jsx)(QF,{children:o})]}):null,(0,eb.jsx)("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 space-y-0.5",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"启用联网搜索工具"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为智能体提供 联网搜索 + 网页阅读 能力(vantaloom_search),无需启动浏览器。即使不配置任何 Key,也能用下方的搜索引擎兜底 + Jina 阅读开箱即用。"})]}),(0,eb.jsx)(v1,{checked:e.enable,onCheckedChange:e=>d({enable: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:"AI 搜索渠道"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"检索层:把关键词转成排序的「标题 / 链接 / 摘要」。配置后质量更好;不配置则只走下方搜索引擎兜底。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"搜索渠道"}),(0,eb.jsxs)(gL,{value:e.provider?e.provider:"none",onValueChange:e=>d({provider:"none"===e?"":e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elB.map(e=>(0,eb.jsx)(xw,{value:e.value||"none",children:e.label},e.value||"none"))})]}),f?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:f.help}):null]}),e.provider?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(ez,{value:e.apiKey??"",onChange:e=>d({apiKey:e.currentTarget.value}),placeholder:"搜索渠道 API Key",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"自定义接口地址(可选)"}),(0,eb.jsx)(ez,{value:e.endpoint??"",onChange:e=>d({endpoint:e.currentTarget.value}),placeholder:"留空使用渠道默认地址",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]})]}):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:"搜索引擎兜底(无需 Key)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"未配置 AI 渠道或渠道失败时,自动解析搜索引擎结果页,过滤出条目与网址。请求带浏览器指纹(uTLS + 请求头),降低被拦截概率。"}),(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)(Qg,{className:"text-sm",children:"启用搜索引擎兜底"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,未配置 AI 渠道时将无法搜索。建议保持开启。"})]}),(0,eb.jsx)(v1,{checked:e.enableEngineFallback,onCheckedChange:e=>d({enableEngineFallback:e})})]}),e.enableEngineFallback?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"兜底搜索引擎"}),(0,eb.jsxs)(gL,{value:e.engine??"bing",onValueChange:e=>d({engine:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elV.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]})]})]}):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:"阅读层:把网页抽取成干净的正文 Markdown,不启动浏览器。智能体每次调用可自选引擎,下面是它未指定时的默认。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"默认阅读引擎"}),(0,eb.jsxs)(gL,{value:e.defaultReader??"auto",onValueChange:e=>d({defaultReader:e}),children:[(0,eb.jsx)(xx,{className:"w-full",children:(0,eb.jsx)(gV,{})}),(0,eb.jsx)(xy,{children:elH.map(e=>(0,eb.jsx)(xw,{value:e.value,children:e.label},e.value))})]}),h?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:h.help}):null]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"Jina Reader API Key(可选)"}),(0,eb.jsx)(ez,{value:e.jinaApiKey??"",onChange:e=>d({jinaApiKey:e.currentTarget.value}),placeholder:"留空也可用(免费有速率限制)",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"Firecrawl API Key"}),(0,eb.jsx)(ez,{value:e.firecrawlApiKey??"",onChange:e=>d({firecrawlApiKey:e.currentTarget.value}),placeholder:"使用 Firecrawl 阅读时必填",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"})]})]}),(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:"可信信源(公共 API · 无需 Key)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"智能体可在搜索时指定来源,直接调用各站点的官方公共 API,结果比通用网页搜索干净得多——已内置启用,无需配置:"}),(0,eb.jsxs)("ul",{className:"ml-4 list-disc space-y-1 text-xs text-muted-foreground",children:[(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"GitHub / Gitee"})," — 按 star 排序搜索开源仓库"]}),(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"维基百科"})," — 词条检索(支持多语言)"]}),(0,eb.jsxs)("li",{children:[(0,eb.jsx)("span",{className:"font-medium text-foreground",children:"Fandom"})," — 游戏 / 动漫 / 影视等粉丝维基"]})]}),(0,eb.jsx)(Qx,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"GitHub Token(可选)"}),(0,eb.jsx)(ez,{value:e.githubToken??"",onChange:e=>d({githubToken:e.currentTarget.value}),placeholder:"留空也可用(匿名限速 10 次/分钟),填入可提高限额",className:"font-mono text-xs",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅用于 GitHub 来源的搜索限速提升。在 github.com/settings/tokens 生成(无需任何权限范围即可)。"})]})]}),(0,eb.jsx)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(Qg,{className:"text-sm",children:"默认返回结果数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.maxResults||8," 条"]})]}),(0,eb.jsx)(eos,{value:[e.maxResults||8],onValueChange:([e])=>d({maxResults:e}),min:1,max:20,step:1}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每次搜索返回给智能体的结果条数上限(智能体也可在调用时显式指定)。默认 8。"})]})})]})}function elW(){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:"配置智能体的联网搜索与网页阅读:AI 搜索渠道、无 Key 的搜索引擎兜底,以及 Jina / Firecrawl 阅读引擎。"})]}),(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)(elq,{})})})]})}let elK="local",elG=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function elX(){let{machines:e}=xC(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:elK,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:elK,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(elK);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??elK)},[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)(mm,{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)(mk,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mN,{value:e.id,className:"gap-1.5",children:[(0,eb.jsx)(eO,{className:"size-3.5"}),(0,eb.jsx)("span",{className:"truncate",children:e.name}),(0,eb.jsx)("span",{className:(0,eA.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(elY,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function elY({machine:e}){var t;let n=(t=e?.id??elK)===elK?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 GV(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)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:m,children:[(0,eb.jsx)(bs,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(elJ,{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 elJ({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 GK(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await GV(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)(Bm,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bm,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bm,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bm,{variant:"outline",children:"未安装"}),v=elG.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)(Ux,{})}),(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,eA.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,elG.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)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>h(!t.running),children:[m?(0,eb.jsx)(VT,{className:"size-3.5"}):t.running?(0,eb.jsx)(jB,{className:"size-3.5"}):(0,eb.jsx)(VM,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>Gq(e),!0),children:["update"===i?(0,eb.jsx)(VT,{className:"size-3.5"}):(0,eb.jsx)(bs,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>GW(e)),children:["uninstall"===i?(0,eb.jsx)(VT,{className:"size-3.5"}):(0,eb.jsx)(bc,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>GU(e,c),!0),children:[u?(0,eb.jsx)(VT,{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)(v1,{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 elQ=(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 el0(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 el1({status:e}){switch(e){case"active":return(0,eb.jsx)(Bm,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bm,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bm,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bm,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bm,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bm,{variant:"outline",children:"等待中"})}}let el2=["complete","error","canceled"];function el5({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,eA.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,eA.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 el4({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?"":`${el0(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=el2.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)(el1,{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)(VT,{className:"size-3.5"}),f&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>mZ(e.id,"pause")),children:(0,eb.jsx)(elQ,{className:"size-3.5"})}),h&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>mZ(e.id,"resume")),children:(0,eb.jsx)(VM,{className:"size-3.5"})}),m&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>mZ(e.id,"retry")),children:(0,eb.jsx)(bs,{className:"size-3.5"})}),p&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>mZ(e.id,"cancel")),children:(0,eb.jsx)(fb.XIcon,{className:"size-3.5"})}),g&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7 text-muted-foreground hover:text-destructive",disabled:i,title:"移除","aria-label":"移除",onClick:()=>l(()=>mZ(e.id,"remove")),children:(0,eb.jsx)(bc,{className:"size-3.5"})})]})]}),(0,eb.jsx)(el5,{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=el0(n),r<0?a:`${a} / ${el0(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 el3(){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 mG({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof mK)return void r("unavailable")}try{await mX(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof mK)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)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:o,children:[(0,eb.jsx)(bs,{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)(el4,{download:e},e.id))})}function el6({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)(ez,{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 el8(){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 mJ({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof mK?"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 mQ(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)(VT,{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)(ez,{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)(el6,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(el6,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(el6,{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)(ez,{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)(v1,{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)(eI.Button,{size:"sm",disabled:a,onClick:m,children:[a?(0,eb.jsx)(VT,{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)(eI.Button,{variant:"outline",size:"sm",onClick:f,children:[(0,eb.jsx)(bs,{className:"size-3.5"}),"重试"]})})]})}function el7(){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)(v3,{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)(el3,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(el8,{})]})]})})})}let el9=["light","dark","jelly"],ese={light:{label:"Light",icon:eay,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eap,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 est(){let{resolvedTheme:e,setTheme:t}=(0,hA.useTheme)(),[n,r]=ew.useState(eaR.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(eaR.appearanceThemeStorageKey)??eaR.defaultAppearanceTheme;r(e),(0,eaR.applyAppearanceTheme)({theme:e})},[]);let a=n===eaR.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=el9.indexOf(a),o=el9[(i+1)%el9.length]??"light",{icon:l,label:s,className:c}=ese[a];function d(e){r(e),window.localStorage.setItem(eaR.appearanceThemeStorageKey,e),(0,eaR.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,eA.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${eei.theme}: ${s}`,title:`${eei.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(eaR.jellyAppearanceTheme);return}d(eaR.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let esn=(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 esr=[{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}],esa=[{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}],esi=[{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"}],eso=[["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","失败"]],esl={cpu:{label:"CPU",color:"var(--chart-1)"},memory:{label:"Memory",color:"var(--chart-3)"},network:{label:"Network",color:"var(--chart-5)"}};function ess(e,t,n=42,r){return(0,eb.jsx)("section",{className:(0,eA.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?eer({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeA,{label:e,value:t,minSize:n})})}function esc(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let esd={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]}]},esu=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uz,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("运行中","运行队列"),render:e=>ess(e.title,"07",44,Q9)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(uw,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("排队","调度器"),render:e=>ess(e.title,"04",44,eee)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(enq,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("待确认","确认队列"),render:e=>ess(e.title,"03",44,eet)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("Worker","Agent worker"),render:e=>ess(e.title,"14",44,een)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(uO,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:esc("任务队列","运行队列"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:e.title}),(0,eb.jsx)(eni,{items:esr})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:esc("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)(eea,{title:e.title}),(0,eb.jsx)(enl,{workers:esa})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(eeD,{className:"size-4"}),defaultSize:{w:7,h:4},defaultConfig:esc("最近执行","执行日志"),render:e=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:e.title}),(0,eb.jsx)(ena,{items:eso})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:5,h:4},defaultConfig:esc("待确认","确认队列"),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)(eea,{title:e.title}),(0,eb.jsx)(enr,{items:esi})]})}],esf=[{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 esh(e=esd){return[{id:"metric-online",title:"在线机器",description:"当前在线机器数量。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("在线机器","机器心跳"),render:t=>ess(t.title,String(e.metrics.online),44,Q9)},{id:"metric-health",title:"健康度",description:"工作组整体健康度。",icon:(0,eb.jsx)(eP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("健康度","服务遥测"),render:t=>ess(t.title,`${e.metrics.health}%`,44,eee)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(eeB,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("平均延迟","网络遥测"),render:t=>ess(t.title,e.metrics.latency,44,eet)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esc("事件","事件流"),render:t=>ess(t.title,String(e.metrics.events),44,een)},{id:"machines",title:"机器健康矩阵",description:"各机器资源和心跳状态。",icon:(0,eb.jsx)(eO,{className:"size-4"}),defaultSize:{w:7,h:5},defaultConfig:esc("机器健康矩阵","机器遥测"),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:eer({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(enu,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(esn,{className:"size-4"}),defaultSize:{w:5,h:5},defaultConfig:esc("资源趋势","机器遥测"),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)(eea,{title:t.title}),(0,eb.jsx)(eng,{config:esl,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(Q2,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:esc("网络连接","网络遥测"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(enp,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(etE,{className:"size-4"}),defaultSize:{w:6,h:4},defaultConfig:esc("事件流","事件流"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eea,{title:t.title}),(0,eb.jsx)(end,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(GF,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:esc("服务健康","服务遥测"),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)(eea,{title:t.title}),(0,eb.jsx)(enx,{services:e.serviceHealth})]})}]}esh();let esm=[{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}],esp={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 esg({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eeE,{boardId:"runtime-operations",definitions:esu,initialLayouts:esf,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esx({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elR("/api/local/machines/telemetry",elT),a=ew.useMemo(()=>esh(r),[r]);return(0,eb.jsx)(eeE,{boardId:"telemetry",definitions:a,initialLayouts:esm,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esv({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,eA.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 esb(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function esy(e){return"u"<typeof document?null:document.querySelector(e)}function esw(){return null!=esy('[role="menu"]')}function esj(){return null!=esy('[data-tour="init-wizard"]')}function esk(){let e=esy('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=esp){esc("机器","机器组"),esc("在线","机器心跳"),esc("Runtime","Agent runtime"),esc("Token","机器注册"),esc("机器组","机器组"),esc("拓扑图","网络拓扑"),esc("直连","网络拓扑"),esc("P2P","网络拓扑"),esc("Relay","网络拓扑"),esc("中断","网络拓扑"),esc("延迟","网络遥测"),esc("候选路径","网络候选路径")}(),esc("日志与审计","审计事件"),esc("筛选","审计筛选"),esc("拒绝事件","审计事件"),esc("事件趋势","审计事件");var esN=e.i(64990);function esS(){let e=sv(),[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 sz(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(!1),[E,P]=ew.useState([]),[O,I]=ew.useState([]),[A,z]=ew.useState({}),[T,R]=ew.useState(),[D,_]=ew.useState(uF),[L,$]=ew.useState([]),[F,B]=ew.useState(),[V,H]=ew.useState(),[U,q]=ew.useState(),[W,K]=ew.useState(),G=ew.useRef(!1),X=ew.useCallback(e=>{_(t=>iZ(e,t))},[]),Y=ew.useCallback(e=>{$(t=>iZ(e,t))},[]),Z=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 sw){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]),J=ew.useCallback(async(e,t)=>{h([]),await Z(e,t)},[Z]),Q=ew.useCallback(()=>{c(void 0),i("new-agent-conversation")},[]),ee=ew.useCallback(async()=>{let e=await sO();e?await Z(e.conversation.id,e.conversation.ownerMachineId):Q()},[Z,Q]),et=ew.useCallback(async()=>{G.current=!0,_(uF),$([]),i("new-canvas");try{let e=await QX({title:"新画布",nodes:uF,edges:[]});H(e.canvas.id),q("local")}catch{H(void 0),q(void 0),G.current=!1}},[]),en=ew.useCallback(async(e,t)=>{try{await QZ(e,t);let n=await QG(e,t);G.current=!0,_(n.nodes),$(n.edges),H(n.canvas.id),q(n.canvas.ownerMachineId),i("new-canvas")}catch{}},[]),er=ew.useCallback(e=>{K(e),i("project-overview")},[]),ea=ew.useCallback(e=>{K(e),i("kanban")},[]),ei=ew.useCallback(e=>{K(e),i("project-settings")},[]),eo=ew.useCallback(async(e,t)=>{K(e);let n=t;if(!n)try{n=(await enD(e)).canvasId}catch{}if(!n)try{n=(await QX({title:"工程画布",nodes:uF,edges:[]})).canvas.id,await enL(e,{canvasId:n}).catch(()=>{})}catch{return}await en(n)},[en]),el=ew.useCallback(async(e,t,n)=>{K(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)}},[]),es=ew.useCallback(()=>{i("new-project")},[]),ec=ew.useCallback(async e=>{try{let t=await enH(e);await el(e,t.id,t.ownerMachineId)}catch{}},[el]);ew.useEffect(()=>{if(!V)return;if(G.current){G.current=!1;return}let e=window.setTimeout(()=>{QY(V,{nodes:D,edges:L,nodeIds:D.map(e=>e.id)},U).catch(()=>{})},800);return()=>window.clearTimeout(e)},[D,L,V,U]);let ed=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 et();if("all-canvases"===t.id)return void i("all-canvases");if("new-agent-conversation"===t.id)return void Q();if("import-claude-session"===t.id)return void S(!0);if("open-recent-conversation"===t.id)return void ee();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-autopilot"===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||"search-settings"===t.id||"system-downloads"===t.id||"check-update"===t.id||"account"===t.id||"balance-usage"===t.id||"feedback"===t.id)&&i(t.id)}},[et,e,ee,Q]),{start:eu}=(0,esN.useTour)(),ef=ew.useCallback(()=>{var e;eu((e={select:e=>ed({item:{id:e}}),startNewConversation:Q,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:esb(()=>e.goHome()),target:()=>esy('[role="menu"]')??esy('[data-tour="account-button"]'),gate:esw,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:esb(()=>e.select("preferences-model-routes")),target:()=>esy('[data-tour="model-route-form"]')??esy('[data-tour="add-model-route"]'),gate:()=>null!=esy('[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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>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:esb(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:esj,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:()=>!esj()||esk()>=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:()=>!esj()||esk()>=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:()=>!esj()||esk()>=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:()=>!esj(),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!=esy('[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!=esy('[placeholder="搜索组件..."]')||null!=esy('[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!=esy('[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!=esy('[placeholder="搜索组件..."]')||null!=esy('[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!=esy('[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:"使用教程"})," 重新打开本向导。开始创造吧!"]})}]}))},[ed,Q,eu]),eh=ew.useCallback(()=>{i("account")},[]),em=d?.id??s?.conversation.id,ep=!!d&&s?.conversation.id!==d.id,eg="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)(eiA,{navItems:eiR,contents:eiD,activeWorkspace:a,activeConversationId:em,activeProjectId:W,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenProjectCanvas:(e,t)=>{eo(e,t)},onOpenProjectOverview:er,onOpenProjectKanban:ea,onOpenProjectSettings:ei,onNewProjectConversation:e=>{ec(e)},onOpenProjectConversation:(e,t,n)=>{el(e,t,n)},onNewProject:()=>{es()},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:eh,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e),title:eg&&s?s.conversation.title?.trim()||"新 Agent 对话":eei.product,trailing:eg&&s?(0,eb.jsx)(jE,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(est,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,eA.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)(ea_,{navItems:eiR,contents:eiD,activeWorkspace:a,activeConversationId:em,activeCanvasId:V,activeProjectId:W,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenCanvas:(e,t)=>{en(e,t)},onOpenProjectCanvas:(e,t)=>{eo(e,t)},onOpenProjectOverview:er,onOpenProjectKanban:ea,onOpenProjectSettings:ei,onNewProjectConversation:e=>{ec(e)},onOpenProjectConversation:(e,t,n)=>{el(e,t,n)},onNewProject:()=>{es()},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:eh,subagentTree:m,activeSubagentPath:f,onOpenSubagent:e=>h(e)})}),(0,eb.jsx)("div",{className:(0,eA.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)(tc,{className:"size-4"}):(0,eb.jsx)(ts,{className:"size-4"})})})]}),(0,eb.jsxs)("section",{className:(0,eA.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)(esg,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"telemetry"===a?(0,eb.jsx)(esx,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"preferences-model-routes"===a?(0,eb.jsx)(elp,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elp,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elp,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elp,{section:"cc-engine-config"}):"preferences-autopilot"===a?(0,eb.jsx)(elp,{section:"autopilot"}):"preferences-system-prompt"===a?(0,eb.jsx)(elp,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elp,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elp,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elp,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(elX,{}):"network-topology"===a?(0,eb.jsx)(elD,{}):"network-settings"===a?(0,eb.jsx)(elF,{}):"search-settings"===a?(0,eb.jsx)(elW,{}):"system-downloads"===a?(0,eb.jsx)(el7,{}):"preferences"===a?(0,eb.jsx)(elp,{}):"check-update"===a?(0,eb.jsx)(elb,{}):"balance-usage"===a?(0,eb.jsx)(elk,{}):"feedback"===a?(0,eb.jsx)(elP,{}):"account"===a?(0,eb.jsx)(eiB,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(enQ,{onCreated:e=>{er(e)},onCancel:()=>i("home")}):"project-overview"===a&&W?(0,eb.jsx)(er9,{projectId:W,onOpenSettings:ei}):"project-settings"===a&&W?(0,eb.jsx)(ert,{projectId:W}):"kanban"===a&&W?(0,eb.jsx)(er2,{projectId:W}):("new-agent-conversation"===a||"project-conversation"===a)&&ep?(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)(Qu,{conversation:s,clipboardItems:E,clipboardDraggingId:T,onClipboardItemsChange:P,onClipboardDraggingChange:R,onOverlayOpenChange:l,onConversationCreated:e=>{c(e)},onCancelDraft:()=>i("home"),subagentStack:f,onSubagentStackChange:h,subagentTree:m,mobileView:g,onMobilePaneCountChange:b}):e?(0,eb.jsx)(esM,{activeConversationId:em,onItemSelect:ed,onOpenConversation:(e,t)=>{J(e,t)},onOpenConversationSettings:(e,t)=>{k({id:e,owner:t})},onConversationDeleted:e=>{k(t=>t?.id===e?void 0:t)}}):(0,eb.jsx)(esC,{onNewConversation:Q,onStartTour:ef}):(0,eb.jsx)(enM,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):(0,eb.jsx)(enT,{nodes:D,edges:L,selectedNodeId:F,clipboardItems:E,onNodesChange:X,onEdgesChange:Y,onNodesSet:_,onEdgesSet:$,onSelectedNodeChange:B,onClipboardItemsChange:P}),j?(0,eb.jsx)("div",{className:(0,eA.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(QU,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{J(e,t)}})}):null,(0,eb.jsx)(QW,{open:N,onOpenChange:S,onEnterConversation:(e,t)=>{J(e,t)}}),(0,eb.jsx)(eau,{hidden:!!j||(eg?o:C),items:E,trashItems:O,draggingId:T,onDraggingChange:R,onItemsChange:P,onTrashItemsChange:I,onTrashClipboardItemsChange:z,trashClipboardItems:A})]})]})}function esC({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)(esv,{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)(eI.Button,{type:"button",onClick:e,"data-tour":"home-new-conversation",children:[(0,eb.jsx)(tl,{className:"size-4"}),"新建对话"]}),(0,eb.jsxs)(eI.Button,{type:"button",variant:"outline",onClick:t,children:[(0,eb.jsx)(to,{className:"size-4"}),"使用教程"]})]})]})}function esM({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)(eaH,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function esE(){let{ready:e,user:t,logout:n}=ti();return e?t?(0,eb.jsx)(esS,{}):(0,eb.jsx)(tn,{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 esP(){return(0,eb.jsx)(ta,{children:(0,eb.jsx)(esE,{})})}e.s(["default",()=>esP],66204)}]);