@vantaloom/runtime-darwin-arm64 0.12.9 → 0.12.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERSION +1 -1
- package/bin/vantaloom-agent +0 -0
- package/bin/vantaloom-api +0 -0
- package/bin/vantaloom-browser +0 -0
- package/bin/vantaloomctl +0 -0
- package/cli/package.json +1 -1
- package/manifest.json +2 -2
- package/package.json +1 -1
- package/web/404.html +1 -1
- package/web/__next.__PAGE__.txt +2 -2
- package/web/__next._full.txt +2 -2
- package/web/__next._head.txt +1 -1
- package/web/__next._index.txt +1 -1
- package/web/__next._tree.txt +1 -1
- package/web/_next/static/chunks/{bde86c90ffcab8a4.js → 1c838699c4d317df.js} +1 -1
- package/web/_not-found/__next._full.txt +1 -1
- package/web/_not-found/__next._head.txt +1 -1
- package/web/_not-found/__next._index.txt +1 -1
- package/web/_not-found/__next._not-found/__PAGE__.txt +1 -1
- package/web/_not-found/__next._not-found.txt +1 -1
- package/web/_not-found/__next._tree.txt +1 -1
- package/web/_not-found.html +1 -1
- package/web/_not-found.txt +1 -1
- package/web/index.html +1 -1
- package/web/index.txt +2 -2
- /package/web/_next/static/{zaSjOkNFiVZO6M4DO6XGo → 2k0SbH-d4CXzHSVRAoZ5c}/_buildManifest.js +0 -0
- /package/web/_next/static/{zaSjOkNFiVZO6M4DO6XGo → 2k0SbH-d4CXzHSVRAoZ5c}/_clientMiddlewareManifest.json +0 -0
- /package/web/_next/static/{zaSjOkNFiVZO6M4DO6XGo → 2k0SbH-d4CXzHSVRAoZ5c}/_ssgManifest.js +0 -0
|
@@ -49,4 +49,4 @@ ${e.detail}`:e.title,c=Hr(e,"detail"),d=Hr(e,"title")??"",u=c?`${d}${d?"\n\n":""
|
|
|
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,ez.cn)("size-full border-0 bg-background",n)})}function GA({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 GT({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)(Gg,{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:[GC(e.size)&&(0,eb.jsx)(Bk,{variant:"outline",children:GC(e.size)}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function GR({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 GD({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=GN(e),o=e.src?e.src:t&&"svg"===GN(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,ez.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gz,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,ez.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(GI,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,ez.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,ez.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,ez.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)(GR,{labels:n})}function G_({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)(UT,{className:"size-4"}):(0,eb.jsx)(uA,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(Gx,{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)(Gw,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Gv,{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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function GL({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(()=>({...Gj,...v}),[v]),[E,P]=ew.useState(n??e.content??""),[O,I]=ew.useState(i),[z,A]=ew.useState(s),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),[L,$]=ew.useState(!1),F=ew.useRef(null),B=t??E,V=a??O,H=(N=l??z,(S=GM(e)).includes(N)?N:S[0]),U=GN(e),q=GM(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(GN(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=GN(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=GC(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,ez.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,ez.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)(Gb,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Gy,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(Gg,{className:"size-3.5"}):(0,eb.jsx)(bc,{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,ez.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)(Bk,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bk,{variant:"secondary",children:[(0,eb.jsx)(lq,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bk,{variant:"outline",children:[(0,eb.jsx)(Gx,{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)(GT,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(GD,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(GA,{file:e,value:B,labels:M}):(0,eb.jsx)(GO,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&P(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(G_,{open:D,labels:M,currentView:H,currentMode:V,saving:L,modified:d,canSwitchView:q,canSwitchMode:W&&"code"===H,canSave:K,canOpenHistory:!!(x&&e.path),onOpenChange:_,onToggleView:function(){var e;e="code"===H?"preview":"code",void 0===l&&A(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&I(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function G$(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function GF(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function GB(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GV({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),[z,A]=ew.useState(),[T,R]=ew.useState(void 0),D=ew.useRef(void 0),[_,L]=ew.useState(void 0),[$,F]=ew.useState(!1),B=ew.useRef(void 0),V=ew.useRef(void 0),H=ew.useRef(!1),[U,q]=ew.useState(!1),[W,K]=ew.useState(!1),[G,X]=ew.useState(),Y=e??E,Z=Y.find(e=>!e.disabled),[J,Q]=ew.useState(r??Z?.id),ee=n??J,et=Y.find(e=>e.id===ee&&!e.disabled)??Z;ew.useEffect(()=>{!et&&Z&&void 0===n&&Q(Z.id)},[et,n,Z]);let en=ew.useCallback(t=>{void 0===e&&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(GB(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(GB(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=G$(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){A(void 0),er(void 0),ei(void 0,!1);return}let l=B.current;l&&!(l.length===Y.length&&l.every((e,t)=>e.id===Y[t]?.id))&&(en(l),s?.(l))}A(void 0),er(void 0),ei(void 0,!1)}});let ef=et&&(k?.(et)??et.content??(0,eb.jsx)("div",{className:"grid min-h-44 place-items-center bg-muted/30 p-6 text-center text-muted-foreground",children:et.title})),eh=T?.dragging&&_?_:Y,em=T?.dragging?Y.find(e=>e.id===T.tabId):void 0,ep=T?.dragging&&em&&$?(0,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,ez.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)(pn,{})}),(0,eb.jsxs)("div",{ref:I,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,ez.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&&z===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==z;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsxs)("div",{onPointerDown:t=>(function(e,t){if(!h||e.disabled||0!==t.button)return;let n=t.currentTarget.getBoundingClientRect();A(e.id),ei(Y,!1),er({tabId:e.id,startX:t.clientX,startY:t.clientY,offsetX:t.clientX-n.left,top:n.top,width:n.width,currentX:t.clientX,currentY:t.clientY,dragging:!1})})(e,t),"data-slot":"multi-tab","data-tab-id":e.id,"data-state":r?"active":"inactive","data-dragging":z===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,ez.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":GF(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??(GF(e.title)?`${v}: ${GF(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=G$(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,ez.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)(fP.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)(pr,{})}),u.length>0?(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(wo,{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)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(wo,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,ez.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 GH=(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"}]]),GU=(0,ek.default)("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);function Gq({status:e}){return"done"===e?(0,eb.jsx)(pt,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VD,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GH,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yF,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GW({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 GK={main:"主",subagent:"子"};function GG({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,ez.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)(Gq,{status:e.status}),(0,eb.jsx)("span",{className:(0,ez.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:[GK[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GW,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(GG,{node:e,depth:t+1,activeId:n},e.id))]})}function GX({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState(""),[o,l]=ew.useState(!1),[s,c]=ew.useState(!1),[d,u]=ew.useState(!1);ew.useEffect(()=>{if(l(!1),!e)return;let n=!0;return(async()=>{try{let r=await sI(e,t);n&&l(r.conversation.loopMode??!1)}catch{}})(),()=>{n=!1}},[e,t]);let f=ew.useCallback(async n=>{if(e){c(!0),l(n);try{let r=await ce(e,n,t);l(r.conversation.loopMode??n)}catch{l(!n)}finally{c(!1)}}},[e,t]),h=ew.useCallback(()=>{o?f(!1):u(!0)},[o,f]);ew.useEffect(()=>{if(r(null),i(""),!e)return;let n=!0,a=0,o=async()=>{let o=a+=1,l=await sR(e,t);n&&o===a&&(r(l.planState),void 0!==l.planDoc&&i(l.planDoc))};o();let l=window.setInterval(o,1200);return()=>{n=!1,window.clearInterval(l)}},[e,t]);let m=n?.activePath?.length?n.activePath[n.activePath.length-1]:void 0;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)(mN,{defaultValue:"doc",className:"flex min-h-0 flex-1 flex-col gap-0",children:[(0,eb.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b px-2 py-1.5",children:[(0,eb.jsxs)(mA,{children:[(0,eb.jsx)(mT,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mT,{value:"tree",children:"执行树"})]}),(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:o?"default":"outline",disabled:!e||s,onClick:h,className:"h-7 shrink-0 gap-1.5 px-2 text-xs",title:o?"循环模式开启中:会话每轮结束后会自动续跑,直到执行树没有剩余可完成的任务。点击关闭。":"开启循环模式:会话每轮结束后自动续跑,持续完成执行树中的剩余任务",children:[(0,eb.jsx)(GU,{className:"size-3.5"}),"循环模式",o?"·开":""]})]}),(0,eb.jsx)(mR,{value:"doc",className:"min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(wK,{className:"h-full w-full min-w-0",children:(0,eb.jsx)("div",{className:"min-w-0 px-4 py-3 text-sm break-words [overflow-wrap:anywhere]",children:a.trim()?(0,eb.jsx)(V9,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mR,{value:"tree",className:"min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(wK,{className:"h-full w-full min-w-0",children:(0,eb.jsx)("div",{className:"min-w-0 px-2 py-2",children:n?.tree?(0,eb.jsx)(GG,{node:n.tree,depth:0,activeId:m}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]}),(0,eb.jsx)(ua,{open:d,onOpenChange:u,children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"开启循环模式?"}),(0,eb.jsx)(uC,{asChild:!0,children:(0,eb.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,eb.jsx)("p",{children:"开启后,每当 agent 完成一轮工作(运行自然结束)时,系统会自动注入「继续」消息, 让它继续完成执行树中剩余未完成的任务——这一切在后端进行,即使你关闭页面也会持续。"}),(0,eb.jsx)("p",{children:"循环只有在以下情况才会停止:执行树中没有剩余的「待完成(待办/进行中)」任务、 你关闭循环模式、达到安全上限(最多自动续跑 25 次)、存在等待外部事件的 hook, 或本轮运行出错/被你中止。无法完成的任务请让 agent 标记为「阻塞」。"})]})})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{onClick:()=>void f(!0),children:"开启"})]})]})})]})}function GY({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,ez.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)(uD,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(wK,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(V9,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}function GZ({url:e}){let[t,n]=ew.useState(!1),r=ew.useCallback(async()=>{try{await navigator.clipboard.writeText(e),n(!0),window.setTimeout(()=>n(!1),1500)}catch{}},[e]);return(0,eb.jsxs)("button",{type:"button",onClick:r,title:e,className:"flex min-w-0 items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:[t?(0,eb.jsx)(pt,{className:"size-3 shrink-0 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"truncate font-mono",children:e})]})}function GJ({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0),[a,i]=ew.useState(void 0),o=ew.useCallback(async()=>{if(!e)return;let n=await sG(e,t);return r(n),n},[e,t]);ew.useEffect(()=>{if(!e)return void r(void 0);let n=!0,a=async()=>{let a=await sG(e,t);n&&r(a)};a();let i=window.setInterval(a,2e3);return()=>{n=!1,window.clearInterval(i)}},[e,t]);let l=ew.useCallback(async n=>{if(e){i(n);try{let a=await sY(e,n,t);r(e=>(e??[]).map(e=>e.id===n?a:e))}catch{await o()}finally{i(void 0)}}},[e,t,o]),s=ew.useCallback(async n=>{if(e){i(n);try{await sX(e,n,t),r(e=>(e??[]).filter(e=>e.id!==n))}catch{await o()}finally{i(void 0)}}},[e,t,o]),c=n??[],d=c.filter(e=>e.enabled&&!e.disabled).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 justify-between border-b px-3 py-2",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"Hook"}),(0,eb.jsxs)("span",{className:"text-[11px] tabular-nums text-muted-foreground",children:[d,"/",c.length," 启用"]})]}),(0,eb.jsx)(wK,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:0===c.length?(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"暂无 hook"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-1.5",children:c.map(e=>{let t=e.enabled&&!e.disabled,n="webhook"===e.trigger.source?e.fireUrl:void 0;return(0,eb.jsxs)("li",{className:(0,ez.cn)("flex flex-col gap-1 rounded-md border px-2.5 py-2",!t&&"opacity-60"),children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-[13px] font-medium leading-5 text-foreground",title:e.name||e.id,children:e.name||e.id}),(0,eb.jsx)("span",{className:"block truncate text-[11px] text-muted-foreground/70",children:e.id})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,eb.jsx)(bt,{checked:t,disabled:a===e.id,onCheckedChange:()=>void l(e.id),"aria-label":"启用/停用 hook"}),(0,eb.jsx)("button",{type:"button",disabled:a===e.id,onClick:()=>void s(e.id),"aria-label":"删除 hook",title:"删除 hook",className:"grid size-6 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-destructive disabled:opacity-50 [&_svg]:size-3.5",children:(0,eb.jsx)(bb,{})})]})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[12px] leading-5",children:[(0,eb.jsx)("span",{className:"text-foreground",children:function(e){switch(e.source){case"timer":if(e.cron)return`⏱ cron: ${e.cron}`;if(e.intervalSec&&e.intervalSec>0)return`⏱ 每 ${e.intervalSec}s`;if(e.delaySec&&e.delaySec>0)return`⏱ ${e.delaySec}s 后`;return"⏱ 定时";case"process_exit":{let t=e.terminalSessionId||e.backgroundCmdId?`: ${e.terminalSessionId||e.backgroundCmdId}`:"";return`⛔ 进程退出${t}`}case"webhook":return"🔌 webhook";case"file":return`📁 文件变化${e.path?`: ${e.path}`:""}`;case"shell_poll":return`🐚 shell${e.command?`: ${e.command}`:""}`;case"lifecycle":return`🔁 生命周期${e.event?`: ${e.event}`:""}`;default:return e.source}}(e.trigger)}),(0,eb.jsx)("span",{className:"text-muted-foreground/50",children:"→"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:function(e){switch(e.type){case"resume_conversation":return"唤醒本会话";case"run_command":return`运行命令${e.command?`: ${e.command}`:""}`;case"start_conversation":return"新建会话";default:return e.type}}(e.action)})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 text-[11px] text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"tabular-nums",children:["已触发 ",e.fireCount," 次"]}),(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsx)("span",{children:function(e){if(!e)return"从未触发";let t=Date.parse(e);if(!Number.isFinite(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));return n<60?"刚刚触发":n<3600?`${Math.floor(n/60)} 分钟前触发`:n<86400?`${Math.floor(n/3600)} 小时前触发`:new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}(e.lastFiredAt)}),e.once?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsx)("span",{children:"仅一次"})]}):e.maxFires&&e.maxFires>0?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsxs)("span",{children:["上限 ",e.maxFires]})]}):null]}),n?(0,eb.jsx)("div",{className:"mt-0.5",children:(0,eb.jsx)(GZ,{url:n})}):null]},e.id)})})})})]})}function GQ({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}=x6(),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 sz(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 cn(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)(u$,{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)(HW,{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)(u$,{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 G0=(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"}]]),G1=(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"}]]),G2=(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"}]]),G5=(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 G4(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}${t}`):(0,eT.localAPIURL)(t)}async function G3(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(G4(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 G6(e,t,n){let r=await fetch(G4(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 G8(e,t){return G6(e,"/v1/extensions/browser/install",{variant:t})}async function G7(e,t){return G6(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function G9(e){return G6(e,"/v1/extensions/browser/uninstall")}async function Xe(e,t){return G6(e,"/v1/extensions/browser/enable",{enabled:t})}async function Xt(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(G4(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 Xn(e,t){return{monitoring:!!(await G6(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let Xr={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function Xa(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=Xa(r);t+=e.done,n+=e.total}return{done:t,total:n}}function Xi(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=Xi(n,t);if(e)return e}}}function Xo({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 Xl({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=Xi(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?Xi(e.tree,r):void 0}}(e),r=e.tree?Xa(e.tree):{done:0,total:0},a=t?Xa(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)(Xs,{icon:(0,eb.jsx)(uL,{}),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??Xr[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(Xo,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(pt,{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 Xs({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 Xc(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await G3(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 Xe(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await G3(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)(UI,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(Xd,{online:!0}):"starting"===e?(0,eb.jsx)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(Xd,{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)(VD,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function Xd({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,ez.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function Xu({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xD();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sI(e,t),sA(e,t).catch(()=>[]),sT(e,t).catch(()=>[])]);if(!n)return;r(a),i(o),l(s)}catch{}};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let c=ew.useMemo(()=>new Map(s.map(e=>[e.id,e])),[s]),d=e=>"local"===e||c.get(e)?.status==="online",u=e=>"local"===e?c.get("local")?.name??"本地":c.get(e)?.name??e,f=t??n?.conversation.ownerMachineId??"local",h=(n?.conversation.settings?.hosts??[]).filter(Boolean),m=n?.conversation.runUsage,p=n?.conversation.status==="working",g=(m?.cachedInputTokens??0)+(m?.cacheCreationInputTokens??0),{additions:x,deletions:v}=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=0,r=0;for(let a=Math.max(0,t);a<e.length;a+=1){let t=e[a],i=t?.additions??t?.meta?.additions,o=t?.deletions??t?.meta?.deletions;"number"==typeof i&&(n+=i),"number"==typeof o&&(r+=o)}return{additions:n,deletions:r}}(n?.events??[]),b=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=new Set;for(let r=Math.max(0,t);r<e.length;r+=1){let t=e[r];if(t?.kind==="subagent"&&Array.isArray(t.subagents))for(let e of t.subagents)e?.id&&n.add(e.id)}return n}(n?.events??[]),y=function e(t,n=0,r=[]){for(let a of t)r.push({node:a,depth:n}),a.children&&a.children.length>0&&e(a.children,n+1,r);return r}(a.filter(e=>b.has(e.id))),w=n?.conversation.planState;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col overflow-auto rounded-[inherit] bg-background text-sm",children:[(0,eb.jsx)(Xs,{icon:(0,eb.jsx)(uP,{}),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)(Xd,{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)(G5,{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)(Xd,{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)(G1,{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)(Xc,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(Xl,{state:w}):null,(0,eb.jsx)(Xs,{icon:(0,eb.jsx)(uO,{}),label:"子智能体"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===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)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fP.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(pt,{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)(Xs,{icon:(0,eb.jsx)(uB,{}),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)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hB,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fP.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(pt,{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)(Xs,{icon:(0,eb.jsx)(G0,{}),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 Xf({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 Xh({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0);ew.useEffect(()=>{if(r(void 0),!e)return;let n=!0,a=0,i=async()=>{let i=a+=1;try{let o=await sz(e,{limit:400},t);if(!n||i!==a)return;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}}(o.events)??[])}catch{}};i();let o=window.setInterval(i,1200);return()=>{n=!1,window.clearInterval(o)}},[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)(Xf,{done:o,total:i})]}),(0,eb.jsx)(wK,{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,ez.cn)("mt-px shrink-0 text-[13px] leading-5",n),"aria-hidden":!0,children:t}),(0,eb.jsx)("span",{className:(0,ez.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 Xm="application/vnd.vantaloom.canvas-node",Xp="application/vnd.vantaloom.canvas-tab",Xg="application/vnd.vantaloom.dashboard-widget",Xx="application/vnd.vantaloom.workspace-card";var Xv=e.i(78737);let Xb=(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"}]]),Xy=(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"}]]),Xw=(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"}]]),Xj=[{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"}],Xk=[{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}],XN={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)(Xy,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(Xw,{className:"size-4"}):(0,eb.jsx)(eO,{className:"size-4"})}function XM({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=Xj,ratios:h=Xk,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...XN,...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,z]=ew.useState(l),[A,T]=ew.useState(d),[R,D]=ew.useState(!1),[_,L]=ew.useState(0),$=ew.useRef(null),F=ew.useId(),[B,V]=function(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useEffect(()=>{let t=e.current;if(!t)return;function r(e){t&&n(e??{width:t.clientWidth,height:t.clientHeight})}r();let a=new ResizeObserver(e=>{let t=e[0];t?r({width:t.contentRect.width,height:t.contentRect.height}):r()});return a.observe(t),()=>a.disconnect()},[]),[e,t]}(),H=e??k,U=XS(f,o??I,f[0]??Xj[0]),q=XS(h,c??A,h[0]??Xk[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,ez.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,ez.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)(Xb,{className:"size-3.5"})}),(0,eb.jsxs)("form",{onSubmit:function(e){let t;e.preventDefault();let n=(t=S.trim())?/^[a-z][a-z\d+\-.]*:\/\//i.test(t)?t:/^(localhost|127\.0\.0\.1|\[::1\])(?::\d+)?(?:\/|$)/i.test(t)?`http://${t}`:`https://${t}`:"";C(n),en(n)},className:"min-w-0 flex-1",children:[(0,eb.jsx)("label",{className:"sr-only",htmlFor:F,children:j.urlLabel}),(0,eb.jsx)(eA,{id:F,value:S,onChange:e=>C(e.target.value),placeholder:j.urlPlaceholder,className:"h-5 rounded-md border bg-background px-2 shadow-none ui-text-kbd",spellCheck:!1})]}),(0,eb.jsx)(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)(Xv.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)(bv,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,ez.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,ez.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&&z(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,ez.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let XE=(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"}]]),XP=(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 XO({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,ez.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)(XE,{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)(XP,{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,ez.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)(XE,{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)(XE,{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)(XE,{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)(VD,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(XE,{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)(XE,{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,ez.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 XI(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}/browser${t}`):(0,eT.localAPIURL)(`/v1/browser${t}`)}async function Xz(e,t){try{await fetch(XI(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function XA({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xD(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await G3(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(XI(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 Xt(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{Xn(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=>{Xz(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await Xe(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await G3(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)(XO,{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 XT({defaultUrl:e,className:t}){let{machines:n}=xD(),[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 G3(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)(XA,{active:!0,className:t}):(0,eb.jsx)(XM,{className:t,defaultUrl:e})}let XR=[{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"}],XD=Array.from(new Set(XR.flatMap(e=>e.tags))).sort(),X_=[["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"]],XL=[["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 X$({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,ez.cn)("mx-auto flex w-full justify-center",e),...t})}function XF({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,ez.cn)("flex flex-row items-center gap-1",e),...t})}function XB({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function XV({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,ez.cn)((0,eI.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function XH({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(XV,{"aria-label":t,size:"default",className:(0,ez.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(pn,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function XU({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(XV,{"aria-label":t,size:"default",className:(0,ez.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)(pr,{})]})}function Xq({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,ez.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 XW({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XK(){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)(XY,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(XY,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XZ,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return XR.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)(XW,{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)(x_,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(eA,{value:e,onChange:e=>t(e.target.value),placeholder:"搜索策略...",className:"pl-8"})]})]}),(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"标签"}),(0,eb.jsxs)(gG,{value:n,onValueChange:r,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"全部标签"})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"all",children:"全部标签"}),XD.map(e=>(0,eb.jsx)(xI,{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)(m1,{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)(m2,{value:"allow",children:"允许"}),(0,eb.jsx)(m2,{value:"drop",children:"丢弃"}),(0,eb.jsx)(m2,{value:"deny",children:"拒绝"}),(0,eb.jsx)(m2,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qz,{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)(XG,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XG({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)(X$,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(XF,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(XB,{children:(0,eb.jsx)(XH,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,ez.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)(XB,{children:(0,eb.jsx)(XV,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(XB,{children:(0,eb.jsx)(Xq,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(XB,{children:(0,eb.jsx)(XV,{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)(XB,{children:(0,eb.jsx)(Xq,{moreLabel:"更多页"})}):null,(0,eb.jsx)(XB,{children:(0,eb.jsx)(XV,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(XB,{children:(0,eb.jsx)(XU,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,ez.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XX({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)(Bk,{variant:t,children:e},e))})}function XY({zone:e}){return(0,eb.jsx)(Bk,{variant:"Trust"===e?"secondary":"outline",children:e})}function XZ({action:e}){return(0,eb.jsx)(Bk,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XJ({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,ez.cn)("w-full caption-bottom text-sm",e),...t})})}function XQ({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,ez.cn)("[&_tr]:border-b",e),...t})}function X0({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,ez.cn)("[&_tr:last-child]:border-0",e),...t})}function X1({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,ez.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function X2({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,ez.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 X5({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,ez.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function X4({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function X3({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)(X4,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XJ,{children:[(0,eb.jsx)(XQ,{children:(0,eb.jsx)(X1,{children:t.map(e=>(0,eb.jsx)(X2,{children:e},e))})}),(0,eb.jsx)(X0,{children:n.map(e=>(0,eb.jsx)(X1,{children:e.map((e,t)=>(0,eb.jsx)(X5,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function X6(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(X4,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(eA,{placeholder:"策略名称"}),(0,eb.jsx)(eA,{placeholder:"负责人"}),(0,eb.jsx)(eA,{placeholder:"源 CIDR"}),(0,eb.jsx)(eA,{placeholder:"目标 CIDR"})]}),(0,eb.jsx)("textarea",{placeholder:"用途",className:"min-h-32 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{className:"size-4"}),"提交申请"]})})]})}function X8(){return(0,eb.jsxs)(mN,{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)(mA,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mT,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mT,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mT,{value:"renewals",children:"续期"}),(0,eb.jsx)(mT,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mT,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mR,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XK,{})}),(0,eb.jsx)(mR,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:X_})}),(0,eb.jsx)(mR,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"续期",headers:["策略","续期时间","负责人"],rows:XL})}),(0,eb.jsx)(mR,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X6,{})}),(0,eb.jsx)(mR,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function X7(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 X9(e,t){let n=t.machineId||"local";return X7((await u6(n,e.path)).items)}function Ye({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 u3();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:X7(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)(Ue,{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:X9,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function Yt({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dD,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fI,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fT,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fR,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(Ye,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function Yn(){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 Yr=(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 Ya({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)(jX,{className:"size-4"}):(0,eb.jsx)(Yr,{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,ez.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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let Yi=[];function Yo(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function Yl(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?Yl(n.children,t):void 0;if(e)return e}}function Ys(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function Yc(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function Yd(e){return e.map(e=>({...e,children:e.children?Yd(e.children):void 0}))}let Yu=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),Yf=(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"}]]),Yh=(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"}]]),Ym={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function Yp({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={...Ym,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,P]=ew.useState(n),[O,I]=ew.useState(),[z,A]=ew.useState({canScrollDown:!1,canScrollUp:!1}),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),L=ew.useRef(0),$=ew.useRef(void 0),F=ew.useRef(!1),B=ew.useRef(null),V=ew.useRef(null),H=void 0!==t,U=(H?t:j)||void 0!==N,q=Math.min(o,10),W=U?e:e.slice(0,q),K=E?C:void 0,G=44*W.length+18,X=Math.min(G,l),Y=U&&G>X,Z=0===e.length?"h-24":U?`${X}px`:"h-28",J=U&&Y?14:0;ew.useEffect(()=>{if(!U){P(!1),A({canScrollDown:!1,canScrollUp:!1});return}P(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),A({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,ez.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,ez.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)(Yh,{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,ez.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,ez.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,ez.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,ez.cn)("relative h-full overflow-x-visible",U&&Y?"clipboard-stack-scrollbar-hidden overflow-y-auto pt-2 pr-1 pb-3":"overflow-visible"),onScroll:e=>{let t=e.currentTarget;A({canScrollUp:t.scrollTop>1,canScrollDown:t.scrollTop+t.clientHeight<t.scrollHeight-1})},onDragOver:function(e){U&&N&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move")},onDrop:function(t){if(!U||!N||void 0===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)(Yg,{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&&z.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&&z.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 Yg({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,ez.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)(Yh,{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,ez.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,ez.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)(fD,{className:"size-3.5"})})]})})}function Yx({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} 项`:Yb(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)(Yf,{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)(Yu,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(Yv,{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)(Yp,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function Yv({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:Yb(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:[Yy(e.progress.bytesDone)," /"," ",Yy(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:Yb(e.progress.currentPath)}):null]})]})}function Yb(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function Yy(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 Yw=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function Yj({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,ez.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)(fP.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)(Yw,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(w8,{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 Yk({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=Yn(),[l,s]=ew.useState([]),[c,d]=ew.useState(Yi),[u,f]=ew.useState(Yi[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(Yi.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await u6(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:Ys(e.path,a.path)?{...e,children:Yd(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=Yc(e,n),a=Yc(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 Yd(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return Yd(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>Ys(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 fr()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>YC([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{fn({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??Yo(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 u3();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:Yo(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(),z=c.find(e=>e.id===u);function A(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;P(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:Yo(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{u9({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{fe({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{ft({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=Yl(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,ez.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,ez.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:z?(0,eb.jsx)(YN,{windowLayout:z,roots:l,...A(z)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(Yx,{transfers:h}),(0,eb.jsx)(Ya,{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,ez.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)(Yj,{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),...A(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:Yo(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{u9({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{fe({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{ft({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=Yl(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)(Yx,{transfers:h}),(0,eb.jsx)(Ya,{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 YN({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(w8,{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)(ua,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"确认移动"}),(0,eb.jsx)(uC,{children:e?`将 ${1===(r=a).length?r[0]?YM(r[0]):"0 项":`${r.length} 项`} 移动到 ${YM(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:YM(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:YM(e.target)})]})]}):null,(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function YC(e){return e.slice(0,10)}function YM(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function YE({className:e}){return(0,eb.jsx)(Yk,{className:(0,ez.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var YP=ew;function YO(){return(YO=Object.assign.bind()).apply(null,arguments)}var YI=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jQ.clsx)("recharts-dot",a);return kO(t)&&kO(n)&&kO(r)?ew.createElement("circle",YO({},z1(e),AC(e),{className:i,cx:t,cy:n,r:r})):null},Yz=["points"];function YA(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 YT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?YA(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)):YA(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function YR(){return(YR=Object.assign.bind()).apply(null,arguments)}function YD(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,jQ.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,Yz);return ew.createElement(YI,YR({},l,{className:a}))}function Y_(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=Me.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Tm(n),u=null==n?null:(0,ew.isValidElement)(n)?z5(n.props):"object"!=typeof n||Array.isArray(n)?null:z5(n),f=t.map((e,r)=>{var l,s,c=YT(YT(YT({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(YD,{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(_5,{zIndex:c},ew.createElement(z6,YR({className:r},h),f))}function YL(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 Y$(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?YL(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)):YL(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var YF=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=Y$(Y$(Y$({},{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}),z2(i)),AC(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(YI,s),ew.createElement(z6,{className:"recharts-active-dot",clipPath:l},t)};function YB(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=Me.activeDot}=e,l=Np(_h),s=Np(_j);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_5,{zIndex:o},ew.createElement(YF,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function YV(e,t){var n,r,a=Np(t=>OJ(t,e)),i=Np(e=>O1(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:OY.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:OQ.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function YH(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=Np(Bl),{needClipX:i,needClipY:o,needClip:l}=YV(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 YU(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 Yq(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 YW=(e,t,n)=>zC(e,"xAxis",YU(e,t),n),YK=(e,t,n)=>zS(e,"xAxis",YU(e,t),n),YG=(e,t,n)=>zC(e,"yAxis",Yq(e,t),n),YX=(e,t,n)=>zS(e,"yAxis",Yq(e,t),n),YY=kl([CR,YW,YG,YK,YX],(e,t,n,r,a)=>kK(e,"xAxis")?k2(t,r,!1):k2(n,a,!1)),YZ=kl([O7,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YJ=e=>kK(CR(e),"xAxis")?"yAxis":"xAxis",YQ=kl([YZ,(e,t,n)=>Ik(e,YJ(e),"yAxis"===YJ(e)?Yq(e,t):YU(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=My(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]])}}}),Y0=kl([CR,YW,YG,YK,YX,YQ,kf,YY,YZ,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(kO(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=kW(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==kW(e,a);return x?{x:kJ({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:kJ({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 Y1(e){var t=z2(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 Y2=["id"],Y5=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function Y4(){return(Y4=Object.assign.bind()).apply(null,arguments)}function Y3(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 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}function Y8(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}function Y7(e,t){return e&&"none"!==e?e:t}var Y9=YP.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:kF,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:k4(o,t),hide:l,type:c,color:Y7(r,i),unit:s,graphicalItemId:d}};return YP.createElement(Db,{tooltipEntrySettings:u})});function Ze(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=z1(r);return YP.createElement(Y_,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function Zt(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 Y8(Y8({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return YP.createElement(Lx,{value:t?a:void 0},n)}function Zn(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=Y3(i,Y2),h=z1(f),m=z5(f);return YP.createElement(YP.Fragment,null,(null==t?void 0:t.length)>1&&YP.createElement(z6,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},YP.createElement(AD,Y4({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&YP.createElement(AD,Y4({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&YP.createElement(AD,Y4({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),YP.createElement(Ze,{points:t,props:f,clipPathId:a}))}function Zr(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(!kV(l)||!kV(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kO(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kO(d))?YP.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function Za(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(!kV(l)||!kV(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kO(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kO(d))?YP.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function Zi(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?YP.createElement(Zr,{alpha:t,points:r,baseLine:a,strokeWidth:i}):YP.createElement(Za,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function Zo(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=TL((0,YP.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CD(),[g,x]=(0,YP.useState)(!1),v=(0,YP.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,YP.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return YP.createElement(Zt,{showLabels:!g,points:o},r.children,YP.createElement(T_,{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 Y8(Y8({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return t});if(kO(l))c=kD(w,l,e);else c=null==l||kE(l)?kD(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return Y8(Y8({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),YP.createElement(Zn,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),YP.createElement(z6,null,s&&YP.createElement("defs",null,YP.createElement("clipPath",{id:"animationClipPath-".concat(n)},YP.createElement(Zi,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),YP.createElement(z6,{clipPath:"url(#animationClipPath-".concat(n,")")},YP.createElement(Zn,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),YP.createElement(Lw,{label:r.label}))}function Zl(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,YP.useRef)(null),i=(0,YP.useRef)();return YP.createElement(Zo,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class Zs extends YP.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,jQ.clsx)("recharts-area",r),{r:p,strokeWidth:g}=Y1(t),x=Tm(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return YP.createElement(_5,{zIndex:h},YP.createElement(z6,{className:m},o&&YP.createElement("defs",null,YP.createElement(YH,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&YP.createElement("clipPath",{id:"clipPath-dots-".concat(u)},YP.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),YP.createElement(Zl,{needClip:o,clipPathId:u,props:this.props})),YP.createElement(YB,{points:n,mainColor:Y7(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&YP.createElement(YB,{points:f,mainColor:Y7(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var Zc={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:Me.area};function Zd(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=Y3(e,Y5),x=Np(CR),v=Np(C1),{needClip:b}=YV(m,p),y=Cd(),{points:w,isRange:j,baseLine:k}=null!=(t=Np(t=>Y0(t,e.id,y)))?t:{},N=Np(Bl);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?YP.createElement(Zs,Y4({},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 Zu=YP.memo(function(e){var t=A2(e,Zc),n=Cd();return YP.createElement(_T,{id:t.id,type:"area"},e=>YP.createElement(YP.Fragment,null,YP.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Y7(r,a),value:k4(n,t),payload:e}]})(t)}),YP.createElement(Y9,{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}),YP.createElement(_H,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:kZ(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),YP.createElement(Zd,Y4({},t,{id:e}))))},FR);function Zf(){return(Zf=Object.assign.bind()).apply(null,arguments)}function Zh(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}Zu.displayName="Area";var Zm=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zh(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)):Zh(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"},Fk),Zp=(0,ew.forwardRef)(function(e,t){var n,r=A2(e.categoricalChartProps,Zm),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fz,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(FA,{chartData:s.data}),ew.createElement(FD,{layout:r.layout,margin:r.margin}),ew.createElement(FL,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(F_,{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(Bu,Zf({},r,{ref:t})))}),Zg=["axis"],Zx=(0,ew.forwardRef)((e,t)=>ew.createElement(Zp,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Zg,tooltipPayloadSearcher:LB,categoricalChartProps:e,ref:t})),Zv=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 Zb(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 Zy(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 Zw(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 Zj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zw(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)):Zw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zk(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(kO(c)||A_.isSsr)return null!=(r=Zb(i,(kO(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?AU(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=AU(i,{fontSize:t,letterSpacing:n}),Zv({width:a.width+m.width,height:a.height+m.height},f)):AU(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kM(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:Zb(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Zy(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||Zy(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=Zj(Zj({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Zy(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Zj(Zj({},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=Zj(Zj({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Zj(Zj({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Zy(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Zj(Zj({},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=Zj(Zj({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Zj(Zj({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Zy(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Zj(Zj({},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 ZN=["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 ZM(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 ZE={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:Me.axis};function ZP(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=ZM(ZM(ZM({},s),z1(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=ZM(ZM({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=ZM(ZM({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",ZS({},c,{className:(0,jQ.clsx)("recharts-cartesian-axis-line",(0,jJ.default)(l,"className"))}))}function ZO(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jQ.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,ZM(ZM({},r),{},{className:i}));else if("function"==typeof n)t=n(ZM(ZM({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jQ.clsx)(o,Lj(n))),t=ew.createElement(To,ZS({},r,{className:o}),a)}return t}function ZI(e){var{ticks:t,axisType:n,axisId:r}=e,a=Nu();return(0,ew.useEffect)(()=>null==r||null==n?kF:(a(FE({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(FP({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zz=(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=Zk(ZM(ZM({},y),{},{ticks:n}),v,b),S=z1(y),C=z2(r),M=A9(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=ZM(ZM({},S),{},{fill:"none"},P),I=N.map(e=>ZM({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=kO(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))),z=I.map(e=>{var{entry:t,line:n}=e;return ew.createElement(z6,{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,jQ.clsx)("recharts-cartesian-axis-tick-line",(0,jJ.default)(a,"className"))})))}),A=I.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=ZM(ZM(ZM(ZM({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=ZM(ZM({},f),C);return ew.createElement(z6,ZS({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},AM(w,d,t)),r&&ew.createElement(ZO,{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(ZI,{ticks:N,axisId:k,axisType:j}),A.length>0&&ew.createElement(_5,{zIndex:Me.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},A)),z.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},z))}),ZA=(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,ZN),[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(_5,{zIndex:e.zIndex},ew.createElement(z6,{className:(0,jQ.clsx)("recharts-cartesian-axis",i)},ew.createElement(ZP,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:z1(e)}),ew.createElement(Zz,{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(Lr,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(Ld,{label:e.label,labelRef:e.labelRef}),e.children)))}),ZT=ew.forwardRef((e,t)=>{var n=A2(e,ZE);return ew.createElement(ZA,ZS({},n,{ref:t}))});ZT.displayName="CartesianAxis";var ZR=["x1","y1","x2","y2","key"],ZD=["offset"],Z_=["xAxisId","yAxisId"],ZL=["xAxisId","yAxisId"];function Z$(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z$(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z$(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZB(){return(ZB=Object.assign.bind()).apply(null,arguments)}function ZV(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 ZH=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 ZU(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=z1(ZV(n,ZR)))?a:{},{offset:u}=d,f=ZV(d,ZD);r=ew.createElement("line",ZB({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function Zq(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=ZV(e,Z_),s=a.map((e,a)=>{var i=ZF(ZF({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(ZU,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function ZW(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=ZV(e,ZL),s=a.map((e,a)=>{var i=ZF(ZF({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(ZU,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZK(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 ZG(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 ZX=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return kG(Zk(ZF(ZF(ZF({},ZE),n),{},{ticks:kX(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},ZY=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return kG(Zk(ZF(ZF(ZF({},ZE),n),{},{ticks:kX(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZZ={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:Me.grid};function ZJ(e){var t=Np(k3),n=Np(k6),r=CT(),a=ZF(ZF({},A2(e,ZZ)),{},{x:kO(e.x)?e.x:r.left,y:kO(e.y)?e.y:r.top,width:kO(e.width)?e.width:r.width,height:kO(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=Cd(),p=Np(e=>zk(e,"xAxis",i,m)),g=Np(e=>zk(e,"yAxis",o,m));if(!kH(c)||!kH(d)||!kO(l)||!kO(s))return null;var x=a.verticalCoordinatesGenerator||ZX,v=a.horizontalCoordinatesGenerator||ZY,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?ZF(ZF({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Cm(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?ZF(ZF({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Cm(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_5,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(ZH,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZK,ZB({},a,{horizontalPoints:b})),ew.createElement(ZG,ZB({},a,{verticalPoints:y})),ew.createElement(Zq,ZB({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(ZW,ZB({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZJ.displayName="CartesianGrid";var ZQ=["domain","range"],Z0=["domain","range"];function Z1(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 Z2(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 Z5(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=Z1(e,ZQ),{domain:i,range:o}=t,l=Z1(t,Z0);return!!Z2(n,i)&&!!Z2(r,o)&&FR(a,l)}var Z4=["type"],Z3=["dangerouslySetInnerHTML","ticks","scale"],Z6=["id","scale"];function Z8(){return(Z8=Object.assign.bind()).apply(null,arguments)}function Z7(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 Z9(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z7(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)):Z7(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Je(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 Jt(e){var t=Nu(),n=(0,ew.useRef)(null),r=CD(),{type:a}=e,i=Je(e,Z4),o=Ma(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Z9(Z9({},i),{},{type:o})},[i,o]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($S(l)):n.current!==l&&t($C({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($M(n.current)),n.current=null)},[t]),null}var Jn=e=>{var{xAxisId:t,className:n}=e,r=Np(Nl),a=Cd(),i="xAxis",o=Np(e=>zN(e,i,t,a)),l=Np(e=>zm(e,t)),s=Np(e=>zx(e,t)),c=Np(e=>OZ(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=Je(e,Z3),{id:m,scale:p}=c,g=Je(c,Z6);return ew.createElement(ZT,Z8({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jQ.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},Jr={allowDataOverflow:OY.allowDataOverflow,allowDecimals:OY.allowDecimals,allowDuplicatedCategory:OY.allowDuplicatedCategory,angle:OY.angle,axisLine:ZE.axisLine,height:OY.height,hide:!1,includeHidden:OY.includeHidden,interval:OY.interval,label:!1,minTickGap:OY.minTickGap,mirror:OY.mirror,orientation:OY.orientation,padding:OY.padding,reversed:OY.reversed,scale:OY.scale,tick:OY.tick,tickCount:OY.tickCount,tickLine:ZE.tickLine,tickSize:ZE.tickSize,type:OY.type,niceTicks:OY.niceTicks,xAxisId:0},Ja=ew.memo(e=>{var t=A2(e,Jr);return ew.createElement(ew.Fragment,null,ew.createElement(Jt,{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(Jn,t))},Z5);Ja.displayName="XAxis";var Ji=["type"],Jo=["dangerouslySetInnerHTML","ticks","scale"],Jl=["id","scale"];function Js(){return(Js=Object.assign.bind()).apply(null,arguments)}function Jc(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 Jd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jc(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)):Jc(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ju(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 Jf(e){var t=Nu(),n=(0,ew.useRef)(null),r=CD(),{type:a}=e,i=Ju(e,Ji),o=Ma(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Jd(Jd({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($E(l)):n.current!==l&&t($P({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($O(n.current)),n.current=null)},[t]),null}function Jh(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=Np(Nl),s=Cd(),c=Nu(),d="yAxis",u=Np(e=>zb(e,t)),f=Np(e=>zv(e,t)),h=Np(e=>zN(e,d,t,s)),m=Np(e=>O0(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||Lo(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($T({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=Ju(e,Jo),{id:b,scale:y}=m,w=Ju(m,Jl);return ew.createElement(ZT,Js({},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,jQ.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Jm={allowDataOverflow:OQ.allowDataOverflow,allowDecimals:OQ.allowDecimals,allowDuplicatedCategory:OQ.allowDuplicatedCategory,angle:OQ.angle,axisLine:ZE.axisLine,hide:!1,includeHidden:OQ.includeHidden,interval:OQ.interval,label:!1,minTickGap:OQ.minTickGap,mirror:OQ.mirror,orientation:OQ.orientation,padding:OQ.padding,reversed:OQ.reversed,scale:OQ.scale,tick:OQ.tick,tickCount:OQ.tickCount,tickLine:ZE.tickLine,tickSize:ZE.tickSize,type:OQ.type,niceTicks:OQ.niceTicks,width:OQ.width,yAxisId:0},Jp=ew.memo(e=>{var t=A2(e,Jm);return ew.createElement(ew.Fragment,null,ew.createElement(Jf,{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(Jh,t))},Z5);function Jg({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,ez.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)(mN,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mA,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mT,{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,ez.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)(Jj,{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)(Jx,{metric:d}):null]})]})]})}function Jx({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jy,{segments:e.composition}),(0,eb.jsx)(Jw,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jv,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{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)(Jv,{panel:e},e.id))}),(0,eb.jsx)(Jw,{details:e.details,columns:3})]})}function Jv({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,ez.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)(Jk,{data:e.data,color:e.color,className:(0,ez.cn)("w-full",n)})]})}function Jb(){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 Jy({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,ez.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 Jw({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,ez.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 Jj({data:e,color:t}){return(0,eb.jsx)(Jk,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Jk({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)(Vp,{config:o,className:(0,ez.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Zx,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZJ,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(Ja,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Jp,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(B3,{cursor:!1,content:(0,eb.jsx)(Vx,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(Zu,{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})]})})}Jp.displayName="YAxis";let JN=(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 JM({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(JA(a))?t:e(a,n,r)}(a,n),i=JA(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:JR(Math.min(100,e.cpu)),memoryMb:JR(e.memoryMb),diskMbps:JR(e.diskMbps),networkMbps:JR(e.networkMbps)}))}(f.processes)].sort((e,t)=>JT(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jz(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>JT(e,t,o,s)))t.push(Jz(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,ez.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)(mN,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mA,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mT,{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)(JE,{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)(JE,{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,ez.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)(JP,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(JO,{platform:f.platform,status:e.status}),(0,eb.jsx)(JI,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(JI,{value:e.memoryMb,max:JD(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${J_(t/1024)} GB`:`${J_(t)} MB`}),(0,eb.jsx)(JI,{value:e.diskMbps,max:Math.max(1,JD(m,"diskMbps")),label:`${J_(e.diskMbps)} MB/秒`}),(0,eb.jsx)(JI,{value:e.networkMbps,max:Math.max(1,JD(m,"networkMbps")),label:`${J_(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function JE({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jW:jq,{className:(0,ez.cn)("ml-1 size-3",n)}):null}function JP({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xS:pr;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,ez.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 JO({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)(JN,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function JI({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,ez.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jz(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 JA(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function JT(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 JR(e){return Math.round(10*e)/10}function JD(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function J_(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function JL({className:e}){let t=JF("/api/local/machines/processes"),n=JB("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(JM,{machines:r,className:(0,ez.cn)("h-full min-h-0 w-full",e)})}function J$({className:e}){let t=JF("/api/local/machines/performance"),n=JB("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Jg,{machines:r,className:(0,ez.cn)("h-full min-h-0 w-full",e)})}function JF(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 JB(e){let{machines:t}=xD(),[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 JV=(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"}]]),JH=(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"}]]),JU={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},Jq=[{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 JW(e,t,n){return e.getPropertyValue(t).trim()||n}function JK(e,t=!1){let n=getComputedStyle(e),r=JW(n,"--foreground","#18181b"),a=JW(n,"--terminal-background",JW(n,"--background","#ffffff")),i="transparent"===a?JW(n,"--background","#ffffff"):a,o=JW(n,"--muted-foreground","#71717a"),l=JW(n,"--border","#e4e4e7"),s=JW(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:JW(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:JW(n,"--terminal-red","#bf616a"),green:JW(n,"--terminal-green","#5e8c61"),yellow:JW(n,"--terminal-yellow","#b06f3c"),blue:JW(n,"--terminal-blue","#5e81ac"),magenta:JW(n,"--terminal-magenta","#b48ead"),cyan:JW(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:JW(n,"--terminal-bright-red","#d06f79"),brightGreen:JW(n,"--terminal-bright-green","#6b9a70"),brightYellow:JW(n,"--terminal-bright-yellow","#c2824b"),brightBlue:JW(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:JW(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:JW(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JG(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JX({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:JU.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=JW(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:JK(g.current),...j.current,allowTransparency:!0}),E=new h,O=new m,I=new p;function z(){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(z),(n=new ResizeObserver(z)).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))})),JG(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:O,webLinksAddon:I,fit:z,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=JK(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=JK(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,JG(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,ez.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,ez.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 JY({status:e="idle"}){return"running"===e?(0,eb.jsx)(JV,{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)(yF,{className:"size-3.5 text-muted-foreground"})}function JZ({session:e}){return e.aiControlled?(0,eb.jsx)(JH,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(JY,{status:e.status})}function JJ({sessions:e,defaultSessions:t=Jq,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(()=>({...JU,...g,status:{...JU.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,ez.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,ez.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uB,{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,ez.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)(JZ,{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)(fP.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)(JQ,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JQ({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)(JX,{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 J0({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,z=I??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{P.current=r},[r]);let A=a.find(e=>e.id===d)??a[0],T=A?.shells?.find(e=>e.id===f)??A?.shells?.[0],R=ew.useMemo(()=>o.map(e=>e.id),[o]),D=ew.useMemo(()=>o.filter(e=>e.aiControlled).map(e=>e.id),[o]),_=R.join("\0"),L=D.join("\0"),$=ew.useCallback((e,t)=>{let n=b.current.get(e);if(t){let t=j.current.get(e);void 0!==t&&(window.clearTimeout(t),j.current.delete(e))}n?.setCursorSuppressed(t)},[]),F=ew.useCallback(e=>{let t=j.current.get(e);void 0!==t&&window.clearTimeout(t);let n=window.setTimeout(()=>{j.current.delete(e),$(e,!1)},90);j.current.set(e,n)},[$]),B=ew.useCallback(e=>{let t=w.current.get(e),n=b.current.get(e);if(!t||!n||t.writing)return;if(!t.buffer){w.current.delete(e),F(e);return}void 0!==t.drainTimer&&(window.clearTimeout(t.drainTimer),t.drainTimer=void 0);let r=t.buffer.slice(0,65536);t.buffer=t.buffer.slice(r.length),t.writing=!0,$(e,!0);try{n.write(r,()=>{(t.writing=!1,b.current.has(e))?t.buffer?t.drainTimer=window.setTimeout(()=>B(e),0):(w.current.delete(e),F(e)):w.current.delete(e)})}catch{t.writing=!1,w.current.delete(e),F(e)}},[F,$]),V=ew.useCallback((e,t)=>{if(!t)return;if(!b.current.get(e))return void y.current.set(e,`${y.current.get(e)??""}${t}`);let n=w.current.get(e);(n||(n={buffer:"",writing:!1},w.current.set(e,n)),n.buffer+=t,$(e,!0),n.buffer.length>=65536)?B(e):n.writing||void 0!==n.drainTimer||(n.drainTimer=window.setTimeout(()=>B(e),8))},[B,$]),H=ew.useCallback((e,t)=>{(k.current.set(e,t.sequence),"output"===t.type&&t.data)?V(e,t.data):"status"===t.type&&t.status&&l(n=>n.map(n=>n.id===e?{...n,status:t.status??n.status,updatedAt:t.createdAt}:n))},[V]),U=ew.useCallback(e=>{if(v.current.has(e))return;let t=new EventSource(function(e,t=0){let n=new URLSearchParams;t>0&&n.set("after",String(t));let r=n.toString();return(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(A&&!m){M.current=!1,p(!0);try{let e=await fN({machineId:A.id,scopeId:I,shell:T?.id,cwd:A.defaultCwd,cols:100,rows:30});l(t=>t.some(t=>t.id===e.id)?t:[...t,e]),c(e.id),U(e.id)}catch{return}finally{p(!1)}}},[m,U,A,T,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([fj(),fk(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,z]),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,ez.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)(gG,{value:A?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xM,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bp,{className:"size-3.5"}),(0,eb.jsx)(gJ,{placeholder:"机器"})]}),(0,eb.jsx)(xO,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gG,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xM,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(gJ,{placeholder:"Shell"})}),(0,eb.jsx)(xO,{align:"start",children:A?.shells?.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!A||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lY,{className:"size-4"})})]}),(0,eb.jsx)(JJ,{sessions:o.map(J1),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}),fS(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,fC(t,r).catch(()=>{}).finally(()=>{let n=N.current.get(t);n&&(n.inFlight=!1,n.buffer?e(t):void 0===n.timer&&N.current.delete(t))})}(t)},6))}(e)},onSessionResize:function(e,t){let n=`${t.cols}x${t.rows}`;S.current.get(e)!==n&&(S.current.set(e,n),fM(e,t).then(e=>{l(t=>t.map(t=>t.id===e.id?{...t,...e}:t))}).catch(()=>{}))},onSessionReady:function(e,t){b.current.set(e,t);let n=y.current.get(e);n&&(y.current.delete(e),V(e,n))},className:"min-h-0 rounded-none border-0"})]})}function J1(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 J2(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=u2("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Up,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(GL,{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)(XT,{className:`${n} border-0`,defaultUrl:e.defaultUrl??u2("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=u2("diff-tab-viewer");return(0,eb.jsx)(qH,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=u2("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Up,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qz,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:J5(e)},source:void 0!==e.defaultValue?{type:J5(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(J0,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function J5(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function J4(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)(GV,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:u1(n.kind),content:J2(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:[Xp],createLabel:"打开文件",emptyContent:(0,eb.jsx)(Up,{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)(Uh,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(Ye,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(JL,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(J$,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(X8,{})});case"machine-file-management":return(0,eb.jsx)(YE,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HW,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(Xu,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GX,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(GY,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"tasks-pane":return(0,eb.jsx)(Xh,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"hooks-pane":return(0,eb.jsx)(GJ,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"sidequery-pane":return(0,eb.jsx)(GQ,{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 J2(t.tab??u2(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 J3({kind:e,...t}){return J4(e,t)}let J6="application/vnd.vantaloom.agent-pane-shredder",J8="application/vnd.vantaloom.agent-pane-cutter";function J7(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 J9=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(bm,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(UT,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(UM,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(cl,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(cc,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(UT,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(UA,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Uz,{})}];function Qe(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 Qt(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function Qn(e,t){return[e[t[0]]??50,e[t[1]]??50]}function Qr({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=Qe(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(a,e),onLayoutChanged:e=>n?.("outer",Qn(e,a)),children:[(0,eb.jsx)(h_,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=Qe(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(a,e),onLayoutChanged:e=>n?.("outer",Qn(e,a)),children:[(0,eb.jsx)(h_,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=Qe(t,"outer",[58,42]),a=Qe(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("left",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=Qe(t,"outer",[42,58]),a=Qe(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("right",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=Qe(t,"outer",[58,42]),a=Qe(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("top",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=Qe(t,"outer",[42,58]),a=Qe(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("bottom",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=Qe(t,"outer"),i=Qe(t,"left"),o=Qe(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(l,a),onLayoutChanged:e=>n?.("outer",Qn(e,l)),children:[(0,eb.jsx)(h_,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(s,i),onLayoutChanged:e=>n?.("left",Qn(e,s)),children:[(0,eb.jsx)(h_,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(c,o),onLayoutChanged:e=>n?.("right",Qn(e,c)),children:[(0,eb.jsx)(h_,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function Qa({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,ez.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(J8)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(J6)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jH)&&(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(J8)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(J6)){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?.[jH]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jH);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,ez.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:jV(r)?J4(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{J7(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)(HW,{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 Qi({open:e,onOpenChange:t,onAdd:n}){let r=Ql.map(e=>jF(e.kind)).filter(e=>!!e);return(0,eb.jsx)(vO,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vz,{children:[(0,eb.jsx)(vA,{children:"没有匹配组件。"}),(0,eb.jsx)(vT,{heading:"可放入窗口",children:r.map(e=>(0,eb.jsxs)(vR,{"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)(vD,{children:"添加"})]},e.id))})]})]})})}function Qo({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jV(e)?J4(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{J7(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)(HW,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let Ql=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(uP,{})},{kind:"sidequery-pane",label:"旁问",icon:(0,eb.jsx)(u$,{})},{kind:"hooks-pane",label:"Hook",icon:(0,eb.jsx)(uH,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uz,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(UP,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(UI,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(UE,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uB,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(UO,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uD,{})}];function Qs(e,t,n){return Math.min(n,Math.max(t,e))}function Qc({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(xS,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(wt,{align:t,sideOffset:6,className:"min-w-40",children:Ql.map(t=>(0,eb.jsxs)(wn,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function Qd({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),z=ew.useRef(null),A=ew.useRef(null);ew.useEffect(()=>{let e={};j(t=>{let n=new Set(g.map(e=>e.content.id)),r=t.map(e=>({...e,cardIds:e.cardIds.filter(e=>n.has(e))})).filter(e=>e.cardIds.length>0),a=new Set(r.flatMap(e=>e.cardIds)),o=g.map(e=>e.content.id).filter(e=>!a.has(e));if(o.length>0){r=r.map(e=>({...e,cardIds:[...e.cardIds]}));let t=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){z.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";z.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):A.current&&function(e,t){let n=A.current;if(!n)return;if("width"===n.kind){let t=Qs(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=Qs(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=z.current;I.current=null,z.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}A.current&&(A.current=null,S(null))})();return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t),window.addEventListener("pointercancel",t),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t),window.removeEventListener("pointercancel",t)}},[N]);let R=a.map((e,t)=>({column:e,realIndex:t}));b&&R.reverse();let D=(0,eb.jsx)("div",{className:(0,ez.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(Qc,{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,ez.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,ez.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,z.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)(fD,{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)(fP.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(Qo,{content:a,index:i,conversationId:e,ownerMachineId:t,workspaceFolders:u,onContentChange:c,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p})})]},a.id)}),n.cardIds.slice(0,-1).map((e,t)=>(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:r=>{var a;return a=n.cardIds[t+1],void(0===r.button&&(r.preventDefault(),r.stopPropagation(),A.current={kind:"height",aboveId:e,belowId:a,startY:r.clientY,hA:T(e),hB:T(a)},S("resize")))},style:{top:r[t]??0},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})},`hbar-${e}`)),l&&!s?(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>{0===e.button&&(e.preventDefault(),e.stopPropagation(),A.current={kind:"growHeight",cardId:l,startY:e.clientY,h0:T(l)},S("resize"))},style:{top:o+6},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})}):null,(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>(function(e,t){if(0!==t.button)return;t.preventDefault(),t.stopPropagation();let n=a.find(t=>t.key===e)?.width??360;A.current={kind:"width",columnKey:e,startX:t.clientX,startWidth:n,factor:b?-1:1},S("resize")})(n.key,e),style:b?{left:-6}:{right:-6},className:(0,ez.cn)("group/wbar absolute inset-y-0 z-10 flex w-3 cursor-ew-resize items-center justify-center",b?"-translate-x-1/2":"translate-x-1/2"),children:(0,eb.jsx)("span",{className:"h-12 w-1 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/wbar:opacity-100"})})]},n.key)}),E?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute z-40 rounded-full bg-muted-foreground/70",style:{left:E.left,top:E.top,width:E.width,height:E.height}}):null]})}),N?(0,eb.jsx)("div",{"aria-hidden":!0,className:"absolute inset-0 z-50",style:{cursor:"drag"===N?"grabbing":A.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let Qu="vtl:workspace-layout-mode",Qf="vtl:workspace-agent-side",Qh="vtl:workspace-layout-changed",Qm={mode:"pane",agentSide:"left"};function Qp(){let e=Qm.mode,t=Qm.agentSide;try{let n=window.localStorage.getItem(Qu);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(Qf);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function Qg(e){try{e.mode&&window.localStorage.setItem(Qu,e.mode),e.agentSide&&window.localStorage.setItem(Qf,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(Qh))}function Qx({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=Hj(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(pr,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,ez.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,ez.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)(hB,{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)(Hi,{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 Qv=[],Qb="vantaloom:file-system-changed",Qy=[{id:"",label:"默认"},{id:"low",label:"低"},{id:"medium",label:"中"},{id:"high",label:"高"},{id:"xhigh",label:"极高"}];function Qw(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 Qj(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 Qk(e){var t;let n=(t=e?.layoutMode,J9.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:QN(e.outer),left:QN(e.left),right:QN(e.right),top:QN(e.top),bottom:QN(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,J9.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:QC(i.title)??"Subagent",subagentId:QC(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jF(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>u0(e?.kind)):void 0,s=jF(e.kind);return{id:a,kind:e.kind,title:QC(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:QC(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:QC(r.activeSessionId),selectedMachineId:QC(r.selectedMachineId),selectedShellId:QC(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 QN(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 QS(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function QC(e){return"string"==typeof e&&e.trim()?e:void 0}function QM(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function QE(e){return e.reduce((e,t)=>Math.max(e,QM(t)),0)}function QP({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=Qk(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(Qm);return ew.useEffect(()=>{t(Qp());let e=()=>t(Qp());return window.addEventListener(Qh,e),window.addEventListener("storage",e),()=>{window.removeEventListener(Qh,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),[z,A]=ew.useState(()=>g.cardColumns),[T,R]=ew.useState(()=>g.cardHeights),[D,_]=ew.useState(()=>e?.events??[]),[L,$]=ew.useState(()=>e?.eventsStart??0),[F,B]=ew.useState(()=>e?.eventsTotal??e?.events?.length??0),[V,H]=ew.useState(!1),U=L>0,[q,W]=ew.useState(null),[K,G]=ew.useState(new Set),[X,Y]=ew.useState(void 0),[Z,J]=ew.useState(()=>Uk(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Uj(e));window.localStorage.setItem(Uj(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>US(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(!1),[ef,eh]=ew.useState(()=>new Set),[em,ep]=ew.useState(void 0),[eg,ex]=ew.useState(""),[ev,ey]=ew.useState(!1),[ej,ek]=ew.useState(void 0),[eN,eS]=ew.useState(""),[eC,eM]=ew.useState(e?.conversation.status==="working"),[eE,eP]=ew.useState(e?.conversation.status??"idle"),[eO,eA]=ew.useState(e?.conversation.awaitingTakeover??!1),[eR,eD]=ew.useState(!1),[e_,eL]=ew.useState(e?.conversation.settings?.permissionMode??"acceptEdits"),[e$,eF]=ew.useState(e?.conversation.settings?.reasoningEffort??""),[eB,eV]=ew.useState([]),[eH,eU]=ew.useState(e?.conversation.tokens??0),[eq,eW]=ew.useState(e?.conversation.runUsage),[eK,eG]=ew.useState(e?.conversation.contextTokens??0),[eX,eY]=ew.useState(!1),eZ=ew.useRef(eE),[eJ,eQ]=ew.useState(),[e0,e1]=ew.useState(),[e2,e5]=ew.useState(),e4=ew.useRef(QE(g.panes)),e3=ew.useRef(0),e6=ew.useRef(""),e8=J9.find(e=>e.id===x)?.slots??4,e7=e?.conversation.settings.folders??Qv,{models:e9}=x6(),te=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?e9.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[e9,e?.conversation.settings.mainModels]),tt=jv(e?.conversation.settings.engine),tn=ew.useMemo(()=>{if(tt){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jb(t),disabled:!0}]}return te},[tt,e?.conversation.settings.ccModel,te]),tr=!tt&&0===te.length,[ta,ti]=ew.useState(!1),to=eC||"working"===eE||ta,tl=ew.useCallback(async t=>{if(!e||eX)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(tt){if(to)return void await ct(n,"请执行 /compact 压缩上下文。",r);eM(!0),eP("working");try{let e=await sZ(n,{message:"/compact",modelRef:"",mode:"agent"},r);eP(e.conversation.status)}catch(e){eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"压缩请求失败")}return}if(to)return void await ct(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eY(!0);try{let e=await cr(n,t,void 0,r),a=await sI(n,r);a&&(_(a.events),$(a.eventsStart??0),B(a.eventsTotal??a.events.length),eU(a.conversation.tokens??0),eW(a.conversation.runUsage),eG(a.conversation.contextTokens??0));let i=Math.max(0,Math.round((e?.tokensSaved??0)/1e3));hQ.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hQ.error(e instanceof Error?e.message:"压缩失败")}finally{eY(!1)}},[e,eX,to,tt]),td=ew.useMemo(()=>{if(!e)return;let t=e9.find(e=>e.value===eN),n=t?.contextLength||200,r=eK>0?eK:e.conversation.contextTokens??0;return{used:r,total:1e3*n,toolCalls:r,userMessages:0,other:void 0,onCompressPrecise:()=>tl("precise"),onCompressExtreme:()=>tl("extreme"),compressing:eX}},[e,e9,eN,eK,tl,eX]),tu=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]),tf=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 sz(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>Qj(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]),th=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(UC(e));window.localStorage.setItem(UC(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 tu){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=tu.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,tu]),tm=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await ff(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}},[]),tp=ew.useCallback(async e=>{if(!e||!jV(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(tm));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 tm(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[tm]),tg=ew.useCallback(async()=>{var e,t;let n=await Promise.all(O.map(async e=>tp(e)));e=O,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&I(n)},[O,tp]);ew.useEffect(()=>{i?.(void 0!==eJ||void 0!==e0||void 0!==e2)},[e0,e2,i,eJ]);let tx=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(tx.current!==t){tx.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>Qw(e,n))},[e?.conversation.id,e?.events]);let tv=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sz(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>Qj(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 tb(e){if(!e.length)return;let t=e.map(jU);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function ty(e,t,n){if(!e||!jV(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 tw(e,t){return e&&jV(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 tj(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 tk(e){e4.current+=1;let t=jB(e,`${e}-${e4.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;(0,eT.fetchLocalDevServers)().then(n=>{tj(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tj(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(UC(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(Uk(e?.conversation.id)),et(US(e?.conversation.id)),er([]),ei(void 0),G(new Set)},[e?.conversation.id]),ew.useEffect(()=>{eM(e?.conversation.status==="working"),eP(e?.conversation.status??"idle")},[e?.conversation.id,e?.conversation.status]),ew.useEffect(()=>{eA(e?.conversation.awaitingTakeover??!1)},[e?.conversation.id,e?.conversation.awaitingTakeover]),ew.useEffect(()=>{eU(e?.conversation.tokens??0),eW(e?.conversation.runUsage),eG(e?.conversation.contextTokens??0)},[e?.conversation.id,e?.conversation.tokens,e?.conversation.runUsage,e?.conversation.contextTokens]),ew.useEffect(()=>{eL(e?.conversation.settings?.permissionMode??"acceptEdits")},[e?.conversation.id,e?.conversation.settings?.permissionMode]),ew.useEffect(()=>{eF(e?.conversation.settings?.reasoningEffort??"")},[e?.conversation.id,e?.conversation.settings?.reasoningEffort]),ew.useEffect(()=>{let e=te[0]?.id??"";eS(t=>te.some(e=>e.id===t)?t:e)},[te]),ew.useEffect(()=>{let t=Qk(e?.panes);v(t.layoutMode),y(t.agentPosition),P(t.layoutSizes),I(t.panes),A(t.cardColumns),R(t.cardHeights),e4.current=QE(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=>Qw(t,e.events)),eP(e.conversation.status),eU(e.conversation.tokens??0),eW(e.conversation.runUsage),eG(e.conversation.contextTokens??0),eA(e.conversation.awaitingTakeover??!1)},o=e=>{void 0===t&&(t=window.setInterval(async()=>{try{let e=await sI(n,r);if(a)return;i(e),eM("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=ca(JSON.parse(e.data));i(t),eM("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(()=>{tg()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,tg]),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!==e6.current&&(e6.current=e,window.dispatchEvent(new CustomEvent(Qb)),tg())},[D,tg]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:z,heights:T},r=[],O.forEach((e,t)=>{if(e){if(jV(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,z,T,e?.conversation.id,x,E,O]);let tN=ew.useCallback(e=>{I(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jV(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}e4.current+=1;let r=jB("browser-tab-viewer",`browser-tab-viewer-${e4.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]),tS=ew.useRef(!1);function tC(e){I(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;e4.current+=1;let n=jB(e,`${e}-${e4.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;tS.current=!1;let r=!1,a=async()=>{if(!r&&!tS.current)try{let e=(await (0,eT.fetchLocalDevServers)())[0];if(r||tS.current||!e)return;tS.current=!0,tN(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,tN]);let tM=ew.useCallback((e,t)=>{I(n=>{if(n.some(n=>void 0!==n&&jV(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jB("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]),tE=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;tE.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fk();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||tE.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(tE.current.add(t.id),tM(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,tM]);let tP=ew.useCallback(()=>{tC("plan-doc-viewer")},[j]),tO=ew.useCallback(()=>{tC("spec-doc-viewer")},[j]),tI=ew.useCallback(()=>{tC("tasks-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 tz=q??e?.conversation.planState??null,tA=ew.useRef(void 0);ew.useEffect(()=>{let e=tz?.approvals?.find(e=>!e.decision);e&&tA.current!==e.id&&(tA.current=e.id,tP())},[tz,tP]);let tT=ew.useRef(void 0);function tR(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);e4.current+=1;let a={id:`${e}-${e4.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 tD(e,t,n){try{let r=await fd(e);if(j)return void tR("file-tab-viewer",r);I(e=>e.map((e,a)=>a===t?ty(e,r,n):e))}catch{hQ.error("文件预览打开失败")}}function t_(e){if(j)return void tD(e,-1);let t=O.slice(0,e8).findIndex(e=>e?.kind==="multi-tab-system");t<0?hQ.warning("请先放入一个多标签页组件"):tD(e,t)}function tL(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 tR("diff-tab-viewer",n);let r=O.slice(0,e8).findIndex(e=>e?.kind==="multi-tab-system");r<0?hQ.warning("请先放入一个多标签页组件"):I(e=>e.map((e,t)=>t===r?ty(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||t_({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let t=e?.conversation.id;!t||tT.current===t||D.some(e=>"task"===e.kind)&&(tT.current=t,tI())},[e?.conversation.id,D,tI]);let t$=e?.conversation.ownerMachineId??"local",tF=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 u8(t$,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void t_({machineId:t$,path:t});let a=(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(t$)}/files/raw?path=${encodeURIComponent(t)}`);await m6({url:a,label:r}),hQ.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hQ.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===t$?(0,eT.localAPIURL)(`/v1/files/raw?${n}`):(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(t$)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===t$?"local-file":"remote-file",onOpen:e=>void t(e)}},[t$]);async function tB(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hQ.error("文件路径不可用"),Error("file path is unavailable");try{let i=await u7({machineId:a,path:r,content:n}),o={...await fu(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};I(t=>t.map((t,n)=>n===e?tw(t,o):t)),window.dispatchEvent(new CustomEvent(Qb)),hQ.success("文件已保存")}catch(e){throw hQ.error("文件保存失败"),e}}async function tV(t){let n=e?.conversation.id,r=e2?.tab.file?.path,a=e2?.tab.file?.machineId??"local";if(e2&&n&&r)try{let i=await s3(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await fu(i,{id:e2.tab.id,title:`${i.name} @ ${QI(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:e2.tab.defaultView,defaultMode:"review"});I(e=>e.map((e,t)=>t===e2.paneIndex?tw(e,o):e)),e5(void 0)}catch{hQ.error("历史版本打开失败")}}function tH(e,t,n){let i=O[e];e4.current=Math.max(e4.current,QM(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=jU(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tU(e,t){I(n=>n.map((n,r)=>r===e?t:n))}function tq(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tW(e){var t=O[e];if(t&&jV(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])fS(e).catch(()=>{});I(t=>t.map((t,n)=>n===e?void 0:t))}function tK(e){let t=O[e];t&&tb([t]),I(t=>t.map((t,n)=>n===e?void 0:t))}async function tG(t,n="chat",r=[]){let a=e?.conversation.id,i=tt?"":eN||te[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return US(e);let r=n.slice(0,1e5),a=US(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(UN(e),JSON.stringify(i))}catch{}return i}(a,t)),eC||"working"===eE))return;if(!tt&&!i)return void hQ.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??"")!=="");eM(!0),eP("working");try{let r=await sZ(a,{message:t,modelRef:i,mode:n,effort:e$||void 0,attachments:o.length>0?o:void 0},e?.conversation.ownerMachineId);eP(r.conversation.status)}catch(e){eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"对话请求失败")}}async function tX(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=tt?"":r||eN||te[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!tt&&!a)return void hQ.error("请先在代理模型配置里选择模型");eM(!0),eP("working"),_(e=>e.map(e=>e.id===t.id?{...e,status:"retried"}:e));try{let r=await sJ(n,{modelRef:a,mode:i,effort:e$||void 0,retryEventId:t.id},e?.conversation.ownerMachineId);eP(r.conversation.status)}catch(e){_(e=>e.map(e=>e.id===t.id?t:e)),eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"对话重试失败")}}}function tY(e){to?hQ.error("对话正在运行,请先停止后再回退"):ei(e)}async function tZ(){let t=e?.conversation.id;if(t&&!eR){eD(!0);try{let n=await s9(t,e?.conversation.ownerMachineId);eA(n.conversation.awaitingTakeover??!1)}catch(e){hQ.error(e instanceof Error?e.message:"接管失败")}finally{eD(!1)}}}async function tJ(){let t=e?.conversation.id;if(!ea||!t)return void ei(void 0);el(!0);try{let n=await sQ(t,ea.id,e?.conversation.ownerMachineId);_(n.detail.events),$(0),B(n.detail.events.length),eP(n.detail.conversation.status),eM(!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} 个子代理`),hQ.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hQ.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hQ.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tQ(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await s5(n,t.id,e?.conversation.ownerMachineId);o?.(r),hQ.success("已创建分支对话")}catch(e){hQ.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}function t0(e){_(e.events),$(0),B(e.events.length),eP(e.conversation.status)}function t1(){to?hQ.error("对话正在运行,请先停止后再编辑上下文"):eu(!0)}function t2(){eu(!1),eh(new Set),ep(void 0),ex("")}function t5(e){eh(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function t4(e,t){let n=D.findIndex(t=>t.id===e),r=D.findIndex(e=>e.id===t);if(n<0||r<0)return;let a=Math.min(n,r),i=Math.max(n,r);eh(e=>{let t=new Set(e);for(let e=a;e<=i;e++){let n=D[e];n&&"user"!==n.kind&&t.add(n.id)}return t})}function t3(e){to?hQ.error("对话正在运行,请先停止后再删除"):0!==e.length&&ek(e)}async function t6(){let t=e?.conversation.id;if(!ej||0===ej.length||!t)return void ek(void 0);ey(!0);try{let n=await s0(t,ej,e?.conversation.ownerMachineId);t0(n.detail),eh(new Set),hQ.success(`已从上下文删除 ${n.deletedEvents||ej.length} 条`)}catch(e){hQ.error(e instanceof Error?e.message:"删除失败")}finally{ey(!1),ek(void 0)}}function t8(e,t){ep(e),ex(t)}async function t7(){let t=e?.conversation.id;if(!em||!t)return void ep(void 0);ey(!0);try{let n=await s1(t,em,eg,e?.conversation.ownerMachineId);t0(n.detail),ep(void 0),ex(""),hQ.success("已更新消息")}catch(e){hQ.error(e instanceof Error?e.message:"保存失败")}finally{ey(!1)}}function t9(){ep(void 0),ex("")}async function ne(t,n){let r=e?.conversation.id;if(r){ey(!0);try{let a=await s2(r,[t],n,e?.conversation.ownerMachineId);t0(a.detail)}catch(e){hQ.error(e instanceof Error?e.message:n?"还原失败":"翻译失败")}finally{ey(!1)}}}let nt=ew.useMemo(()=>{if(!tt)return{mode:ed,selectedIds:ef,onToggleSelect:t5,onRangeSelect:t4,onEnterMode:t1,onExitMode:t2,onDeleteOne:e=>t3([e]),editingId:em,editDraft:eg,onStartEdit:t8,onEditDraftChange:ex,onSaveEdit:()=>void t7(),onCancelEdit:t9,onTranslate:e=>void ne(e,!1),onRestore:e=>void ne(e,!0)}},[tt,ed,ef,em,eg]),nn=e&&eO?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex flex-wrap items-center gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"min-w-0 flex-1 text-muted-foreground",children:"这个对话由任务分发代理管理,已锁定输入"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",className:"w-full sm:w-auto",disabled:eR,onClick:()=>void tZ(),children:"接管"})]}):null,nr=nt&&em?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex items-center justify-end gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"mr-auto text-muted-foreground",children:"编辑消息"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",disabled:ev,onClick:t9,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",disabled:ev,onClick:()=>void t7(),children:"保存"})]}):nt&&ed?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex items-center justify-end gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"mr-auto text-muted-foreground",children:"编辑上下文"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:"destructive",disabled:ev||0===ef.size,onClick:()=>t3([...ef]),children:["删除选中 (",ef.size,")"]}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",onClick:t2,children:"退出编辑"})]}):void 0;async function na(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){hQ.error(e instanceof Error?e.message:"设置更新失败")}}async function ni(t,n){let r=e?.conversation.id;if(r)try{await s6(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hQ.error(e instanceof Error?e.message:"审批操作失败")}}async function no(t){let n=e?.conversation.id;return n?s8(n,t,e?.conversation.ownerMachineId):{state:"error",explanation:""}}async function nl(){let t=e?.conversation.id;if(t){ti(!0);try{await s7(t,e?.conversation.ownerMachineId)}catch{}}}function ns(){tG("继续","agent")}async function nc(t){let n=e?.conversation.id;if(!n)return;let r=eB.find(e=>e.id===t);if(!r)return;let a="string"==typeof r.content?r.content:String(r.content??"");if(a.trim()){eV(e=>e.filter(e=>e.id!==t));try{await ct(n,a.trim(),e?.conversation.ownerMachineId)}catch{}}}ew.useEffect(()=>{"idle"===eE&&ta&&ti(!1)},[eE,ta]),ew.useEffect(()=>{let e=eZ.current;if(eZ.current=eE,"working"===e&&"idle"===eE&&eB.length>0){let e=eB[0];if(e){eV(eB.slice(1));let t="string"==typeof e.content?e.content:String(e.content??"");t.trim()&&tG(t.trim(),"agent")}}},[eE]);let nd=Array.from({length:e8},(r,a)=>(0,eb.jsx)(Qa,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:O[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eQ(a),onPanelDrop:tH,onContentChange:tU,onClear:tW,onCut:tK,workspaceFolders:e7,onRequestFileTab:(e,t)=>e1({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:t_,onSaveFileTab:tB,onOpenFileHistory:(e,t)=>e5({paneIndex:e,tab:t})},a)),nu=O.slice(0,e8).some(e=>e?.kind==="subagent-conversation-panel"),nf=E.shell?.agent??42,nh=E.shell?.panes??58,nm=w.agentSide,np="control-room"===w.mode||k,ng=(0,eb.jsxs)(m1,{type:"single",value:np?"hidden":nm,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),Qg({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),Qg({mode:"control-room"}))},children:[(0,eb.jsx)(m2,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cl,{})}),(0,eb.jsx)(m2,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cu,{})}),(0,eb.jsx)(m2,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cc,{})})]}),nx=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HG,{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)(HX,{rounds:tu,onJumpToRound:tf,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HW,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?tv:void 0,models:e?tn:void 0,modelId:tt?tn[0]?.id:eN,permissionModeId:e_,onPermissionModeChange:t=>{eL(t),e?.conversation.id&&na({permissionMode:t})},running:to,disabled:!!e&&(tr||eO),onModelChange:eS,effortOptions:e?Qy:void 0,selectedEffort:e$,onEffortChange:t=>{eF(t),e?.conversation.id&&na({reasoningEffort:t})},onSubmit:e?e=>{tG(e.value,"agent",e.attachments??[])}:void 0,onStop:nl,onOpenFile:tL,deliverable:tF,onOpenSubagent:function(e){e.id&&c?.([tq(e)])},onOpenPlan:tP,onOpenSpec:()=>tO(),onOpenTasks:tI,planPromptBar:nn||(e?(0,eb.jsx)(Ux,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tz,modelRef:eN||te[0]?.id||"",onOpenPlan:tP,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0),onRetry:tX,onApprovalDecision:ni,onFetchExplanation:no,onContinue:ns,onRecallUserMessage:tY,onBranchAssistantMessage:tQ,contextEdit:nt,contextEditBar:nn?void 0:nr,onActiveEventChange:th,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:eB,onQueuedMessagesChange:eV,onNudge:nc,contextUsage:td})}),s.length>0&&e?(0,eb.jsx)(Qx,{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,tq(e)])}}):null]}),nv=(0,eb.jsx)(h_,{id:"agent",defaultSize:nf,minSize:28,children:nx},"agent-conversation"),nb=(0,eb.jsx)(h_,{id:"panes",defaultSize:nh,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":nu?"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)(mN,{value:x,onValueChange:e=>{let t,n;return t=J9.find(t=>t.id===e)?.slots??4,void((n=O.slice(t).filter(e=>!!e)).length&&tb(n),I(Array.from({length:Math.max(4,t)},(e,n)=>n<t?O[n]:void 0)),v(e))},children:(0,eb.jsx)(mA,{children:J9.map(e=>(0,eb.jsx)(mT,{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))})}),ng,(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(J8,"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(J6,"clear")},children:(0,eb.jsx)(cf,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(Qr,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=QS(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:nd},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),ny=(0,eb.jsx)(Qd,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:O,agentSide:nm,columns:z,heights:T,onColumnsChange:A,onHeightsChange:R,onAddCard:tk,onContentChange:tU,onClear:tW,workspaceFolders:e7,onOpenWorkspaceFile:t_,onSaveFileTab:tB,onOpenFileHistory:(e,t)=>e5({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>e1({paneIndex:e,insertIndex:t})}),nw=(0,eb.jsx)("div",{className:(0,ez.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===nm?"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"===nm?S?(0,eb.jsx)(cd,{}):(0,eb.jsx)(cs,{}):S?(0,eb.jsx)(tc,{}):(0,eb.jsx)(ts,{})})}),nj=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qi,{open:void 0!==eJ,onOpenChange:e=>{e||eQ(void 0)},onAdd:function(e){if(void 0===eJ)return;e4.current+=1;let t=jB(e,`${e}-${e4.current}`),n=O[eJ];n&&tb([n]),I(e=>e.map((e,n)=>n===eJ?t:e)),eQ(void 0)}}),(0,eb.jsx)(Um,{open:void 0!==e0,folders:e7,onOpenChange:e=>{e||e1(void 0)},onSelectFile:e=>{e0&&tD(e,e0.paneIndex,e0.insertIndex),e1(void 0)}}),(0,eb.jsx)(QO,{open:void 0!==e2,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:e2?.tab,onOpenChange:e=>{e||e5(void 0)},onSelectVersion:e=>{tV(e)}}),(0,eb.jsx)(ua,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"回退对话到此处?"}),(0,eb.jsx)(uC,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{disabled:eo,children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tJ()},children:eo?"回退中…":"确认回退"})]})]})}),(0,eb.jsx)(ua,{open:void 0!==ej,onOpenChange:e=>{e||ev||ek(void 0)},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"从上下文中删除?"}),(0,eb.jsx)(uC,{children:`确认从上下文中删除选中的 ${ej?.length??0} 条?此操作会同时从智能体的实际上下文中移除(不影响磁盘文件)。`})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{disabled:ev,children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",disabled:ev,onClick:e=>{e.preventDefault(),t6()},children:ev?"删除中…":"确认删除"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(j_,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HW,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?tv:void 0,models:e?tn:void 0,modelId:tt?tn[0]?.id:eN,permissionModeId:e_,onPermissionModeChange:t=>{eL(t),e?.conversation.id&&na({permissionMode:t})},running:to,disabled:!!e&&(tr||eO),onModelChange:eS,effortOptions:e?Qy:void 0,selectedEffort:e$,onEffortChange:t=>{eF(t),e?.conversation.id&&na({reasoningEffort:t})},onSubmit:e?e=>{tG(e.value,"agent",e.attachments??[])}:void 0,onStop:nl,onOpenFile:tL,deliverable:tF,onOpenSubagent:function(e){var t;let n=O.slice(0,e8),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hQ.warning("请释放一个窗口再选中浏览");e3.current+=1;let o={id:t=`subagent-${e.id}-${e3.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:tX,onApprovalDecision:ni,onFetchExplanation:no,onContinue:ns,onRecallUserMessage:tY,onBranchAssistantMessage:tQ,contextEdit:nt,planPromptBar:nn??void 0,contextEditBar:nn?void 0:nr,onActiveEventChange:th,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:eB,onQueuedMessagesChange:eV,onNudge:nc,contextUsage:td}),paneElements:nd,panes:O,activeSlotCount:e8,onOpenPalette:eQ,timeline:(0,eb.jsx)(HX,{rounds:tu,onJumpToRound:tf,activeRunId:X})}),nj,(0,eb.jsx)(h3,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[np?(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)(hD,{direction:"horizontal",children:nb})}),(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)(hD,{direction:"horizontal",children:nv}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:ng})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Uw,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:to,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:nx}),(0,eb.jsx)("div",{className:(0,ez.cn)("absolute top-2 z-20 flex items-center gap-2","left"===nm?"right-3":"left-3"),children:(0,eb.jsx)(Qc,{onAddCard:tk,align:"left"===nm?"end":"start"})})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===nm?(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:nx}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:ny})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:ny}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:nx})]})}):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)(hD,{direction:"horizontal",children:nb})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:nx}),nw]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:{agent:nf,panes:nh},onLayoutChanged:e=>{let t=e.agent??nf,n=e.panes??nh;!function(e){let t=QS(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"===nm?[t,n]:[n,t])},children:["left"===nm?nv:nb,(0,eb.jsx)(hL,{withHandle:!0}),"left"===nm?nb:nv]},`${e?.conversation.id??"empty"}-${nm}`),nw]}),nj,(0,eb.jsx)(h3,{position:"top-right"})]}):(0,eb.jsx)(jz,{onCreated:e=>o?.(e),onCancel:l})}function QO({open:e,conversationId:t,ownerMachineId:n,tab:r,onOpenChange:a,onSelectVersion:i}){let[o,l]=ew.useState([]),[s,c]=ew.useState(!1),d=r?.file?.path,u=r?.file?.machineId??"local";return ew.useEffect(()=>{if(!e||!t||!d)return void l([]);let r=!1;return c(!0),s4(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)(dD,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fI,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fT,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fR,{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:[QI(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 QI(e){return e.replace(/^mut-/,"").slice(0,16)}var Qz=["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}},{}),QA=ew.forwardRef((e,t)=>(0,eb.jsx)(Qz.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function QT({className:e,...t}){return(0,eb.jsx)(QA,{"data-slot":"label",className:(0,ez.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 QR({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,ez.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 QD(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 Q_(e){return(await QK(`/api/local/skills${QD(e)}`)).skills??[]}async function QL(e,t){return QK(`/api/local/skills/${encodeURIComponent(e)}${QD(t)}`)}async function Q$(e){await QK(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function QF(e,t){return QK("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function QB(e,t){return QK("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function QV(){return(await QK("/api/local/skills/sources")).sources??[]}async function QH(e){let t=new URLSearchParams;e?.scope&&t.set("scope",e.scope),e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return(await QK(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function QU(e,t,n){return QK(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${QD(n)}`)}async function Qq(e){return QK("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function QW(e,t,n){await QK(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${QD(n)}`,{method:"DELETE"})}async function QK(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}QA.displayName="Label";let QG={global:"全局",project:"项目",conversation:"对话"},QX=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QY({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 QH(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 QU(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 Qq({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 QW(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,ez.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)(bv,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mN,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(mA,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mT,{value:e,className:"flex-1",children:QG[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mR,{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"}),"新增",QG[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:["暂无",QG[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)(Bk,{variant:"secondary",className:"shrink-0",children:(t=e.type,QX.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)(bb,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dD,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fI,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fz,{children:(0,eb.jsxs)(fT,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QG[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)(QT,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(eA,{value:h.name,disabled:h.editing,onChange:e=>m({...h,name:e.currentTarget.value}),placeholder:"例如 api-error-handling"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"描述"}),(0,eb.jsx)(eA,{value:h.description,onChange:e=>m({...h,description:e.currentTarget.value}),placeholder:"一行用于相关性匹配的描述"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gG,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:QX.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"正文"}),(0,eb.jsx)(wc,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fA,{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)(Gw,{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"}]]),QJ=(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 QQ({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([Q_(w),QV()]);a(e),o(t)}catch(e){d(e instanceof Error?e.message:"读取技能失败")}finally{s(!1)}},[w]);async function k(e){g(!0);try{let t=await QL(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 Q$(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 QF(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 QB(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,ez.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)(gG,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xM,{className:"h-9 w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择源"})}),(0,eb.jsx)(xO,{children:0===i.length?(0,eb.jsx)(xI,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xI,{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)(bv,{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)(Bk,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bk,{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)(uD,{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)(QJ,{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)(bb,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dD,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fI,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fz,{children:[(0,eb.jsx)(fT,{children:h?.name}),(0,eb.jsx)(fR,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(wK,{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 Q0({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)(QT,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(bt,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gG,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xI,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xI,{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)(QQ,{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)(QY,{conversationId:e,scopes:["project","conversation"]})]})]})}let Q1=(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 Q2({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,ez.cn)(Q1({variant:t}),e),...n})}function Q5({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,ez.cn)("mb-1 leading-none font-medium",e),...t})}function Q4({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,ez.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function Q3({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 jy(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 jw(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(Gw,{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)(wc,{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 Q6=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function Q8({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=jv(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)(fP.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:Q6.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,ez.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)(gG,{value:""===n?jg:n,onValueChange:e=>i?.(e===jg?"":e),children:[(0,eb.jsx)(xM,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(x8,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(jl,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(js,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(jc,{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)(Q3,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(Q0,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(jp,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function Q7({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)(Q8,{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 Q9=[{value:"reclaude",label:"reclaude(RC)"},{value:"claude-code",label:"Claude Code(CC)"}];function eee({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)(dD,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fI,{className:"flex max-h-[85vh] max-w-xl flex-col gap-4",children:[(0,eb.jsxs)(fz,{children:[(0,eb.jsx)(fT,{children:"导入 Claude 会话"}),(0,eb.jsx)(fR,{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,ez.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)(bf,{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)(gG,{value:d,onValueChange:e=>u(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xO,{children:Q9.map(e=>(0,eb.jsx)(xI,{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)(gG,{value:""===f?jg:f,onValueChange:e=>h(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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 eet(e){return!e||"local"===e}async function een(e,t){return eeo(await eel(t,`/${encodeURIComponent(e)}`),t)}async function eer(e,t){return eeo(await eel(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(u5),edges:e.edges.map(u4)})}),t)}async function eea(e,t,n){return eeo(await eel(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(u5),edges:t.edges.map(u4),nodeIds:t.nodeIds})}),n)}async function eei(e,t){return eeo(await eel(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function eeo(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=eet(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 eel(e,t,n,r){let a=await fetch((0,eT.localAPIURL)(eet(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 ees=(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"}]]),eec=(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"}]]),eed=(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"}]]),eeu=(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"}]]),eef=(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"}]]),eeh=(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"}]]),eem={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function eep(e,t,n){return Math.min(Math.max(e,t),n)}function eeg({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...eem,...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=eep(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=eep((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=eep(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,ez.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,ez.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,ez.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,ez.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,ez.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,ez.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 eex="/themes/jelly/bg1.png",eev="/themes/jelly/bg2.png",eeb="/themes/jelly/bg3.png",eey="/themes/jelly/bg4.png";function eew({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 eej({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let eek={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:"主题"},eeN={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:"用量与账单"};eek.local,eek.direct,eek.online,eek.p2p,eek.online,eek.direct,eek.sleeping,eek.cpu,eek.memory,eek.activeRuns;function eeS(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function eeC({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)(wK,{className:"min-h-0 flex-1",children:e})})}function eeM(e){return Math.max(0,...e.map(e=>e.y+e.h))}function eeE(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 eeP(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 eeO(e,t,n,r,a){for(let i=0;i<eeM(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(!eeE(l,e))return l}return{id:t,kind:n,x:0,y:eeM(e)+2,w:r,h:a}}function eeI(e){return{...e.defaultConfig}}function eez(e){return e.payloads?.[Xx]}function eeA({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vO,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vz,{className:"max-h-[420px]",children:[(0,eb.jsx)(vA,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vT,{heading:a,children:t.map(e=>(0,eb.jsxs)(vR,{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)(vD,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function eeT({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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eeR=(0,ek.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function eeD({layout:e,layouts:t,cellSize:n,cellHeight:r,dragMode:a,selected:i,resizing:o,onSelect:l,onMove:s,onCut:c,onCopy:d,onSettingsOpen:u,onResizeStart:f,onResizeEnd:h,children:m}){let[p,g]=ew.useState(!1),x=r??n,v=e.x*(n+12),b=e.y*(x+12),y=e.w*n+(e.w-1)*12,w=e.h*x+(e.h-1)*12;return(0,eb.jsxs)("div",{"data-editable-card":e.id,className:(0,ez.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=eeP({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});eeE(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,ez.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)(ee_,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eeL,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function ee_({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)(eeR,{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 eeL({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,ez.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),eeE(d=eeP(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 ee$({className:e,...t}){return(0,eb.jsx)(dU,{"data-slot":"sheet-overlay",className:(0,ez.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 eeF({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dV,{children:[(0,eb.jsx)(ee$,{}),(0,eb.jsxs)(dG,{"data-slot":"sheet-content","data-side":n,className:(0,ez.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)(d5,{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)(fP.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eeB({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,ez.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeV({className:e,...t}){return(0,eb.jsx)(dQ,{"data-slot":"sheet-title",className:(0,ez.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eeH({className:e,...t}){return(0,eb.jsx)(d1,{"data-slot":"sheet-description",className:(0,ez.cn)("text-sm text-muted-foreground",e),...t})}function eeU({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)(dD,{open:e,onOpenChange:i,children:(0,eb.jsx)(eeF,{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)(eeq,{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)(eeB,{className:"border-b",children:[(0,eb.jsx)(eeV,{children:"卡片设置"}),(0,eb.jsxs)(eeH,{children:[n.title," · ",t.w,"x",t.h]})]}),(0,eb.jsxs)("div",{className:"grid flex-1 content-start gap-4 overflow-y-auto p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"显示标题"}),(0,eb.jsx)(eA,{value:r.title,onChange:e=>o({title:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"数据来源"}),(0,eb.jsx)(eA,{value:r.dataSource,onChange:e=>o({dataSource:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"刷新间隔"}),(0,eb.jsx)(eA,{value:r.refreshRate,onChange:e=>o({refreshRate:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"备注"}),(0,eb.jsx)("textarea",{value:r.note,rows:4,className:"min-h-24 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 ui-text-control transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",onChange:e=>o({note:e.currentTarget.value})})]}),(0,eb.jsxs)("div",{className:"rounded-lg border bg-muted/20 p-3",children:[(0,eb.jsx)("div",{className:"ui-text-control font-medium",children:"当前绑定"}),(0,eb.jsxs)("div",{className:"mt-2 grid gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["类型:",n.id]}),(0,eb.jsxs)("span",{children:["来源:",r.dataSource]}),(0,eb.jsxs)("span",{children:["刷新:",r.refreshRate]})]})]})]})]})]}):null})})}function eeq({width:e,height:t,className:n,children:r}){let[a,i]=Yn(),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,ez.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 eeW({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]=Yn(),I=O.width>0?(d=O.width)<480?2:d<768?4:12:12,z=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<eeS(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:eeS(r),w:n,h:a})}return r}(x,I),A=O.width>0?(O.width-12*(I-1))/I:96,T=I<12?72:A,R=Math.max(a,eeM(z)+2),D=R*T+(R-1)*12,_=ew.useMemo(()=>new Map(t.map(e=>[e.id,e])),[t]);function L(e){let t=_.get(e.kind);return b[e.id]??(t?eeI(t):void 0)}function $(e){v(t=>{let n=eeP(e);return eeE(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=eeO(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eeI(t)})),j(n),N(void 0),m(!1)}function B(e,t){let n=x.find(t=>t.id===e),r=n?_.get(n.kind):void 0;n&&r&&y(n=>({...n,[e]:{...n[e]??eeI(r),...t}}))}ew.useEffect(()=>{c?.(h||!!S)},[h,c,S]),ew.useEffect(()=>()=>c?.(!1),[c]),ew.useEffect(()=>{p||(j(void 0),N(void 0))},[p]),ew.useEffect(()=>{if(k)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof HTMLElement&&t.closest("[data-editable-card-action]")||(j(k),N(void 0))}},[k]);let V=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=[...z].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)(eeC,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,ez.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,ez.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)(eeT,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eeA,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeU,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(eeC,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,ez.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(Xx)&&(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&&eez(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=eez(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eeP({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eeM(x),w:n.w,h:n.h}),i=t&&!eeE(a,x)?a:eeO(x,r,n.kind,n.w,n.h);v(e=>[...e,i]),y(e=>({...e,[r]:{...n.config}})),j(r),N(void 0)}(n,{x:o&&A>0?Math.round((e.clientX-o.left-24)/(A+12)):0,y:o&&A>0?Math.round((e.clientY-o.top-24)/(A+12)):eeM(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:z.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eeD,{layout:t,layouts:z,cellSize:A,cellHeight:T,dragMode:p,selected:w===t.id,resizing:k===t.id,onSelect:()=>{p&&j(t.id)},onMove:$,onCut:()=>(function(t){let n=x.find(e=>e.id===t),r=n?_.get(n.kind):void 0,a=n?L(n):void 0;if(!n||!r||!a)return;let i=function({boardId:e,layout:t,definition:n,config:r}){let a={boardId:e,kind:t.kind,w:t.w,h:t.h,config:{...r}};return{id:`clip-${e}-${t.id}`,title:r.title||n.title,description:n.description,meta:`${t.w}x${t.h}`,icon:n.icon,dragData:{"application/vnd.vantaloom.clip-kind":"workspace-card","application/vnd.vantaloom.workspace-card-board":e,"application/vnd.vantaloom.workspace-card-kind":t.kind,"application/vnd.vantaloom.workspace-card-width":String(t.w),"application/vnd.vantaloom.workspace-card-height":String(t.h),"application/vnd.vantaloom.workspace-card-config":JSON.stringify(r),[Xx]:JSON.stringify(a)},payloads:{[Xx]: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=eeO(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eeI(n)})),j(r)})(t.id),onSettingsOpen:()=>C(t.id),onResizeStart:()=>{j(void 0),N(t.id)},onResizeEnd:()=>{j(t.id),N(void 0)},children:n.render(r)},t.id):null})})}),(0,eb.jsx)(eeT,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eeA,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeU,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eeK({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 eeG({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,ez.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)(eeK,{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)(eeK,{parts:c})})]})}function eeX(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeY({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)(eeG,{value:eeX(t),minSize:n,maxSize:r,className:a})]})}function eeZ(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeJ({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,ez.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 eeQ({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,ez.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 ee0=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function ee1({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)(ee2,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(eeg,{items:a,scrollCurrentIntoView:!1,className:(0,ez.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,ez.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function ee2({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,ez.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)(eeJ,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,ez.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(ee5,{icon:(0,eb.jsx)(VR,{}),value:`${e.snapshots}`}),(0,eb.jsx)(ee5,{icon:(0,eb.jsx)(ee0,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function ee5({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 ee4=(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"}]]),ee3=(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"}]]),ee6=(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 ee8=ew;function ee7(){return(ee7=Object.assign.bind()).apply(null,arguments)}function ee9(e){return ew.createElement(RN,ee7({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var ete=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kO(e))return e;var a=kO(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)}},ett=["children"],etn=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function etr(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,ett);return ew.createElement(etn.Provider,{value:n},t)}var eta=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kT(r,t,0)};function eti(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eto(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eti(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eti(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var etl=kl([O7,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),ets=kl([etl],e=>null==e?void 0:e.maxBarSize),etc=kl([CR,O7,YU,Yq,(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)),etd=kl([etc,e=>e.rootProps.barSize,(e,t)=>{var n=CR(e),r=YU(e,t),a=Yq(e,t);if(null!=r&&null!=a)return"horizontal"===n?zy(e,"xAxis",r):zy(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Mj),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:eta(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eta(t,n,e.barSize)}))]}),etu=(e,t,n)=>{var r,a,i=CR(e),o=YU(e,t),l=Yq(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=zC(e,"xAxis",o,n),a=zS(e,"xAxis",o,n)):(r=zC(e,"yAxis",l,n),a=zS(e,"yAxis",l,n)),k2(r,a)},etf=kl([etd,CZ,e=>e.rootProps.barGap,CJ,(e,t,n)=>{var r,a,i,o,l=etl(e,t);if(null==l)return 0;var s=YU(e,t),c=Yq(e,t);if(null==s||null==c)return 0;var d=CR(e),u=CZ(e),{maxBarSize:f}=l;return"horizontal"===d?(i=zC(e,"xAxis",s,n),o=zS(e,"xAxis",s,n)):(i=zC(e,"yAxis",c,n),o=zS(e,"yAxis",c,n)),null!=(r=null!=(a=k2(i,o,!0))?a:null==f?u:f)?r:0},etu,ets],(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=kT(e,n,0,!0),c=[];if(kV(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=kT(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=kV(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=>eto(eto({},e),{},{position:eto(eto({},e.position),{},{offset:e.position.offset-a/2})}))),l}),eth=kl([etf,etl],(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}}),etm=kl([(e,t,n)=>{var r=CR(e),a=YU(e,t),i=Yq(e,t);if(null!=a&&null!=i)return"horizontal"===r?Ik(e,"yAxis",i,n):Ik(e,"xAxis",a,n)},etl],(e,t)=>{var n=My(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)}}}),etp=kl([Ni,Nl,(e,t,n)=>{var r=YU(e,t);if(null!=r)return zC(e,"xAxis",r,n)},(e,t,n)=>{var r=Yq(e,t);if(null!=r)return zC(e,"yAxis",r,n)},(e,t,n)=>{var r=YU(e,t);if(null!=r)return zS(e,"xAxis",r,n)},(e,t,n)=>{var r=Yq(e,t);if(null!=r)return zS(e,"yAxis",r,n)},eth,CR,kf,etu,etm,etl,(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||!kO(t[0])||!kO(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(!kO(e[0])||e[0]<n)&&(a[0]=n),(!kO(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=kW(e,n))||(j=[b,j]);var w=ete(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=kQ({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=kE(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 z=kM(C||w)*(Math.abs(w)-Math.abs(C));N-=z,C+=z}}else{var A=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==A||null==T)return null;if(k=A,N=kQ({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-A,C=i.size,M={x:h.left,y:N,width:h.width,height:C},Math.abs(w)>0&&Math.abs(S)<Math.abs(w)){var R=kM(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?etz(etz({},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})}}),etg=(e,t)=>t,etx=(e,t,n)=>n,etv=kl([etg,O7,etx],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),etb=kl([etv],e=>e.map(e=>e.id)),ety=kl([e=>e,etg,etx],(e,t,n)=>{var r=etb(e,t,n),a=[];return r.forEach(t=>{var r=etp(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}),etw=["index"];function etj(){return(etj=Object.assign.bind()).apply(null,arguments)}var etk=(0,ew.createContext)(void 0),etN=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),etS=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,etw),r=(e=>{var t=(0,ew.useContext)(etk);if(null!=t){var{stackId:n}=t;return"url(#".concat(etN(n,e),")")}})(t);return ew.createElement(z6,etj({className:"recharts-bar-stack-layer",clipPath:r},n))},etC=["onMouseEnter","onMouseLeave","onClick"],etM=["value","background","tooltipPosition"],etE=["id"],etP=["onMouseEnter","onClick","onMouseLeave"];function etO(){return(etO=Object.assign.bind()).apply(null,arguments)}function etI(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function etz(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etI(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):etI(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etA(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 etT=ee8.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:kF,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:k4(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return ee8.createElement(Db,{tooltipEntrySettings:d})});function etR(e){var t,n=Np(_h),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etA(o,etC),u=Dg(l,a,o.id),f=Dx(s),h=Dv(c,a,o.id);if(!i||null==r)return null;var m=z2(i);return ee8.createElement(_5,{zIndex:(t=Me.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kV(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etA(e,etM);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=etz(etz(etz(etz(etz({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),AM(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return ee8.createElement(ee9,etO({key:"background-bar-".concat(t)},x))}))}function etD(e){var{showLabels:t,children:n,rects:r}=e,a=null==r?void 0:r.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return etz(etz({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return ee8.createElement(Lx,{value:t?a:void 0},n)}function et_(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=Np(_h),c=Np(_p),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,ee8.useState)(!1),[h,m]=(0,ee8.useState)(!1);(0,ee8.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,ee8.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=ee8.createElement(ee9,etO({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?ee8.createElement(_5,{zIndex:Me.activeBar},ee8.createElement(etS,{index:i.originalDataIndex},v)):v}function etL(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return ee8.createElement(ee9,etO({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function et$(e){var t,{data:n,props:r}=e,a=null!=(t=z1(r))?t:{},{id:i}=a,o=etA(a,etE),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etA(r,etP),m=Dg(d,s,i),p=Dx(f),g=Dv(u,s,i);return n?ee8.createElement(ee8.Fragment,null,n.map((e,t)=>ee8.createElement(etS,etO({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"},AM(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?ee8.createElement(et_,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):ee8.createElement(etL,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etF(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=TL(t,"recharts-bar-"),[h,m]=(0,ee8.useState)(!1),p=(0,ee8.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,ee8.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return ee8.createElement(etD,{showLabels:!h,rects:r},ee8.createElement(T_,{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 etz(etz({},t),{},{x:kD(r.x,t.x,e),y:kD(r.y,t.y,e),width:kD(r.width,t.width,e),height:kD(r.height,t.height,e)});if("horizontal"===a){var i=kD(0,t.height,e),o=kD(t.stackedBarStart,t.y,e);return etz(etz({},t),{},{y:o,height:i})}var l=kD(0,t.width,e),s=kD(t.stackedBarStart,t.x,e);return etz(etz({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:ee8.createElement(z6,null,ee8.createElement(et$,{props:t,data:i}))}),ee8.createElement(Lw,{label:t.label}),t.children)}function etB(e){var t=(0,ee8.useRef)(null);return ee8.createElement(etF,{previousRectanglesRef:t,props:e})}var etV=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:kW(e,t)}};class etH extends ee8.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,jQ.clsx)("recharts-bar",r);return ee8.createElement(z6,{className:c,id:s},o&&ee8.createElement("defs",null,ee8.createElement(YH,{clipPathId:s,xAxisId:a,yAxisId:i})),ee8.createElement(z6,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},ee8.createElement(etR,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),ee8.createElement(etB,this.props)))}}var etU={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:Me.bar};function etq(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}=YV(n,r),h=Np(CR),m=Cd(),p=Th(e.children,Tl),g=Np(t=>etp(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,ee8.createElement(etr,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etV,errorBarOffset:t},ee8.createElement(etH,etO({},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})))}ee8.memo(function(e){var t,n,r=A2(e,etU),a=(t=r.stackId,null!=(n=(0,ew.useContext)(etk))?n.stackId:null!=t?kZ(t):void 0),i=Cd();return ee8.createElement(_T,{id:r.id,type:"bar"},e=>ee8.createElement(ee8.Fragment,null,ee8.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:k4(n,t),payload:e}]})(r)}),ee8.createElement(etT,{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}),ee8.createElement(_H,{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}),ee8.createElement(_5,{zIndex:r.zIndex},ee8.createElement(etq,etO({},r,{id:e})))))},FR).displayName="Bar";let etW=(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 etK({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)(eeG,{value:eeX(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 etG=ew,etX=(e,t,n,r)=>zC(e,"xAxis",t,r),etY=(e,t,n,r)=>zS(e,"xAxis",t,r),etZ=(e,t,n,r)=>zC(e,"yAxis",n,r),etJ=(e,t,n,r)=>zS(e,"yAxis",n,r),etQ=kl([CR,etX,etZ,etY,etJ],(e,t,n,r,a)=>kK(e,"xAxis")?k2(t,r,!1):k2(n,a,!1));function et0(e){return"line"===e.type}var et1=kl([O7,(e,t,n,r,a)=>a],(e,t)=>e.filter(et0).find(e=>e.id===t)),et2=kl([CR,etX,etZ,etY,etJ,et1,etQ,ku],(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=kW(e,o);if("horizontal"===t){var d=kJ({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=kJ({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})}}),et5=["id"],et4=["type","layout","connectNulls","needClip","shape"],et3=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function et6(){return(et6=Object.assign.bind()).apply(null,arguments)}function et8(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 et7(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et8(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)):et8(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function et9(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 ene=etG.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:kF,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:k4(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etG.createElement(Db,{tooltipEntrySettings:u})}),ent=(e,t)=>"".concat(t,"px ").concat(e,"px");function enn(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=z1(et9(r,et5));return etG.createElement(Y_,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function enr(e){var{showLabels:t,children:n,points:r}=e,a=(0,etG.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 et7(et7({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etG.createElement(Lx,{value:t?a:void 0},n)}function ena(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=et7(et7({},z5(et9(i,et4))),{},{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 etG.createElement(etG.Fragment,null,(null==r?void 0:r.length)>1&&etG.createElement(RN,et6({shapeType:"curve",option:d},u,{pathRef:n})),etG.createElement(enn,{points:r,clipPathId:t,props:i}))}function eni(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=TL(o,"recharts-line-"),b=(0,etG.useRef)(v),[y,w]=(0,etG.useState)(!1),j=(0,etG.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etG.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,etG.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etG.createElement(enr,{points:o,showLabels:!y},n.children,etG.createElement(T_,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kD(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return ent(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))):ent(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 et7(et7({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return f?et7(et7({},t),{},{x:kD(2*h,t.x,e),y:kD(m/2,t.y,e)}):et7(et7({},t),{},{x:t.x,y:t.y})});return a.current=p,etG.createElement(ena,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etG.createElement(ena,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etG.createElement(Lw,{label:n.label}))}function eno(e){var{clipPathId:t,props:n}=e,r=(0,etG.useRef)(null),a=(0,etG.useRef)(0),i=(0,etG.useRef)(null);return etG.createElement(eni,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:a,pathRef:i})}var enl=(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:kW(e.payload,t)}};class ens extends etG.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,jQ.clsx)("recharts-line",r),{r:m,strokeWidth:p}=Y1(t),g=Tm(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etG.createElement(_5,{zIndex:f},etG.createElement(z6,{className:h},u&&etG.createElement("defs",null,etG.createElement(YH,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etG.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etG.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etG.createElement(etr,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:enl,errorBarOffset:0},etG.createElement(eno,{props:this.props,clipPathId:d}))),etG.createElement(YB,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var enc={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:Me.line,type:"linear"};function end(e){var t=A2(e,enc),{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=et9(t,et3),{needClip:x}=YV(h,m),v=Np(Bl),b=Np(CR),y=Cd(),w=Np(e=>et2(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 etG.createElement(ens,et6({},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 enu=etG.memo(function(e){var t=A2(e,enc),n=Cd();return etG.createElement(_T,{id:t.id,type:"line"},e=>etG.createElement(etG.Fragment,null,etG.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:k4(n,t),payload:e}]})(t)}),etG.createElement(ene,{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}),etG.createElement(_H,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etG.createElement(end,et6({},t,{id:e}))))},FR);enu.displayName="Line";var enf=["axis"],enh=(0,ew.forwardRef)((e,t)=>ew.createElement(Zp,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:enf,tooltipPayloadSearcher:LB,categoricalChartProps:e,ref:t}));let enm={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},enp={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},eng={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,ez.cn)("size-2.5 shrink-0 rounded-full",enm[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]})}},enx={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,ez.cn)("fill-none",enp[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 env({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,ez.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:eng,edgeTypes:enx,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 enb({nodes:e,links:t}){return(0,eb.jsx)(env,{nodes:e,links:t})}function eny({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 enw({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,ez.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,ez.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function enj({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)(eeg,{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 enk({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)(enN,{item:e})}}),[e]);return(0,eb.jsx)(eeg,{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 enN({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)(eeJ,{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)(eeJ,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function enS({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)(enC,{worker:e,divided:t>0},e.id))})}function enC({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,ez.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)(enM,{label:"CPU",value:e.cpu}),(0,eb.jsx)(enM,{label:"MEM",value:e.memory})]})]})}function enM({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeQ,{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 enE({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)(eeg,{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 enP({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)(enO,{machine:e,divided:t>0},e.id))})}function enO({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,ez.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)(enz,{status:e.status}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.name})]}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.os," · ",e.link," · heartbeat ",e.heartbeat]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 sm:grid-cols-4",children:[(0,eb.jsx)(enI,{icon:(0,eb.jsx)(uT,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(ee4,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(uR,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(ee3,{}),label:"NET",value:e.network})]})]})}function enI({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsxs)("div",{className:"flex justify-between gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1 [&_svg]:size-3",children:[e,t]}),(0,eb.jsxs)("span",{children:[n,"%"]})]}),(0,eb.jsx)(eeJ,{value:n,className:"h-1.5"})]})}function enz({status:e}){return(0,eb.jsx)("span",{className:(0,ez.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enA({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)(eeg,{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 enT({config:e,data:t}){return(0,eb.jsx)(Vp,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Zx,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZJ,{vertical:!1}),(0,eb.jsx)(Ja,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(B3,{content:(0,eb.jsx)(Vx,{indicator:"line"})}),(0,eb.jsx)(Zu,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(Zu,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(Zu,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enR({services:e}){let[t,n]=Yn(),r=Math.max(1,Math.floor((Math.max(0,n.width-192-64-32)+5)/12)),a=Math.max(48,n.height>0?Math.floor((n.height-0*Math.max(0,e.length-1))/e.length):48),i=Math.max(28,a-22);return(0,eb.jsx)("div",{ref:t,className:"mt-2 min-h-0 flex-1",children:e.map((e,t)=>(0,eb.jsx)(enD,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function enD({service:e,divided:t,rowHeight:n,sampleCount:r,sampleHeight:a}){let i=ew.useMemo(()=>{var t,n;return t=e.samples,n=r,t.length>=n?t.slice(t.length-n):Array.from({length:n},(e,n)=>{let r=n%t.length;return t[r]??0})},[r,e.samples]);return(0,eb.jsxs)("div",{className:(0,ez.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,ez.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,ez.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 en_=[{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 enL(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:[]}}}en_.push(enL("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),enL("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),enL("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),enL("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),enL("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let en$=en_.filter(e=>"idle"!==e.status),enF=en_.filter(e=>"idle"===e.status);function enB(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function enV(e,t){return(0,eb.jsx)("section",{className:(0,ez.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:eew({image:t,opacity:.88,blur:"0px"}),children:e})}let enH=[{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*enF.length)+1)}];function enU({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)(dD,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fI,{hideClose:!0,className:(0,ez.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)(fT,{className:"sr-only",children:t}),(0,eb.jsxs)(fR,{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)(fP.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,ez.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)(Bk,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(wK,{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)(wK,{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,ez.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)(Bk,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(wK,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enq({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)(uV,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("活跃画布","画布列表"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"当前正在编辑的画布数量",value:String(en$.length)}),eex)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(VR,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("运行节点","画布节点"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),eev)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(jY,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("未保存","画布保存状态"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"等待写入的画布变更",value:"4"}),eeb)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Gv,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("快照","画布快照"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"可回退的历史存档",value:"46"}),eey)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uV,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enB("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eny,{title:t.title,count:en$.length}),(0,eb.jsx)(ee1,{canvases:en$,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(pa,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enF.length)+1)},defaultConfig:enB("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(eny,{title:t.title,count:enF.length}),(0,eb.jsx)(ee1,{canvases:enF,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeW,{boardId:"canvas-library",definitions:i,initialLayouts:enH,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enK,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function enW({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 enK({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(enU,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VD,{}),content:(0,eb.jsx)(enG,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(ees,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enY,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(eeh,{}),content:(0,eb.jsx)(enY,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(pa,{}),content:(0,eb.jsx)(enY,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(eef,{}),content:(0,eb.jsx)(enY,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gw,{}),content:(0,eb.jsx)(enY,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Gv,{}),content:(0,eb.jsx)(enY,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(eed,{}),content:(0,eb.jsx)(enY,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(eeu,{}),content:(0,eb.jsx)(enY,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enG({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)(enX,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enX,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enX,{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)(enW,{icon:(0,eb.jsx)(VR,{}),value:e.runtime})]}),(0,eb.jsx)(eeg,{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 enX({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 enY({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,ez.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(eec,{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)(vO,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vz,{children:[(0,eb.jsx)(vA,{children:"没有匹配节点。"}),(0,eb.jsx)(vT,{heading:"可用节点",children:uZ.map(e=>(0,eb.jsxs)(vR,{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)(vD,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enJ({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 u0(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,uZ.find(e=>e.id===n)?.size??uW({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:uX(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:uK(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 fh(e):await fd(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{hQ.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 hQ.error("文件路径不可用"),Error("file path is unavailable");try{let i=await u7({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),hQ.success("文件已保存")}catch(e){throw hQ.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?.[Xp]:void 0;if(a)return a;let i=e.dataTransfer.getData(Xp);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)(J3,{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=[]:u0(e.id)&&(r.tab=u2(e.id,`${t}-tab`)),{id:t,type:"blank",position:uX(n,e.size),data:r,width:e.size.width,height:e.size.height,style:uK(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]),z=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?.[Xm]: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:uX(n,r),style:e.style??uK(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]),A=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[Xm,Xp].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&&u0(n.kind))return n;let r=t.kind;if(u0(r))return u2(r,e.id)}(e=u5(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[Xm]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[Xm]:u.id},s&&(c[Xp]=s,d[Xp]=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?u1(l.kind):(0,eb.jsx)(uI,{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)(Yt,{open:void 0!==h,onOpenChange:e=>{e||m(void 0)},onSelectFile:e=>{m(void 0),w(e,h)}}),handleAddPaletteOpenChange:function(e){d(e),e||f(void 0)},handleCanvasAction:T,handleCanvasDragOver:A,handleCanvasDrop:z,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:uU,edgeTypes:uq,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)(h3,{position:"top-right"})]})}async function enQ(){return(await en7("/api/local/projects")).projects??[]}async function en0(e){return en7(`/api/local/projects/${encodeURIComponent(e)}`)}async function en1(e){return en7("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function en2(e,t){return en7(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function en5(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function en4(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function en3(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function en6(e){return((await en7(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>ci(e,void 0))}async function en8(e,t){return ci((await en7("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function en7(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}xR.length;let en9=(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"}]]),ere=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],ert=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],ern=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],err=[{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)强制上卡。"}],era=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],eri=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],ero=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function erl({onCreated:e,onCancel:t}){let{machines:n}=xD(),{models:r}=x6(),[a,i]=ew.useState("local"),{engines:o}=jE(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,z]=ew.useState(""),[A,T]=ew.useState("standard"),[R,D]=ew.useState("queue-park"),[_,L]=ew.useState(!1),[$,F]=ew.useState("risky+"),[B,V]=ew.useState(!1),[H,U]=ew.useState("wake-singleton"),[q,W]=ew.useState(!1),[K,G]=ew.useState(""),X=jv(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:ers(P,1,16),maxSpawnDepth:ers(I,1,5),hitlStrictness:A,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await en1({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:ers(S,0,Number.MAX_SAFE_INTEGER)});e(n.id)}catch(e){G(e instanceof Error?e.message:"工程创建失败")}finally{W(!1)}}},[R,S,h,q,_,$,u,k,A,x,X,M,P,I,e,a,p,B,H,w,b]),Q=c===ere.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:ere.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,ez.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)(pt,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,ez.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<ere.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,ez.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)(eru,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(erd,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gG,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xO,{children:ert.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xI,{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)(erd,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gG,{value:""===h?jg:h,onValueChange:e=>m(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(erd,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gG,{value:p,onValueChange:g,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:ern.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:ern.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(jp,{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)(erd,{label:"工程名称(必填)",children:[(0,eb.jsx)(eA,{value:b,placeholder:"新工程",onChange:e=>{y(e.currentTarget.value),K&&G("")}}),Z?null:(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-amber-500",children:"工程名称不能为空。"})]}),(0,eb.jsx)(erd,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(wc,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(jc,{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)(erd,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:S,onChange:e=>C(e.currentTarget.value),placeholder:"0 = 全局默认",className:"w-52"})})]}):null,2===c?X?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gG,{value:""===h?jg:h,onValueChange:e=>m(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(x8,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(erd,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:P,onChange:e=>O(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(erd,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:I,onChange:e=>z(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(erd,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gG,{value:A,onValueChange:e=>T(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:err.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:err.find(e=>e.value===A)?.desc})]}),(0,eb.jsxs)(erd,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gG,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:era.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:era.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)(hB,{}),"危险反思智能体"]}),(0,eb.jsx)(bt,{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)(erd,{label:"触发档位(severity)",children:(0,eb.jsxs)(gG,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:eri.map(e=>(0,eb.jsx)(xI,{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)(uO,{}),"评审智能体"]}),(0,eb.jsx)(bt,{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)(erd,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gG,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:ero.map(e=>(0,eb.jsx)(xI,{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)(erc,{icon:(0,eb.jsx)(pa,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(eO,{}),label:"运行环境",value:Y}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(uT,{}),label:"运行引擎",value:ert.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(pe,{}),label:"模型",value:X?jb(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(en9,{}),label:"权限 / HITL",value:`${ern.find(e=>e.value===p)?.label??p} \xb7 ${err.find(e=>e.value===A)?.label??A}`}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(eed,{}),label:"编排上限",value:`同伴 ${P.trim()||`默认8`} \xb7 深度 ${I.trim()||`默认3`}`}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(G0,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(pa,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(uO,{}),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)(pn,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(eI.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(pi,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(eI.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(ere.length-1,e+1)),children:["下一步",(0,eb.jsx)(pr,{className:"size-4"})]})]})})]})}function ers(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 erc({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 erd({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 eru({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)(erd,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gG,{value:e,onValueChange:t,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xO,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xI,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let erf=[{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)强制上卡。"}],erh=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],erm=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],erp=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],erg=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],erx=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],erv=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eeR,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(pe,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(eeh,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uB,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(bf,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(G5,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(eeh,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(eed,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(en9,{})}];function erb({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 en0(e);n(t),s(erj(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=erj(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?erN(l):void 0;async function y(){if(!l||!t)return;let r=erN(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await en2(e,(a=l,t={maxPeers:erk(a.maxPeers,1,16),maxSpawnDepth:erk(a.maxSpawnDepth,1,5),budgetSoftPct:erk(a.budgetSoftPct,1,100),budgetHardPct:erk(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=jv(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:erk(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(erj(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)(hB,{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)(eeR,{}),"工程设置"]}),(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:erv.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,ez.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)(erS,{icon:(0,eb.jsx)(eeR,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(erC,{label:"名称",children:(0,eb.jsx)(eA,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(erC,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(wc,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(pe,{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)(hB,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),jv(l.engine)?(0,eb.jsx)(erC,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(pe,{className:"size-4"}),children:(0,eb.jsxs)(gG,{value:""===l.ccModel?jg:l.ccModel,onValueChange:e=>w({ccModel:e===jg?"":e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(x8,{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)(ery,{}),(0,eb.jsx)(jl,{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)(ery,{}),(0,eb.jsx)(js,{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)(ery,{}),(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)(hB,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(jc,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:jv(l.engine)?e.slice(-1):e})}),jv(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)(ery,{}),(0,eb.jsx)(jp,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:jv(l.engine),hint:jv(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(eed,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(erC,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(erC,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(G0,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(erC,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:l.budgetTokens,onChange:e=>w({budgetTokens:e.target.value}),placeholder:"0 = 全局默认",className:"w-52"})}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(erC,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(erC,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:200,value:l.budgetHardPct,onChange:e=>w({budgetHardPct:e.target.value}),placeholder:`默认 100`,className:"w-32"})})]})]})]}):null,"hitl"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(en9,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(erC,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gG,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erf.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erf.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(erC,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gG,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erh.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erh.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(erC,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(eA,{type:"number",min:0,value:l.approvalParkTtlSeconds,onChange:e=>w({approvalParkTtlSeconds:e.target.value}),placeholder:"0 = 无限驻留",className:"w-40"})}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hB,{}),"危险反思智能体"]}),(0,eb.jsx)(bt,{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)(erC,{label:"触发档位(severity)",children:(0,eb.jsxs)(gG,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erm.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(erC,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.dangerModelRef,onChange:e=>w({dangerModelRef:e.target.value}),placeholder:"例如 gpt-5-mini(留空 = 默认)"})})]}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uO,{}),"评审智能体"]}),(0,eb.jsx)(bt,{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)(erC,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gG,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erp.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(erC,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(eeh,{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)(hB,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(erC,{label:"引擎(engine)",children:(0,eb.jsxs)(gG,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erg.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(erC,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gG,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erx.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erx.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,ez.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)(pt,{}),"已保存"]}):null,v?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(erj(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)(pt,{className:"size-4"}),"保存"]})]})})]}):null}function ery(){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)(hB,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function erw(e){return e&&e>0?String(e):""}function erj(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:erw(t.maxPeers),maxSpawnDepth:erw(t.maxSpawnDepth),budgetTokens:erw(e.budgetTokens),budgetSoftPct:erw(t.budgetSoftPct),budgetHardPct:erw(t.budgetHardPct),approvalParkTtlSeconds:erw(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 erk(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 erN(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 erS({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 erC({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 erM=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function erE({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,ez.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)(xS,{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 erP({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,ez.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function erO(){return{kind:"human",id:"local",displayName:"我"}}async function erI(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erq(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function erz(e){return erq(`/api/local/issues/${encodeURIComponent(e)}`)}async function erA(e,t){return erq(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function erT(e,t){return erq(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erR(e){await erq(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erD(e,t){return erq(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function er_(e,t,n=erO()){return erq(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function erL(e){return(await erq(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function er$(e){return(await erq(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erF(e,t,n,r){return erq(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erB(e){await erq(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erV(e){return(await erq(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erH(e,t,n,r){await erq(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erU extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erq(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 erU("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let erW=[{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"}],erK={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erG=[...erW,erK],erX={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erY=["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"},erJ={low:"低",normal:"普通",high:"高",urgent:"紧急"},erQ=["low","normal","high","urgent"],er0={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"},er1={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},er2=["depends_on","blocks","parent","relates_to"],er5={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"}},er4={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function er3(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 er6={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},er8={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"},er7=(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"}]]),er9=(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 eae({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([erz(e),erL(e).catch(()=>[]),er$(t).catch(()=>[]),erI(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hQ.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 er$(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erF(t,o.id,e,n),await k()}catch(e){hQ.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erB(e),await k()}catch(e){hQ.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await erT(o.id,e);l(t),a?.(t);let n=await erL(o.id).catch(()=>s);c(n)}catch(e){hQ.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erD(o.id,erO());l(e),a?.(e);let t=await erL(o.id).catch(()=>s);c(t),hQ.success("认领成功")}catch(e){e instanceof erU&&409===e.status?(hQ.error("认领失败:该 issue 已被他人认领"),j()):hQ.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await er_(o.id,v.trim()),b("");let e=await erL(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hQ.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function P(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erR(o.id),i?.(o.id),r()}catch(e){hQ.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 z(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 A(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)(dD,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsxs)(fI,{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)(fT,{className:"sr-only",children:o?`#${o.number} ${o.title}`:"issue 详情"}),(0,eb.jsx)(fR,{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)(eat,{label:"标题",children:(0,eb.jsx)(eA,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(eat,{label:"描述",children:(0,eb.jsx)(wc,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(eat,{label:`进度 \xb7 ${O.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeJ,{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)(xQ,{checked:e.done,onCheckedChange:()=>void z(t)}),(0,eb.jsx)("span",{className:(0,ez.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)(fP.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(ean,{onAdd:e=>void A(e)})]})}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"活动"}),(0,eb.jsx)("div",{className:"flex flex-col gap-3",children:0===s.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/60",children:"暂无活动"}):s.map(e=>{let t=e.actor?.kind==="human"?"human":"agent",n=e.actor?.displayName??"系统";return(0,eb.jsxs)("div",{className:"flex gap-2.5",children:[(0,eb.jsx)(eaa,{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:er4[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:er3(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)(wc,{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)(er9,{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)(eat,{label:"状态",children:(0,eb.jsx)(erE,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erG.map(e=>(0,eb.jsx)(erP,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(eat,{label:"优先级",children:(0,eb.jsx)(erE,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erQ.map(e=>(0,eb.jsx)(erP,{value:e,children:erJ[e]},e))})}),(0,eb.jsx)(eat,{label:"类型",children:(0,eb.jsx)(erE,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erY.map(e=>(0,eb.jsx)(erP,{value:e,children:erX[e]},e))})}),(0,eb.jsx)(eat,{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)(eaa,{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)(eat,{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)(fP.XIcon,{className:"size-3"})})]},e))}),(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:e=>{e.preventDefault();let t=y.trim();t&&!o.labels.includes(t)&&C({labels:[...o.labels,t]}),w("")},children:[(0,eb.jsx)(eA,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})]})}),(0,eb.jsx)(eat,{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=er5[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)(er7,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",er1[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)(fP.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(ear,{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:["创建于 ",er3(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",er3(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)(bb,{className:"size-4"})," 删除 issue"]})]})]})]})]})})}function eat({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 ean({onAdd:e}){let[t,n]=ew.useState("");return(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:r=>{r.preventDefault(),e(t),n("")},children:[(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})}function ear({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)(erE,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:er2.map(e=>(0,eb.jsx)(erP,{value:e,children:er1[e]},e))}),(0,eb.jsx)(eA,{autoFocus:!0,value:l,onChange:e=>s(e.target.value),placeholder:"搜索 issue(编号 / 标题)",className:"h-8"}),(0,eb.jsx)("div",{className:"flex max-h-40 flex-col gap-0.5 overflow-y-auto",children:0===f.length?(0,eb.jsx)("span",{className:"px-1 py-1.5 text-xs text-muted-foreground/60",children:"无可关联的 issue"}):f.map(e=>(0,eb.jsxs)("button",{type:"button",disabled:r,onClick:async()=>{await a(e.id,c),o(!1),s("")},className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-left text-xs transition hover:bg-muted disabled:opacity-50",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:e.title})]},e.id))}),(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(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 eaa({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,ez.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)(uO,{className:n}):(0,eb.jsx)(VL,{className:n})})}let eai=["backlog","todo","in_progress","blocked","review","done","cancelled"],eao={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 eal({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=eai.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)(eed,{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:er5[e].stroke}}),er1[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)(eed,{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:er5[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=eas(t,n),a=eas(n,t),i=er5[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:er1[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=eao[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,ez.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,ez.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,erG.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 eas(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}}async function eac(e){let t=await fetch((0,eT.localAPIURL)(`/api/local/projects/${encodeURIComponent(e)}/dispatcher`),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error("string"==typeof n?.error?n.error:"dispatcher api failed");let r=ca(n);return{conversationId:r.conversation.id,ownerMachineId:r.conversation.ownerMachineId,events:r.events,running:r.conversation.running??!1,modelRef:r.conversation.settings?.mainModels?.[0]??"",mainModels:r.conversation.settings?.mainModels??[]}}function ead({projectId:e}){let[t,n]=ew.useState(void 0),[r,a]=ew.useState(void 0),[i,o]=ew.useState(""),[l,s]=ew.useState([]),[c,d]=ew.useState([]),[u,f]=ew.useState(!1),[h,m]=ew.useState(!1);ew.useEffect(()=>{let t=!0;return n(void 0),d([]),f(!1),s([]),(async()=>{try{let r=await eac(e);if(!t)return;n(r.conversationId),a(r.ownerMachineId),o(r.modelRef),s(r.mainModels),d(r.events),f(r.running)}catch{}})(),()=>{t=!1}},[e]),ew.useEffect(()=>{let e;if(!t)return;let n=!0,a=async()=>{if(n)try{let i=await sI(t,r);if(!n)return;let o=i.conversation.running??!1;d(i.events),f(o),s(i.conversation.settings?.mainModels??[]),e=window.setTimeout(a,o?1200:5e3)}catch{if(!n)return;try{let e=await sz(t,{limit:400},r);n&&e.events.length&&d(e.events)}catch{}n&&(e=window.setTimeout(a,5e3))}};return a(),()=>{n=!1,void 0!==e&&window.clearTimeout(e)}},[t,r]);let p=ew.useCallback(e=>{let n=e.trim();t&&n&&!h&&(m(!0),f(!0),(async()=>{try{await sZ(t,{message:n,modelRef:i,mode:"agent"},r)}catch{f(!1)}finally{m(!1)}})())},[t,r,i,h]),g=ew.useMemo(()=>{if(u||h||0===c.length)return;let e=c[c.length-1];return e&&"ask"===e.kind?e:void 0},[c,u,h]),{models:x}=x6(),v=ew.useMemo(()=>l.length?x.filter(e=>l.includes(e.value)).map(e=>({id:e.value,label:e.label})):[],[x,l]),b=0===c.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 flex-col gap-0.5 border-b px-4 py-2.5",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"任务分发"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"把需求转成任务并派发执行"})]}),(0,eb.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,eb.jsx)(HW,{className:"size-full min-h-0",composerClassName:"max-w-[42rem]",events:c,running:u||h,disabled:!t,models:v,modelId:i,onModelChange:e=>o(e),hidePermissionMode:!0,onSubmit:e=>p(e.value),planPromptBar:g?(0,eb.jsx)(eau,{ask:g,onAnswer:p}):void 0}),b?(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.jsx)("div",{className:"max-w-xs text-center",children:(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:"把你对这个工程的需求告诉我,我会拆成任务并派发给执行会话。"})})}):null]})]})}function eau({ask:e,onAnswer:t}){let n=(e.detail?.trim()||e.title?.trim())??"",r=e.askOptions??[],a=e.askAllowMultiple??!1,i=e.askAllowCustom??!1,[o,l]=ew.useState([]);return ew.useEffect(()=>{l([])},[e.id]),(0,eb.jsxs)("div",{className:"vtl-agent-composer-prompt-bar mb-[-1px] rounded-t-xl border border-b-0 bg-popover px-3 pt-2.5 pb-3 shadow-sm",children:[(0,eb.jsx)("p",{className:"mb-2 text-[13px] font-medium text-foreground",children:n}),r.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:r.map(e=>{let n=a&&o.includes(e);return(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:n?"default":"outline",className:(0,ez.cn)("h-auto max-w-full justify-start whitespace-normal py-1.5 text-left text-xs","w-full sm:w-auto"),onClick:()=>a?void l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]):t(e),children:e},e)})}):null,a?(0,eb.jsx)("div",{className:"mt-2 flex justify-end",children:(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",disabled:0===o.length,onClick:()=>t(o.join("、")),children:[(0,eb.jsx)(er9,{className:"mr-1.5 size-3"}),"提交所选"]})}):null,i?(0,eb.jsx)("p",{className:"mt-2 text-[11px] text-muted-foreground",children:"或在下方输入框自行回答"}):null]})}let eaf="application/x-vantaloom-issue";function eah({projectId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState("board"),[c,d]=ew.useState(!1),[u,f]=ew.useState(!1),[h,m]=ew.useState(!0),[p,g]=ew.useState(!1),[x,v]=ew.useState(null),[b,y]=ew.useState(null),[w,j]=ew.useState(null),[k,N]=ew.useState(null),[S,C]=ew.useState(!1),[M,E]=ew.useState(null),P=ew.useCallback(async t=>{t?.silent||g(!0);try{let[t,r,i]=await Promise.all([erI(e),er$(e).catch(()=>[]),erV(e).catch(()=>[])]);n(t),a(r),o(i),v(null)}catch(e){v(e instanceof Error?e.message:"加载看板失败")}finally{m(!1),g(!1)}},[e]);ew.useEffect(()=>{m(!0),P({silent:!0});let e=setInterval(()=>void P({silent:!0}),1e4),t=()=>void P({silent:!0});return window.addEventListener("focus",t),()=>{clearInterval(e),window.removeEventListener("focus",t)}},[P]);let O=ew.useMemo(()=>{let e={};for(let t of[...erW,erK])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 I(e,r,a){let i,o,l=t.find(t=>t.id===e);if(!l)return;let s=(O[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){y(null),n(t=>t.map(t=>t.id===e?{...t,status:r,sortOrder:c}:t));try{await erT(e,{status:r,sortOrder:c})}catch(e){n(t),y(e instanceof Error?`移动失败:${e.message}`:"移动失败,已撤销")}}}function z(e,t,n){e.preventDefault(),e.stopPropagation(),j(null);let r=e.dataTransfer.getData(eaf)||e.dataTransfer.getData("text/plain");r&&I(r,t,n)}async function A(e,t,n){y(null);try{await erH(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erU&&404===e.status||y(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),P({silent:!0})}let T=S?[...erW,erK]:erW;return(0,eb.jsxs)(eeC,{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)(erM,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(eed,{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:[b?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-3.5"}),b]}):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,ez.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)(erM,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,ez.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)(eed,{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:S,onChange:e=>C(e.target.checked),className:"size-3.5 accent-vivid-violet"}),"显示已取消"]}):null,(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void P(),disabled:p,children:[(0,eb.jsx)(bv,{className:(0,ez.cn)("size-4",p&&"animate-spin")}),"刷新"]}),(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",onClick:()=>{f(!0),d(!0)},children:[(0,eb.jsx)(jD,{className:"size-4"}),"任务分发"]})]})]}),i.length>0?(0,eb.jsx)(eam,{approvals:i,onResolve:A}):null,h?(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"})}):x?(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"}),x,(0,eb.jsx)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void P(),children:"重试"})]}):"graph"===l?(0,eb.jsx)(eal,{issues:t,links:r,onOpenIssue:e=>N(e)}):(0,eb.jsx)("div",{className:(0,ez.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:T.map(t=>{let r=O[t.status]??[],a=w===t.status,i=M===t.status;return(0,eb.jsxs)("section",{onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",w!==t.status&&j(t.status)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||j(e=>e===t.status?null:e)},onDrop:e=>z(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,ez.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,ez.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:()=>E(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,ez.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)(eax,{onCancel:()=>E(null),onCreate:async r=>{try{let a=await erA(e,{...r}),i="backlog"===t.status?a:await erT(a.id,{status:t.status}).catch(()=>a);n(e=>[...e,i]),E(null)}catch(e){y(e instanceof Error?`新建失败:${e.message}`:"新建失败")}}}):null,0!==r.length||i?r.map(e=>(0,eb.jsx)(eag,{issue:e,onOpen:()=>N(e.id),onDropBefore:n=>z(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)(eae,{issueId:k,projectId:e,open:null!==k,onClose:()=>N(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),er$(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))}),(0,eb.jsx)(dD,{open:c,onOpenChange:d,children:(0,eb.jsxs)(eeF,{side:"right",className:"w-full gap-0 p-0 sm:max-w-md md:max-w-lg lg:max-w-xl",children:[(0,eb.jsx)(eeB,{className:"border-b",children:(0,eb.jsx)(eeV,{children:"任务分发"})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:u?(0,eb.jsx)(ead,{projectId:e}):null})]})})]})}function eam({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)(en9,{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)(eap,{approval:e,onResolve:t},e.approvalId))})]})}function eap({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,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",er8[e.classification]),children:er6[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)(jD,{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:er3(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(eA,{autoFocus:!0,value:o,onChange:e=>l(e.target.value),placeholder:"拒绝理由(可选)",className:"h-8",onKeyDown:e=>{"Enter"===e.key&&s("reject",o.trim()),"Escape"===e.key&&(i(!1),l(""))}}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(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)(fP.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)(fP.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)(pt,{className:"size-4"}),"通过"]})]})]})}function eag({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(eaf,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,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erZ[e.type]),children:erX[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",er0[e.priority]),children:erJ[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)(eaa,{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 eax({onCreate:e,onCancel:t}){let[n,r]=ew.useState(""),[a,i]=ew.useState("task"),[o,l]=ew.useState("normal"),[s,c]=ew.useState(!1);return(0,eb.jsxs)("form",{className:"flex flex-col gap-2 rounded-lg border border-vivid-violet/40 bg-card p-2.5",onSubmit:async t=>{t.preventDefault(),n.trim()&&(c(!0),await e({title:n.trim(),type:a,priority:o}),c(!1))},children:[(0,eb.jsx)(eA,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:"issue 标题",className:"h-8"}),(0,eb.jsxs)("div",{className:"flex gap-1.5",children:[(0,eb.jsx)(erE,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erY.map(e=>(0,eb.jsx)(erP,{value:e,children:erX[e]},e))}),(0,eb.jsx)(erE,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erQ.map(e=>(0,eb.jsx)(erP,{value:e,children:erJ[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 eav=(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"}]]),eab=(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 eay({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([en4(e).catch(()=>void 0),en3(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 en0(e);if(!t)return;r(a);let o=await en6(e).catch(()=>[]);if(!t)return;c(o);let l=await erI(e).catch(()=>[]);if(!t)return;u(l);let s=await erV(e).catch(()=>[]);if(!t)return;let d=await en5(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 een(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)(eeC,{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)(uI,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(eaw,{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)(eeR,{}),"设置"]}):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)(eaN,{icon:(0,eb.jsx)(uO,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(erM,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(G0,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(uI,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(eaj,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(eak,{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)(eaE,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eaP,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function eaw({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)(en9,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function eaj({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)(ee6,{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 en2(e,{budgetTokens:n}),l=await en5(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)(ee6,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,ez.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,ez.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)(pt,{}),"保存"]}),(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)(fP.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)(HZ,{}),"调整"]})]})})]})}function eak({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)(uO,{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,ez.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)(VR,{}),(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 eaN({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,ez.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 eaS({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)(bv,{className:(0,ez.cn)(e&&"animate-spin")}),"刷新"]})}let eaC=["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 eaM(e,t){return"其他"===t?"bg-ash-gray":eaC[e%eaC.length]??"bg-ash-gray"}function eaE({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)(eav,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(eaS,{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,ez.cn)("h-full",eaM(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,ez.cn)("size-2.5 shrink-0 rounded-sm",eaM(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 eaP({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)(VR,{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)(eaS,{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,ez.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)(eab,{}):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 eaO={delete:"Delete",empty:"Drop here",title:"Trash"};function eaI({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eaO,...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,ez.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,ez.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)(bb,{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)(fP.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)(bb,{className:"size-5"})})})}function eaz({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,ez.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(eaI,{active:!e&&void 0!==a,items:e?[]:n,className:(0,ez.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,ez.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)(Yp,{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?.[Xg],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[Xx],a&&i&&(i[Xg]={...a,config:{...a.config}}),l&&i&&(i[Xx]={...l,config:l.config?{...l.config}:l.config}),s={...n,id:`${n.id}-copy-${c.current}`,title:`${n.title} copy`,payloads:i,dragData:{...n.dragData,...a?{"application/vnd.vantaloom.dashboard-widget-config":JSON.stringify(a.config)}:{}}},void((d=[...t]).splice(r+1,0,s),o(d))},onItemsRemove:e=>o(e),onItemsReorder:e=>o(e),onItemDragStart:({item:e})=>i(e.id),onItemDragEnd:()=>i(void 0)})}):null]}),document.body):null}let eaA=(0,ek.default)("languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]),eaT=(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"}]]),eaR=(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"}]]),eaD=(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"}]]),ea_=(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"}]]),eaL=(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"}]]),ea$=(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"}]]),eaF=(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"}]]),eaB=(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"}]]),eaV=(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 eaH="Collapsible",[eaU,eaq]=ch(eaH),[eaW,eaK]=eaU(eaH),eaG=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=cw({prop:r,defaultProp:a??!1,onChange:o,caller:eaH});return(0,eb.jsx)(eaW,{scope:n,disabled:i,contentId:cb(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cS.div,{"data-state":ea0(s),"data-disabled":i?"":void 0,...l,ref:t})})});eaG.displayName=eaH;var eaX="CollapsibleTrigger",eaY=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eaK(eaX,n);return(0,eb.jsx)(cS.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":ea0(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:cp(e.onClick,a.onOpenToggle)})});eaY.displayName=eaX;var eaZ="CollapsibleContent",eaJ=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eaK(eaZ,e.__scopeCollapsible);return(0,eb.jsx)(cH,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaQ,{...r,ref:t,present:e})})});eaJ.displayName=eaZ;var eaQ=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eaK(eaZ,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,cm.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)},[]),cg(()=>{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)(cS.div,{"data-state":ea0(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 ea0(e){return e?"open":"closed"}var ea1=e.i(91e3);let ea2={"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 ea5({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=ea2[n]??(eis.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,ez.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,ez.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)(ea4,{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)(ea9,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eio,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(eim,{onItemSelect:i,onAccountSettings:g})]})}function ea4({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 enQ();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)(eiu,{icon:ea$,label:eeN.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)(eif,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:eeN.projectEmpty}):g.map(c=>(0,eb.jsx)(ea3,{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 ea3({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 erV(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 en6(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 s5(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)(eaG,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,ez.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)(eaY,{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)(xS,{className:(0,ez.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)(uI,{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)(eih,{active:!0})]})]}),(0,eb.jsx)(eaJ,{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)(ea6,{icon:(0,eb.jsx)(uI,{className:"size-4"}),label:eeN.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(ea6,{icon:(0,eb.jsx)(eaT,{className:"size-4"}),label:eeN.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(ea6,{icon:(0,eb.jsx)(eeR,{className:"size-4"}),label:eeN.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)(eie,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eia,{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:eeN.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:eeN.projectNewConversation})]})]})})})]})}function ea6({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 ea8="__all__",ea7={status:"all",location:ea8,sort:"recent"};function ea9({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(ea7),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===ea8||(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!==ea7.status||f.location!==ea7.location||f.sort!==ea7.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 s5(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)(eie,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eia,{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)(yI,{children:[(0,eb.jsx)(yA,{asChild:!0,children:(0,eb.jsx)(eiu,{icon:tl,label:eeN.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsx)(yB,{className:"min-w-44",children:(0,eb.jsxs)(yV,{onSelect:()=>t({item:{id:"import-claude-session"}}),children:[(0,eb.jsx)(bi,{}),(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)(ein,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(eif,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eie({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=Hj(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,ez.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,ez.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)(eie,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eit={all:"全部",running:"运行中",idle:"空闲"};function ein({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===ea8?"全部":a(e.location);return(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,ez.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)(eeh,{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)(wt,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(wa,{children:"筛选与排序"}),(0,eb.jsxs)(we,{children:[(0,eb.jsxs)(wl,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eit[e.status]})]}),(0,eb.jsx)(ws,{children:(0,eb.jsxs)(y4,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(wr,{value:"all",children:"全部"}),(0,eb.jsx)(wr,{value:"running",children:"运行中"}),(0,eb.jsx)(wr,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(we,{children:[(0,eb.jsxs)(wl,{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)(ws,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(y4,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(wr,{value:ea8,children:"全部"}),r.map(e=>(0,eb.jsx)(wr,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(wi,{}),(0,eb.jsx)(wa,{children:"排序"}),(0,eb.jsxs)(y4,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(wr,{value:"recent",children:"最近活动"}),(0,eb.jsx)(wr,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(wi,{}),(0,eb.jsx)(wn,{onSelect:()=>t(ea7),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eir({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,ez.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 eia({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)(eir,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eii,{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 eii({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)(yV,{onSelect:()=>l(),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yV,{onSelect:()=>c(),children:[(0,eb.jsx)(VR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yV,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bb,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,ez.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)(eih,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(wn,{onSelect:()=>l(),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(wn,{onSelect:()=>c(),children:[(0,eb.jsx)(VR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(wn,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bb,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yI,{children:[(0,eb.jsx)(yA,{asChild:!0,children:g}),(0,eb.jsx)(yB,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(ua,{open:u,onOpenChange:f,children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:d}),(0,eb.jsxs)(uC,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eio({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(wK,{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)(eic,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eil,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eil({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,ez.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)(eih,{active:!0})]})}let eis=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uT,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(pe,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uO,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eaB,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uT,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eeR,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eaL,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(jY,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(ea_,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eaT,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(UI,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(G5,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(eed,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(eed,{})},{id:"search-settings",label:"搜索设置",icon:(0,eb.jsx)(x_,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(bi,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bv,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eaV,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jD,{})}]}];function eic({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eis.map(n=>(0,eb.jsx)(eid,{title:n.title,icon:n.icon,items:n.items,activeWorkspace:e,onItemSelect:t},n.id))})}function eid({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)(eaG,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaY,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,ez.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)(xS,{className:(0,ez.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eaJ,{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,ez.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)(eih,{active:!0})]},e.id)})})]})}let eiu=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 eif(){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 eih({active:e}){return(0,eb.jsx)("span",{className:(0,ez.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function eim({onItemSelect:e,onAccountSettings:t}){let{user:n}=ti(),r=n?.name??eek.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(pr,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(wt,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(wa,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(wn,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(wn,{disabled:!0,children:[(0,eb.jsx)(eaA,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(wn,{disabled:!0,children:[(0,eb.jsx)(Ug,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Gv,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(eig,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(wi,{}),(0,eb.jsx)(eix,{})]})]})]})})}let eip=["light","dark","jelly"];function eig(){let{resolvedTheme:e,setTheme:t}=(0,hV.useTheme)(),[n,r]=ew.useState(ea1.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(ea1.appearanceThemeStorageKey)??ea1.defaultAppearanceTheme;r(e),(0,ea1.applyAppearanceTheme)({theme:e})},[]);let a=n===ea1.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=eip[(eip.indexOf(a)+1)%eip.length]??"light";function o(e){r(e),window.localStorage.setItem(ea1.appearanceThemeStorageKey,e),(0,ea1.applyAppearanceTheme)({theme:e})}let l="dark"===a?eaD:eaF;return(0,eb.jsxs)(wn,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(ea1.jellyAppearanceTheme);return}o(ea1.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:eek.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function eix(){let{logout:e}=ti();return(0,eb.jsxs)(wn,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eaR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let eiv=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}),eib=()=>{let e=ew.default.useContext(eiv);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function eiy(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function eiw(){return eij(/^iPhone/)||eij(/^iPad/)||eij(/^Mac/)&&navigator.maxTouchPoints>1}function eij(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 eik="u">typeof window?ew.useLayoutEffect:ew.useEffect;function eiN(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let eiS="u">typeof document&&window.visualViewport;function eiC(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function eiM(e){for(eiC(e)&&(e=e.parentElement);e&&!eiC(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let eiE=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eiP=0;function eiO(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function eiI(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=eiM(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 eiz(e){return e instanceof HTMLInputElement&&!eiE.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eiA(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eiT=new WeakMap;function eiR(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||eiT.set(e,r)}let eiD=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function ei_(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(", ")[eiD(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eiD(t)?5:4]):null}function eiL(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let ei$=[.32,.72,0,1],eiF="vaul-dragging";function eiB(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 eiV({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=eiB(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=eiB(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 eiH=()=>()=>{},eiU=null,eiq=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=eib(),c=eiA(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dU,{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})});eiq.displayName="Drawer.Overlay";let eiW=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}=eib(),[y,w]=ew.default.useState(!1),j=eiA(a,i),k=ew.default.useRef(null),N=ew.default.useRef(null),S=ew.default.useRef(!1),C=p&&p.length>0;function M(e){k.current=null,S.current=!1,l(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:r,noBodyStyles:a}=eib(),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?eiL(document.body,{background:"black"}):eiH,eiL(t,{transformOrigin:eiD(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${ei$.join(",")})`}));let n=eiL(t,{borderRadius:"8px",overflow:"hidden",...eiD(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(dG,{"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)}})});eiW.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}=eib(),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 eiK=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[z=!1,A]=eiV({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]=eiV({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)),eiD(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),eiR(r.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.join(",")})`,opacity:"0"}):eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.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&&eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.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=eiD(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]||eiR(r.current,{transform:eiD(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;eik(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eiP&&eiw()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=eiN((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=eiN(eiO(document,"touchstart",e=>{((a=eiM(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eiO(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}),eiO(document,"touchend",e=>{let t=e.target;eiz(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eiO(document,"focus",e=>{let t=e.target;eiz(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",eiS&&(eiS.height<window.innerHeight?requestAnimationFrame(()=>{eiI(t)}):eiS.addEventListener("resize",()=>eiI(t),{once:!0}))}))},!0),eiO(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eiP&&(null==o||o())}}},[t])}({isDisabled:!z||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(eiy()&&null===eiU&&e&&!i){eiU={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(eiy()&&null!==eiU&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eiU),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eiU=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:z,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?ei_(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(eiF),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||A(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=ei_(Z.current,w);eiR(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`}),eiR(F.current,{transition:`opacity 0.5s cubic-bezier(${ei$.join(",")})`,opacity:"1"}),l&&t&&t>0&&z&&eiR(e,{borderRadius:"8px",overflow:"hidden",...eiD(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(${ei$.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eiz(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(()=>(z&&(eiR(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eiT.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[z]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dD,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),A(e))},open:z},ew.default.createElement(eiv.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,eiw()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eiD(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eiF),q.current=!1,_(!1),H.current=new Date;let r=ei_(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-(eiD(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-(eiD(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(eiF),q.current=!0,eiR(Z.current,{transition:"none"}),eiR(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eiR(Z.current,{transform:eiD(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),eiR(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);eiR(c,{borderRadius:`${t}px`,transform:eiD(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eiR(Z.current,{transform:eiD(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:z,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;eiR(Z.current,{transform:eiD(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),eiR(Z.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=ei_(Z.current,w);eiR(Z.current,{transition:"none",transform:eiD(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eiD(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eiR(Z.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(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))},eiG=function(e){let t=eib(),{container:n=t.container,...r}=e;return ew.default.createElement(dV,{container:n,...r})};function eiX({className:e,...t}){return(0,eb.jsx)(eiq,{"data-slot":"drawer-overlay",className:(0,ez.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 eiY({className:e,children:t,...n}){return(0,eb.jsxs)(eiG,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiX,{}),(0,eb.jsxs)(eiW,{"data-slot":"drawer-content",className:(0,ez.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 eiZ({className:e,...t}){return(0,eb.jsx)(dQ,{"data-slot":"drawer-title",className:(0,ez.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eiJ({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)(eiQ,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiK,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiY,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eiZ,{className:"sr-only",children:"导航"}),(0,eb.jsx)(ea5,{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 eiQ({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,ez.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)(cl,{})}),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 ei0=(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"}]]),ei1=[{id:"canvas",label:eeN.canvas,icon:(0,eb.jsx)(uI,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uO,{})},{id:"settings",label:eeN.settings,icon:(0,eb.jsx)(eeR,{})}],ei2=[{id:"canvas",title:eeN.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:eeN.canvas,items:[{id:"open-recent-canvas",label:eeN.canvasRecent,icon:(0,eb.jsx)(uI,{})},{id:"new-canvas",label:eeN.canvasNew,icon:(0,eb.jsx)(lY,{})},{id:"all-canvases",label:eeN.canvasAll,icon:(0,eb.jsx)(uR,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:eeN.conversationRecent,icon:(0,eb.jsx)(ei0,{})},{id:"new-agent-conversation",label:eeN.conversationNew,icon:(0,eb.jsx)(uO,{})}]}]},{id:"settings",title:eeN.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eeR,{})}]}]}],ei5=(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"}]]),ei4=(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"}]]),ei3=(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"}]]),ei6=(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 ei8(){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)(Bk,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(jX,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(QR,{}),(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)(QR,{}),(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)(bv,{}),i?"刷新中...":"刷新状态"]}):null]}),c?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[u?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(eA,{value:h,onChange:e=>m(e.target.value),maxLength:64,autoFocus:!0,placeholder:"机器名称",className:"h-8 text-sm",onKeyDown:e=>{"Enter"===e.key&&y(),"Escape"===e.key&&f(!1)}}),(0,eb.jsx)(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)(pt,{})}),(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)(fP.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)(HZ,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bk,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(ei3,{className:"size-3"}):(0,eb.jsx)(ei6,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(ei6,{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)(ei7,{}),(0,eb.jsx)(ei9,{}),(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)(ua,{children:[(0,eb.jsx)(ui,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(ei4,{}),"解除绑定"]})}),(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"确认解除设备绑定?"}),(0,eb.jsx)(uC,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{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)(QR,{}),(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)(eaR,{}),"退出登录"]})]})]})]})})}):null}function ei7(){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)(ei5,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"修改密码"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"更改你的 Vantaloom Hub 登录密码。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(eA,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"确认新密码",autoComplete:"new-password",value:a,onChange:e=>i(e.target.value)})]}),s?(0,eb.jsx)("p",{className:"ok"===s.kind?"text-xs text-primary":"text-xs text-destructive",children:s.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(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 ei9(){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 jk({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 jj();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)(uP,{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)(QT,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(bt,{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 eoe=["PageUp","PageDown"],eot=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],eon={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eor="Slider",[eoa,eoi,eoo]=h6(eor),[eol,eos]=ch(eor,[eoo]),[eoc,eod]=eol(eor),eou=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]=cw({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=po(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)(eoc,{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)(eoa.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(eoa.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?eom:eop,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:cp(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=eoe.includes(e.key)||e.shiftKey&&eot.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});eou.displayName=eor;var[eof,eoh]=eol(eor,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eom=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,cm.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=mt(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=eoC([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(eof,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(eog,{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=eon[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),eop=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,cm.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=eoC([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(eof,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(eog,{"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=eon[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),eog=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=eod(eor,n);return(0,eb.jsx)(cS.span,{...c,ref:t,onKeyDown:cp(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eoe.concat(eot).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:cp(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:cp(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:cp(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),eox="SliderTrack",eov=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eod(eox,n);return(0,eb.jsx)(cS.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});eov.displayName=eox;var eob="SliderRange",eoy=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eod(eob,n),i=eoh(eob,n),o=ew.useRef(null),l=(0,cm.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>eoS(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cS.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});eoy.displayName=eob;var eow="SliderThumb",eoj=ew.forwardRef((e,t)=>{let n=eoi(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,cm.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(eok,{...e,ref:i,index:o})}),eok=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=eod(eow,c),m=eoh(eow,c),[p,g]=ew.useState(null),x=(0,cm.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=gm(p),y=h.values[d],w=void 0===y?0:eoS(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=eoC([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)(eoa.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cS.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:cp(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(eoN,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});eoj.displayName=eow;var eoN=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,cm.useComposedRefs)(a,r),o=gA(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)(cS.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function eoS(e,t,n){return po(100/(n-t)*(e-t),[0,100])}function eoC(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 eoM(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function eoE({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>eoM(n)??eoM(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(eou,{"data-slot":"slider",defaultValue:eoM(t),value:eoM(n),min:r,max:a,className:(0,ez.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)(eov,{"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)(eoy,{"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)(eoj,{"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))]})}eoN.displayName="RadioBubbleInput";let eoP=[1e4,3e4,12e4,3e5,6e5];function eoO(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??[],loopMaxIterations:e.behavior?.loopMaxIterations??25,loopHookWait:e.behavior?.loopHookWait??"defer",loopHookWaitTimeoutSec:e.behavior?.loopHookWaitTimeoutSec??0}}}function eoI(e){return(e&&e.length?e:eoP).map(e=>Math.round(e/1e3)).join(", ")}function eoz(){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 jk({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eoO(n)),h(eoI(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([jj(),x0()]);t(eoO(e)),h(eoI(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)(Gw,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eoA,{models:n,value:e.compression.modelRef,onValueChange:e=>m("compression",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于执行上下文压缩的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-summary",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"对话摘要"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(bt,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(QR,{}),(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)(QT,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(bt,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoA,{models:n,value:e.summary.modelRef,onValueChange:e=>m("summary",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于生成对话摘要的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自动重试与工具调用上限"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本机(vantaloom)agent 单次运行的工具调用上限,以及请求失败后的自动重试。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.maxToolCalls,onChange:e=>m("behavior",{maxToolCalls:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"单次运行累计调用工具达到该次数后强制暂停(可点击“继续”恢复)。设为 0 表示不限次(默认)。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.retryCount,onChange:e=>m("behavior",{retryCount:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型/服务商请求失败时自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(eA,{value:f,onChange:e=>{let t=e.currentTarget.value;h(t),m("behavior",{retryDelaysMs:t.split(/[,,\s]+/).map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e)})},placeholder:"10, 30, 120, 300, 600"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用逗号分隔每次重试的等待秒数(指数级递增),例如 10, 30, 120, 300, 600。超出列表长度时使用最后一项。留空使用内置默认梯度。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",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)(QT,{className:"text-sm",children:"最大循环次数"}),(0,eb.jsx)(eA,{type:"number",min:1,value:e.behavior.loopMaxIterations,onChange:e=>m("behavior",{loopMaxIterations:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连续自动续跑达到该次数后强制暂停以避免无限计费(发送新消息可继续)。设为 0 表示使用内置默认值(25)。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"钩子处理"}),(0,eb.jsxs)(gG,{value:e.behavior.loopHookWait??"defer",onValueChange:e=>m("behavior",{loopHookWait:"wait"===e?"wait":"defer"}),children:[(0,eb.jsx)(xM,{children:(0,eb.jsx)(gJ,{})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"defer",children:"有钩子运行时暂停"}),(0,eb.jsx)(xI,{value:"wait",children:"等待钩子完成后继续"})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"当存在会自动唤醒本对话的钩子(如进程退出、定时器)时:选择“暂停”则交由钩子驱动;选择“等待”则等钩子完成后再继续循环。"})]}),"wait"===e.behavior.loopHookWait?(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"等待超时(秒,0 = 直到无钩子)"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.loopHookWaitTimeoutSec??0,onChange:e=>m("behavior",{loopHookWaitTimeoutSec:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在“等待”模式下,最多等待多少秒后无论钩子是否完成都继续。设为 0 表示一直等到没有钩子在运行(仍受 30 分钟的硬性上限约束)。"})]}):null]}),(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)(QT,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eoA,{models:n,value:e.approval.modelRef,onValueChange:e=>m("approval",{modelRef:e}),placeholder:"未配置(全部放行)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空表示 Auto 模式下不进行 AI 审批,所有非危险命令自动放行。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(wc,{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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:s||"无法加载代理配置"})]})}function eoA({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.label},e.id))]})]})}let eoT=(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 eoR="Accordion",eoD=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eo_,eoL,eo$]=h6(eoR),[eoF,eoB]=ch(eoR,[eo$,eaq]),eoV=eaq(),eoH=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eo_.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoX,{...r,ref:t}):(0,eb.jsx)(eoG,{...r,ref:t})})});eoH.displayName=eoR;var[eoU,eoq]=eoF(eoR),[eoW,eoK]=eoF(eoR,{collapsible:!1}),eoG=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=cw({prop:n,defaultProp:r??"",onChange:a,caller:eoR});return(0,eb.jsx)(eoU,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eoW,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eoJ,{...o,ref:t})})})}),eoX=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=cw({prop:n,defaultProp:r??[],onChange:a,caller:eoR}),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)(eoU,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eoW,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eoJ,{...i,ref:t})})})}),[eoY,eoZ]=eoF(eoR),eoJ=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,cm.useComposedRefs)(l,t),c=eoL(n),d="ltr"===mt(a),u=cp(e.onKeyDown,e=>{if(!eoD.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)(eoY,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eo_.Slot,{scope:n,children:(0,eb.jsx)(cS.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoQ="AccordionItem",[eo0,eo1]=eoF(eoQ),eo2=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoZ(eoQ,n),o=eoq(eoQ,n),l=eoV(n),s=cb(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eo0,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eaG,{"data-orientation":i.orientation,"data-state":eo9(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eo2.displayName=eoQ;var eo5="AccordionHeader",eo4=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo5,n);return(0,eb.jsx)(cS.h3,{"data-orientation":a.orientation,"data-state":eo9(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eo4.displayName=eo5;var eo3="AccordionTrigger",eo6=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo3,n),o=eoK(eo3,n),l=eoV(n);return(0,eb.jsx)(eo_.ItemSlot,{scope:n,children:(0,eb.jsx)(eaY,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eo6.displayName=eo3;var eo8="AccordionContent",eo7=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo8,n),o=eoV(n);return(0,eb.jsx)(eaJ,{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 eo9(e){return e?"open":"closed"}function ele({...e}){return(0,eb.jsx)(eoH,{"data-slot":"accordion",...e})}function elt({className:e,...t}){return(0,eb.jsx)(eo2,{"data-slot":"accordion-item",className:(0,ez.cn)("border-b last:border-b-0",e),...t})}function eln({className:e,children:t,...n}){return(0,eb.jsx)(eo4,{className:"flex",children:(0,eb.jsxs)(eo6,{"data-slot":"accordion-trigger",className:(0,ez.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)(xS,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function elr({className:e,children:t,...n}){return(0,eb.jsx)(eo7,{"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,ez.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eo7.displayName=eo8;let ela={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eli(e){return{...e.claudeCode??{}}}function elo(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 ell(){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 jS()).engines??[];r(e),t(t=>t?elo(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([jj(),jN(),x0()]),o=n.engines??[];t(elo(eli(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 jk({claudeCode:e});t(eli(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)(Gw,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(bi,{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:ela[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,ez.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)(eoT,{}),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)(ele,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(elt,{value:"adapter",children:[(0,eb.jsx)(eln,{children:"适配器"}),(0,eb.jsxs)(elr,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"适配器命令"}),(0,eb.jsx)(eA,{value:e.adapterCommand??"",onChange:e=>x({adapterCommand:e.currentTarget.value}),placeholder:"node"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动使用 node 运行适配器。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"适配器入口 (…/@zed-industries/claude-code-acp/dist/index.js)"}),(0,eb.jsx)(eA,{value:v,onChange:e=>{let t=e.currentTarget.value;x({adapterArgs:t?[t]:[]})},placeholder:"…/@zed-industries/claude-code-acp/dist/index.js"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动发现(随运行时安装或环境变量 VANTALOOM_CC_ADAPTER)。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(eA,{value:e.gitBashPath??"",onChange:e=>x({gitBashPath:e.currentTarget.value}),placeholder:"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Windows 专用,留空自动发现。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(eA,{value:e.reclaudeExecutable??"",onChange:e=>x({reclaudeExecutable:e.currentTarget.value}),placeholder:"reclaude"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"reclaude 可执行文件(或 node shim)路径;自动发现到 reclaude 时会自动填入, 会通过内置 shim 启动。留空则自动发现。"})]})]})]}),(0,eb.jsxs)(elt,{value:"auth",children:[(0,eb.jsx)(eln,{children:"认证"}),(0,eb.jsxs)(elr,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.apiKey??"",onChange:e=>x({apiKey:e.currentTarget.value}),placeholder:"claude-code 引擎用;留空可用 claude /login"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"claude-code 引擎用;留空可使用 claude /login 登录。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",value:e.oauthToken??"",onChange:e=>x({oauthToken:e.currentTarget.value}),placeholder:"留空使用其它认证方式"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"可选的 OAuth Token,作为 API Key 之外的认证方式。"})]})]})]}),(0,eb.jsxs)(elt,{value:"summary",children:[(0,eb.jsx)(eln,{children:"摘要模型"}),(0,eb.jsx)(elr,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(els,{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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:f||"无法加载引擎配置"})]})}function els({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.label},e.id))]})]})}let elc=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eaT,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(UM,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eO,{})}],eld=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(cl,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(cc,{})}];function elu(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=Qp();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:elc.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),Qg({mode:e})},className:(0,ez.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,ez.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:eld.map(e=>{let t=n===e.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var t;r(t=e.id),Qg({agentSide:t})},className:(0,ez.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 elf(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function elh(){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 jk({memory:e});t(elf(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jj();t(elf(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)(Gw,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(bt,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(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)(QT,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(bt,{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)(QY,{scopes:["global"]})]})]}):(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载记忆配置"})]})}let elm=(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"}]]),elp=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function elg(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 elx(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await x0();t(e.routes.map(elg))}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 x2({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>elg(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 x5(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 x0();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):[elg(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{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)(elb,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function elv({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)(pt,{className:"size-3.5 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3.5"})})}function elb({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 x1({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=elp.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)(HZ,{className:"size-4"}),"编辑"]})]})}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-3","data-tour":"model-route-form",children:[(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_11rem]",children:[(0,eb.jsx)(eA,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gG,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:elp.map(e=>(0,eb.jsx)(xI,{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)(eA,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",className:"pr-8",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(elv,{value:e.endpointUrl,title:"复制端点 URL"})]}),(0,eb.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(eA,{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)(elv,{value:e.apiKey,title:"复制 API Key"})]})]}),(0,eb.jsx)(QR,{}),(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)(pe,{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)(elm,{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,ez.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)(xQ,{checked:n,onCheckedChange:n=>{var r;return r=t.id,void c({selectedModelIds:!0===n?[...e.selectedModelIds,r]:e.selectedModelIds.filter(e=>e!==r)})}}),(0,eb.jsx)("span",{className:"truncate",children:t.displayName||t.id})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(eA,{type:"number",className:"h-6 w-16 px-1.5 text-center text-xs tabular-nums",value:t.contextLength||200,min:1,max:1e4,onChange:n=>{var r,a;return r=t.id,a=Number.parseInt(n.currentTarget.value,10)||0,void c({models:e.models.map(e=>e.id===r?{...e,contextLength:a>0?a:void 0}:e)})}}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"k"})]})]},t.id)})}):(0,eb.jsx)("div",{className:"rounded-md border border-dashed px-3 py-4 text-sm text-muted-foreground",children:"填写端点和密钥后会自动拉取模型。"})]}),e.error?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"模型路由错误"}),(0,eb.jsx)(Q4,{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)(bb,{className:"size-4"}),"删除"]}),(0,eb.jsx)(eI.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function ely(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function elw(){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 jk({skills:e});t(ely(n)),r(await QV()),u(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{l(!1)}}}if(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jj(),QV()]);t(ely(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{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)(Gw,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(bt,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(eoE,{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)(Bk,{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)(fP.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)(QT,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(eA,{value:f,onChange:e=>h(e.currentTarget.value),placeholder:"my-source",className:"h-9"})]}),(0,eb.jsxs)("div",{className:"grid min-w-[10rem] flex-[2] gap-1",children:[(0,eb.jsx)(QT,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(eA,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(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)(QQ,{})]})]})}async function elj(){return elN("/api/local/subagent-config")}async function elk(e){return elN("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function elN(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)(VT,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uV,{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)(uB,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function elM(){let[e,t]=ew.useState(null),{models:n,loading:r}=x6(),[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 elk({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 elj();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)(Gw,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(elE,{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)(elP,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:s||"无法加载子代理配置"})]})}function elE({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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(elO,{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)(QT,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(bt,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{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)(wc,{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 elP({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)(uO,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(be,{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 elO({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))]})]})}function elI(){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 jk({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jj();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)(Gw,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{children:s})]}):null,(0,eb.jsx)(wc,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elz({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)(eoz,{}):"subagent-config"===e?(0,eb.jsx)(elM,{}):"cc-engine-config"===e?(0,eb.jsx)(ell,{}):"system-prompt"===e?(0,eb.jsx)(elI,{}):"skills"===e?(0,eb.jsx)(elw,{}):"memory"===e?(0,eb.jsx)(elh,{}):"layout"===e?(0,eb.jsx)(elu,{}):(0,eb.jsx)(elx,{})})})}let elA=(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 elT(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 elR(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 elD(){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(elT(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 elR(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(elT(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)(bv,{className:(0,ez.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)(elA,{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 el_=(0,ek.default)("gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]),elL=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),el$=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elF(){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)(eaV,{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)(bv,{}),"刷新"]})]}),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)(el_,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"兑换码充值"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"输入兑换码,金额将立即计入账户余额。"}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eA,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(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,ez.cn)("text-xs","ok"===w.kind?"text-primary":"text-destructive"),children:w.text}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(elL,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"用量趋势"})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)(gG,{value:c,onValueChange:d,children:[(0,eb.jsx)(xM,{size:"sm",className:"w-44",children:(0,eb.jsx)(gJ,{placeholder:"全部模型"})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gG,{value:l,onValueChange:s,children:[(0,eb.jsx)(xM,{size:"sm",className:"w-32",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el$.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(elB,{label:"花费",value:e2(N.costMicro,4)}),(0,eb.jsx)(elB,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(elB,{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)(CO,{width:"100%",height:"100%",children:(0,eb.jsxs)(Zx,{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)(ZJ,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(Ja,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Jp,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(B3,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(Zu,{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)(eaV,{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 elB({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 elV=(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"}]]),elH=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elU=Object.fromEntries(elH.map(e=>[e.value,e.label])),elq={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elW(){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)(eA,{value:t,onChange:e=>n(e.target.value),maxLength:120,placeholder:"简要描述问题"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"类型"}),(0,eb.jsxs)(gG,{value:r,onValueChange:a,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:elH.map(e=>(0,eb.jsx)(xI,{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)(wc,{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,ez.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)(elV,{}),"添加图片"]}),(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)(fP.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,ez.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)(er9,{}),"提交反馈"]})})]}),(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=elq[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)(Bk,{variant:"outline",children:elU[e.type]??e.type}),(0,eb.jsx)(Bk,{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)(elG,{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)(dD,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fI,{className:"max-w-3xl",children:y?(0,eb.jsx)(elX,{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)(jD,{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 elK(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 elG({issueId:e,imageId:t}){let n=elK(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 elX({issueId:e,imageId:t,className:n}){let r=elK(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 elY={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},elZ={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elJ(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 elQ(){let e=elJ("/api/local/machines/fleet",elY),{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)(enb,{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 el0=[{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 el1(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 el2(){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 jk({network:e});t(el1(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 jj();t(el1(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载网络设置"})]});let f=el0.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)(Gw,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(bt,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(hB,{}),(0,eb.jsx)(Q5,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(Q4,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(QR,{}),(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)(QT,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(bt,{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)(QT,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gG,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el0.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(eA,{value:e.customProxyURL??"",onChange:e=>d({customProxyURL:e.currentTarget.value}),placeholder:"http://127.0.0.1:7890",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅支持 http / https 代理。若填写包含账号密码(user:pass),日志中会被脱敏处理。"}),h&&h!==e.customProxyURL?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["脱敏预览:",h]}):null]})]}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"重试与降级"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请求因网络抖动(连接重置 / 网关 5xx)失败时的自动恢复策略。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(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)(QT,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(bt,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function el5(){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)(el2,{})})})]})}let el4=[{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。"}],el3=[{value:"bing",label:"Bing(默认,较稳定)"},{value:"duckduckgo",label:"DuckDuckGo"}],el6=[{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 el8(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 el7(){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 jk({search:e});t(el8(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 jj();t(el8(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载搜索设置"})]});let f=el4.find(t=>t.value===(e.provider??"")),h=el6.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)(Gw,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用联网搜索工具"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为智能体提供 联网搜索 + 网页阅读 能力(vantaloom_search),无需启动浏览器。即使不配置任何 Key,也能用下方的搜索引擎兜底 + Jina 阅读开箱即用。"})]}),(0,eb.jsx)(bt,{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)(QT,{className:"text-sm",children:"搜索渠道"}),(0,eb.jsxs)(gG,{value:e.provider?e.provider:"none",onValueChange:e=>d({provider:"none"===e?"":e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el4.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"自定义接口地址(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"启用搜索引擎兜底"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,未配置 AI 渠道时将无法搜索。建议保持开启。"})]}),(0,eb.jsx)(bt,{checked:e.enableEngineFallback,onCheckedChange:e=>d({enableEngineFallback:e})})]}),e.enableEngineFallback?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"兜底搜索引擎"}),(0,eb.jsxs)(gG,{value:e.engine??"bing",onValueChange:e=>d({engine:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el3.map(e=>(0,eb.jsx)(xI,{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)(QT,{className:"text-sm",children:"默认阅读引擎"}),(0,eb.jsxs)(gG,{value:e.defaultReader??"auto",onValueChange:e=>d({defaultReader:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el6.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Jina Reader API Key(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"Firecrawl API Key"}),(0,eb.jsx)(eA,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"GitHub Token(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"默认返回结果数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.maxResults||8," 条"]})]}),(0,eb.jsx)(eoE,{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 el9(){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)(el7,{})})})]})}let ese="local",est=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function esn(){let{machines:e}=xD(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:ese,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:ese,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(ese);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??ese)},[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)(mN,{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)(mA,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mT,{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,ez.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(esr,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function esr({machine:e}){var t;let n=(t=e?.id??ese)===ese?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 G3(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?esa: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)(VH,{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)(bv,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(esi,{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 esa={id:"browser",name:"Vantaloom 浏览器",installed:!1,enabled:!1,running:!1,variant:"cloakbrowser",version:"",available:["cloakbrowser","chrome-for-testing"]};function esi({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 Xe(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await G3(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)(Bk,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bk,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bk,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bk,{variant:"outline",children:"未安装"}),v=est.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)(UI,{})}),(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,ez.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,est.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)(VH,{className:"size-3.5"}):t.running?(0,eb.jsx)(jZ,{className:"size-3.5"}):(0,eb.jsx)(VD,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>G7(e),!0),children:["update"===i?(0,eb.jsx)(VH,{className:"size-3.5"}):(0,eb.jsx)(bv,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>G9(e)),children:["uninstall"===i?(0,eb.jsx)(VH,{className:"size-3.5"}):(0,eb.jsx)(bb,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>G8(e,c),!0),children:[u?(0,eb.jsx)(VH,{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)(bt,{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 eso=(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 esl(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 ess({status:e}){switch(e){case"active":return(0,eb.jsx)(Bk,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bk,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bk,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bk,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bk,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bk,{variant:"outline",children:"等待中"})}}let esc=["complete","error","canceled"];function esd({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,ez.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,ez.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 esu({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?"":`${esl(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=esc.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)(ess,{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)(VH,{className:"size-3.5"}),f&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>m8(e.id,"pause")),children:(0,eb.jsx)(eso,{className:"size-3.5"})}),h&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>m8(e.id,"resume")),children:(0,eb.jsx)(VD,{className:"size-3.5"})}),m&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>m8(e.id,"retry")),children:(0,eb.jsx)(bv,{className:"size-3.5"})}),p&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>m8(e.id,"cancel")),children:(0,eb.jsx)(fP.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(()=>m8(e.id,"remove")),children:(0,eb.jsx)(bb,{className:"size-3.5"})})]})]}),(0,eb.jsx)(esd,{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=esl(n),r<0?a:`${a} / ${esl(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 esf(){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 m4({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof m5)return void r("unavailable")}try{await m3(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof m5)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)(VH,{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)(bv,{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)(esu,{download:e},e.id))})}function esh({label:e,description:t,value:n,min:r,max:a,onChange:i,disabled:o}){return(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:e}),t&&(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:t}),(0,eb.jsx)(eA,{type:"number",inputMode:"numeric",min:r,max:a,value:Number.isFinite(n)?n:0,disabled:o,onChange:e=>{let t=Number(e.target.value);if(Number.isNaN(t))return;let n=t;void 0!==r&&(n=Math.max(r,n)),void 0!==a&&(n=Math.min(a,n)),i(n)},className:"max-w-[12rem]"})]})}function esm(){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 m7({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof m5?"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 m9(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)(VH,{className:"size-4"}),"正在加载下载设置…"]}):"unavailable"!==n&&"error"!==n&&e?(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"下载目录"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载文件的默认保存位置。"}),(0,eb.jsx)(eA,{type:"text",value:e.downloadDir,disabled:a,placeholder:"例如 D:\\\\Downloads",onChange:e=>h("downloadDir",e.target.value)})]}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(esh,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(esh,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(esh,{label:"失败重试次数",description:"任务失败后的自动重试上限。",value:e.maxRetries,min:0,max:20,disabled:a,onChange:e=>h("maxRetries",e)})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"代理"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载使用的代理地址,留空则不使用代理。"}),(0,eb.jsx)(eA,{type:"text",value:e.proxy,disabled:a,placeholder:"例如 http://127.0.0.1:7890(留空=不使用)",onChange:e=>h("proxy",e.target.value)})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"校验文件哈希"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"下载完成后校验文件哈希以确保完整性。"})]}),(0,eb.jsx)(bt,{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)(VH,{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)(bv,{className:"size-3.5"}),"重试"]})})]})}function esp(){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)(bi,{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)(esf,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(esm,{})]})]})})})}let esg=["light","dark","jelly"],esx={light:{label:"Light",icon:eaF,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eaD,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 esv(){let{resolvedTheme:e,setTheme:t}=(0,hV.useTheme)(),[n,r]=ew.useState(ea1.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(ea1.appearanceThemeStorageKey)??ea1.defaultAppearanceTheme;r(e),(0,ea1.applyAppearanceTheme)({theme:e})},[]);let a=n===ea1.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=esg.indexOf(a),o=esg[(i+1)%esg.length]??"light",{icon:l,label:s,className:c}=esx[a];function d(e){r(e),window.localStorage.setItem(ea1.appearanceThemeStorageKey,e),(0,ea1.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,ez.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${eek.theme}: ${s}`,title:`${eek.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(ea1.jellyAppearanceTheme);return}d(ea1.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let esb=(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 esy=[{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}],esw=[{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}],esj=[{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"}],esk=[["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","失败"]],esN={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,ez.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?eew({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeY,{label:e,value:t,minSize:n})})}function esC(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let esM={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]}]},esE=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uV,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("运行中","运行队列"),render:e=>esS(e.title,"07",44,eex)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("排队","调度器"),render:e=>esS(e.title,"04",44,eev)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(en9,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("待确认","确认队列"),render:e=>esS(e.title,"03",44,eeb)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(G5,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("Worker","Agent worker"),render:e=>esS(e.title,"14",44,eey)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(uL,{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)(eej,{title:e.title}),(0,eb.jsx)(enk,{items:esy})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(G5,{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)(eej,{title:e.title}),(0,eb.jsx)(enS,{workers:esw})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(ee0,{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)(eej,{title:e.title}),(0,eb.jsx)(enj,{items:esk})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(etW,{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)(eej,{title:e.title}),(0,eb.jsx)(enw,{items:esj})]})}],esP=[{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 esO(e=esM){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,eex)},{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,eev)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(ee3,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("平均延迟","网络遥测"),render:t=>esS(t.title,e.metrics.latency,44,eeb)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(etW,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("事件","事件流"),render:t=>esS(t.title,String(e.metrics.events),44,eey)},{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:eew({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(eej,{title:t.title}),(0,eb.jsx)(enP,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(esb,{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)(eej,{title:t.title}),(0,eb.jsx)(enT,{config:esN,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(eed,{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)(eej,{title:t.title}),(0,eb.jsx)(enA,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(etW,{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)(eej,{title:t.title}),(0,eb.jsx)(enE,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(G5,{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)(eej,{title:t.title}),(0,eb.jsx)(enR,{services:e.serviceHealth})]})}]}esO();let esI=[{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}],esz={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 esA({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eeW,{boardId:"runtime-operations",definitions:esE,initialLayouts:esP,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esT({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elJ("/api/local/machines/telemetry",elZ),a=ew.useMemo(()=>esO(r),[r]);return(0,eb.jsx)(eeW,{boardId:"telemetry",definitions:a,initialLayouts:esI,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esR({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,ez.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 esD(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function es_(e){return"u"<typeof document?null:document.querySelector(e)}function esL(){return null!=es_('[role="menu"]')}function es$(){return null!=es_('[data-tour="init-wizard"]')}function esF(){let e=es_('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=esz){esC("机器","机器组"),esC("在线","机器心跳"),esC("Runtime","Agent runtime"),esC("Token","机器注册"),esC("机器组","机器组"),esC("拓扑图","网络拓扑"),esC("直连","网络拓扑"),esC("P2P","网络拓扑"),esC("Relay","网络拓扑"),esC("中断","网络拓扑"),esC("延迟","网络遥测"),esC("候选路径","网络候选路径")}(),esC("日志与审计","审计事件"),esC("筛选","审计筛选"),esC("拒绝事件","审计事件"),esC("事件趋势","审计事件");var esB=e.i(64990);function esV(){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 sA(y,w);t||(p(r),e=window.setTimeout(n,!function e(t){return t.some(t=>t.running||e(t.children??[]))}(r)?6e3:2e3))};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[y,w,a]);let[j,k]=ew.useState(),[N,S]=ew.useState(!1),[C,M]=ew.useState(!1),[E,P]=ew.useState([]),[O,I]=ew.useState([]),[z,A]=ew.useState({}),[T,R]=ew.useState(),[D,_]=ew.useState(uY),[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,_(uY),$([]),i("new-canvas");try{let e=await eer({title:"新画布",nodes:uY,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 eei(e,t);let n=await een(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 en0(e)).canvasId}catch{}if(!n)try{n=(await eer({title:"工程画布",nodes:uY,edges:[]})).canvas.id,await en2(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 en8(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(()=>{eea(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,esB.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:esD(()=>e.goHome()),target:()=>es_('[role="menu"]')??es_('[data-tour="account-button"]'),gate:esL,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:esD(()=>e.select("preferences-model-routes")),target:()=>es_('[data-tour="model-route-form"]')??es_('[data-tour="add-model-route"]'),gate:()=>null!=es_('[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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:es$,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:()=>!es$()||esF()>=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:()=>!es$()||esF()>=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:()=>!es$()||esF()>=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:()=>!es$(),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!=es_('[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!=es_('[placeholder="搜索组件..."]')||null!=es_('[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!=es_('[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!=es_('[placeholder="搜索组件..."]')||null!=es_('[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!=es_('[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)(eiJ,{navItems:ei1,contents:ei2,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 对话":eek.product,trailing:eg&&s?(0,eb.jsx)(jL,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(esv,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,ez.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)(ea5,{navItems:ei1,contents:ei2,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,ez.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,ez.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)(esA,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"telemetry"===a?(0,eb.jsx)(esT,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"preferences-model-routes"===a?(0,eb.jsx)(elz,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elz,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elz,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elz,{section:"cc-engine-config"}):"preferences-system-prompt"===a?(0,eb.jsx)(elz,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elz,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elz,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elz,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(esn,{}):"network-topology"===a?(0,eb.jsx)(elQ,{}):"network-settings"===a?(0,eb.jsx)(el5,{}):"search-settings"===a?(0,eb.jsx)(el9,{}):"system-downloads"===a?(0,eb.jsx)(esp,{}):"preferences"===a?(0,eb.jsx)(elz,{}):"check-update"===a?(0,eb.jsx)(elD,{}):"balance-usage"===a?(0,eb.jsx)(elF,{}):"feedback"===a?(0,eb.jsx)(elW,{}):"account"===a?(0,eb.jsx)(ei8,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(erl,{onCreated:e=>{er(e)},onCancel:()=>i("home")}):"project-overview"===a&&W?(0,eb.jsx)(eay,{projectId:W,onOpenSettings:ei}):"project-settings"===a&&W?(0,eb.jsx)(erb,{projectId:W}):"kanban"===a&&W?(0,eb.jsx)(eah,{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)(QP,{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)(esU,{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)(esH,{onNewConversation:Q,onStartTour:ef}):(0,eb.jsx)(enq,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):(0,eb.jsx)(enJ,{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,ez.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(Q7,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{J(e,t)}})}):null,(0,eb.jsx)(eee,{open:N,onOpenChange:S,onEnterConversation:(e,t)=>{J(e,t)}}),(0,eb.jsx)(eaz,{hidden:!!j||(eg?o:C),items:E,trashItems:O,draggingId:T,onDraggingChange:R,onItemsChange:P,onTrashItemsChange:I,onTrashClipboardItemsChange:A,trashClipboardItems:z})]})]})}function esH({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)(esR,{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 esU({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)(ea9,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function esq(){let{ready:e,user:t,logout:n}=ti();return e?t?(0,eb.jsx)(esV,{}):(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 esW(){return(0,eb.jsx)(ta,{children:(0,eb.jsx)(esq,{})})}e.s(["default",()=>esW],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,ez.cn)("size-full border-0 bg-background",n)})}function GA({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 GT({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)(Gg,{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:[GC(e.size)&&(0,eb.jsx)(Bk,{variant:"outline",children:GC(e.size)}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"outline",onClick:n,children:t.renderAnyway})]})]})})}function GR({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 GD({file:e,value:t,labels:n,renderPreview:r,className:a}){let i=GN(e),o=e.src?e.src:t&&"svg"===GN(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,ez.cn)("size-full",a),children:l}):"html"===i||"richtext"===i?(0,eb.jsx)(Gz,{title:e.name,value:e.previewContent??t,className:a}):"markdown"===i?(0,eb.jsx)("div",{"data-slot":"file-tab-markdown-preview",className:(0,ez.cn)("size-full overflow-auto bg-background",a),children:(0,eb.jsx)(GI,{value:t})}):"svg"===i&&o?(0,eb.jsx)("div",{"data-slot":"file-tab-svg-preview",className:(0,ez.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,ez.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,ez.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)(GR,{labels:n})}function G_({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)(UT,{className:"size-4"}):(0,eb.jsx)(uA,{className:"size-4"})}:void 0,l?{key:"mode",label:"review"===r?t.edit:t.review,onClick:f,icon:"review"===r?(0,eb.jsx)(Gx,{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)(Gw,{className:"size-4"})}:void 0,c?{key:"history",label:t.history,onClick:m,icon:(0,eb.jsx)(Gv,{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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}function GL({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(()=>({...Gj,...v}),[v]),[E,P]=ew.useState(n??e.content??""),[O,I]=ew.useState(i),[z,A]=ew.useState(s),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),[L,$]=ew.useState(!1),F=ew.useRef(null),B=t??E,V=a??O,H=(N=l??z,(S=GM(e)).includes(N)?N:S[0]),U=GN(e),q=GM(e).length>1,W=!e.readOnly&&["text","code","html","markdown","richtext","svg"].includes(GN(e)),K=!!u&&W&&"code"===H&&(d||L),G="review"===V||!0===e.readOnly,X="binary"===(C=GN(e))||"image"!==C&&"video"!==C&&!!(e.size&&e.size>h&&!e.content),Y=(e.path??e.name).split(/[\\/]+/).filter(Boolean),Z=GC(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,ez.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,ez.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)(Gb,{className:"size-3.5"}):"video"===U?(0,eb.jsx)(Gy,{className:"size-3.5"}):"binary"===U?(0,eb.jsx)(Gg,{className:"size-3.5"}):(0,eb.jsx)(bc,{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,ez.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)(Bk,{variant:"outline",children:Z}),W&&"code"===H&&(G?(0,eb.jsxs)(Bk,{variant:"secondary",children:[(0,eb.jsx)(lq,{className:"size-3"}),M.review]}):(0,eb.jsxs)(Bk,{variant:"outline",children:[(0,eb.jsx)(Gx,{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)(GT,{file:e,labels:M,onApprove:()=>R(!0)}):"preview"===H?(0,eb.jsx)(GD,{file:e,value:B,labels:M,renderPreview:g,className:w}):"hex"===H?(0,eb.jsx)(GA,{file:e,value:B,labels:M}):(0,eb.jsx)(GO,{file:e,value:B,readOnly:G,onValueChange:function(e){void 0===t&&P(e),r?.(e)},wrapLines:p,className:y})}),(0,eb.jsx)(G_,{open:D,labels:M,currentView:H,currentMode:V,saving:L,modified:d,canSwitchView:q,canSwitchMode:W&&"code"===H,canSave:K,canOpenHistory:!!(x&&e.path),onOpenChange:_,onToggleView:function(){var e;e="code"===H?"preview":"code",void 0===l&&A(e),c?.(e)},onToggleMode:function(){var e;e="review"===V?"edit":"review",void 0===a&&I(e),o?.(e)},onSave:J,onHistory:()=>{_(!1),x?.(e)}})]})}function G$(e,t){return e[Math.max(0,t-1)]?.id??e[0]?.id}function GF(e){return"string"==typeof e||"number"==typeof e?String(e):void 0}function GB(e,t,n){let r=[...e],a=r[t],i=r[n];return a&&i&&(r[t]=i,r[n]=a),r}function GV({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),[z,A]=ew.useState(),[T,R]=ew.useState(void 0),D=ew.useRef(void 0),[_,L]=ew.useState(void 0),[$,F]=ew.useState(!1),B=ew.useRef(void 0),V=ew.useRef(void 0),H=ew.useRef(!1),[U,q]=ew.useState(!1),[W,K]=ew.useState(!1),[G,X]=ew.useState(),Y=e??E,Z=Y.find(e=>!e.disabled),[J,Q]=ew.useState(r??Z?.id),ee=n??J,et=Y.find(e=>e.id===ee&&!e.disabled)??Z;ew.useEffect(()=>{!et&&Z&&void 0===n&&Q(Z.id)},[et,n,Z]);let en=ew.useCallback(t=>{void 0===e&&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(GB(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(GB(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=G$(i,r);void 0===n&&Q(e),e&&a?.(e)}return!0}(r,e)){A(void 0),er(void 0),ei(void 0,!1);return}let l=B.current;l&&!(l.length===Y.length&&l.every((e,t)=>e.id===Y[t]?.id))&&(en(l),s?.(l))}A(void 0),er(void 0),ei(void 0,!1)}});let ef=et&&(k?.(et)??et.content??(0,eb.jsx)("div",{className:"grid min-h-44 place-items-center bg-muted/30 p-6 text-center text-muted-foreground",children:et.title})),eh=T?.dragging&&_?_:Y,em=T?.dragging?Y.find(e=>e.id===T.tabId):void 0,ep=T?.dragging&&em&&$?(0,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,ez.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)(pn,{})}),(0,eb.jsxs)("div",{ref:I,role:"tablist","aria-label":w,"data-slot":"multi-tab-list",className:(0,ez.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&&z===e.id,s=!r&&!o&&void 0!==i&&i.id!==et?.id&&i.id!==z;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsxs)("div",{onPointerDown:t=>(function(e,t){if(!h||e.disabled||0!==t.button)return;let n=t.currentTarget.getBoundingClientRect();A(e.id),ei(Y,!1),er({tabId:e.id,startX:t.clientX,startY:t.clientY,offsetX:t.clientX-n.left,top:n.top,width:n.width,currentX:t.clientX,currentY:t.clientY,dragging:!1})})(e,t),"data-slot":"multi-tab","data-tab-id":e.id,"data-state":r?"active":"inactive","data-dragging":z===e.id?"true":void 0,"data-modified":e.modified?"true":void 0,className:(0,ez.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":GF(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??(GF(e.title)?`${v}: ${GF(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=G$(r,t);void 0===n&&Q(e),e&&a?.(e)}})(e),className:(0,ez.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)(fP.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)(pr,{})}),u.length>0?(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",className:"w-52",children:u.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(wo,{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)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",className:"w-52",children:f.map((e,t)=>(0,eb.jsxs)(ew.Fragment,{children:[e.separatorBefore&&(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{disabled:e.disabled,onSelect:e.onSelect,children:[e.icon,e.label,e.shortcut&&(0,eb.jsx)(wo,{children:e.shortcut})]})]},t))})]})]})]}),ep,N&&(0,eb.jsx)("div",{"data-slot":"multi-tab-content",className:(0,ez.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 GH=(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"}]]),GU=(0,ek.default)("repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);function Gq({status:e}){return"done"===e?(0,eb.jsx)(pt,{className:"size-3.5 shrink-0 text-emerald-500"}):"in_progress"===e?(0,eb.jsx)(VD,{className:"size-3.5 shrink-0 text-amber-500"}):"blocked"===e||"skipped"===e?(0,eb.jsx)(GH,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(yF,{className:"size-3.5 shrink-0 text-muted-foreground/50"})}function GW({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 GK={main:"主",subagent:"子"};function GG({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,ez.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)(Gq,{status:e.status}),(0,eb.jsx)("span",{className:(0,ez.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:[GK[i.executor]??i.executor,i.subagentType?`:${i.subagentType}`:""]}):null,a&&r.total>0?(0,eb.jsx)(GW,{done:r.done,total:r.total}):null]}),e.children?.map(e=>(0,eb.jsx)(GG,{node:e,depth:t+1,activeId:n},e.id))]})}function GX({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState(""),[o,l]=ew.useState(!1),[s,c]=ew.useState(!1),[d,u]=ew.useState(!1);ew.useEffect(()=>{if(l(!1),!e)return;let n=!0;return(async()=>{try{let r=await sI(e,t);n&&l(r.conversation.loopMode??!1)}catch{}})(),()=>{n=!1}},[e,t]);let f=ew.useCallback(async n=>{if(e){c(!0),l(n);try{let r=await ce(e,n,t);l(r.conversation.loopMode??n)}catch{l(!n)}finally{c(!1)}}},[e,t]),h=ew.useCallback(()=>{o?f(!1):u(!0)},[o,f]);ew.useEffect(()=>{if(r(null),i(""),!e)return;let n=!0,a=0,o=async()=>{let o=a+=1,l=await sR(e,t);n&&o===a&&(r(l.planState),void 0!==l.planDoc&&i(l.planDoc))};o();let l=window.setInterval(o,1200);return()=>{n=!1,window.clearInterval(l)}},[e,t]);let m=n?.activePath?.length?n.activePath[n.activePath.length-1]:void 0;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col rounded-[inherit] bg-background",children:[(0,eb.jsxs)(mN,{defaultValue:"doc",className:"flex min-h-0 flex-1 flex-col gap-0",children:[(0,eb.jsxs)("div",{className:"flex shrink-0 items-center justify-between gap-2 border-b px-2 py-1.5",children:[(0,eb.jsxs)(mA,{children:[(0,eb.jsx)(mT,{value:"doc",children:"计划文档"}),(0,eb.jsx)(mT,{value:"tree",children:"执行树"})]}),(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:o?"default":"outline",disabled:!e||s,onClick:h,className:"h-7 shrink-0 gap-1.5 px-2 text-xs",title:o?"循环模式开启中:会话每轮结束后会自动续跑,直到执行树没有剩余可完成的任务。点击关闭。":"开启循环模式:会话每轮结束后自动续跑,持续完成执行树中的剩余任务",children:[(0,eb.jsx)(GU,{className:"size-3.5"}),"循环模式",o?"·开":""]})]}),(0,eb.jsx)(mR,{value:"doc",className:"min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(wK,{className:"h-full w-full min-w-0",children:(0,eb.jsx)("div",{className:"min-w-0 px-4 py-3 text-sm break-words [overflow-wrap:anywhere]",children:a.trim()?(0,eb.jsx)(V9,{content:a}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:"尚无可读计划文档。"})})})}),(0,eb.jsx)(mR,{value:"tree",className:"min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(wK,{className:"h-full w-full min-w-0",children:(0,eb.jsx)("div",{className:"min-w-0 px-2 py-2",children:n?.tree?(0,eb.jsx)(GG,{node:n.tree,depth:0,activeId:m}):(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"计划尚未编译成执行树。"})})})})]}),(0,eb.jsx)(ua,{open:d,onOpenChange:u,children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"开启循环模式?"}),(0,eb.jsx)(uC,{asChild:!0,children:(0,eb.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,eb.jsx)("p",{children:"开启后,每当 agent 完成一轮工作(运行自然结束)时,系统会自动注入「继续」消息, 让它继续完成执行树中剩余未完成的任务——这一切在后端进行,即使你关闭页面也会持续。"}),(0,eb.jsx)("p",{children:"循环只有在以下情况才会停止:执行树中没有剩余的「待完成(待办/进行中)」任务、 你关闭循环模式、达到安全上限(最多自动续跑 25 次)、存在等待外部事件的 hook, 或本轮运行出错/被你中止。无法完成的任务请让 agent 标记为「阻塞」。"})]})})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{onClick:()=>void f(!0),children:"开启"})]})]})})]})}function GY({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,ez.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)(uD,{className:"size-3.5"}),e.split("/").pop()??e]},e))}),(0,eb.jsx)(wK,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-4 py-3 text-sm",children:l.trim()?(0,eb.jsx)(V9,{content:l}):(0,eb.jsx)("p",{className:"text-muted-foreground/70",children:i?"(空文档)":"选择左上方的规范文档查看。"})})})]})}function GZ({url:e}){let[t,n]=ew.useState(!1),r=ew.useCallback(async()=>{try{await navigator.clipboard.writeText(e),n(!0),window.setTimeout(()=>n(!1),1500)}catch{}},[e]);return(0,eb.jsxs)("button",{type:"button",onClick:r,title:e,className:"flex min-w-0 items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",children:[t?(0,eb.jsx)(pt,{className:"size-3 shrink-0 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3 shrink-0"}),(0,eb.jsx)("span",{className:"truncate font-mono",children:e})]})}function GJ({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0),[a,i]=ew.useState(void 0),o=ew.useCallback(async()=>{if(!e)return;let n=await sG(e,t);return r(n),n},[e,t]);ew.useEffect(()=>{if(!e)return void r(void 0);let n=!0,a=async()=>{let a=await sG(e,t);n&&r(a)};a();let i=window.setInterval(a,2e3);return()=>{n=!1,window.clearInterval(i)}},[e,t]);let l=ew.useCallback(async n=>{if(e){i(n);try{let a=await sY(e,n,t);r(e=>(e??[]).map(e=>e.id===n?a:e))}catch{await o()}finally{i(void 0)}}},[e,t,o]),s=ew.useCallback(async n=>{if(e){i(n);try{await sX(e,n,t),r(e=>(e??[]).filter(e=>e.id!==n))}catch{await o()}finally{i(void 0)}}},[e,t,o]),c=n??[],d=c.filter(e=>e.enabled&&!e.disabled).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 justify-between border-b px-3 py-2",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"Hook"}),(0,eb.jsxs)("span",{className:"text-[11px] tabular-nums text-muted-foreground",children:[d,"/",c.length," 启用"]})]}),(0,eb.jsx)(wK,{className:"min-h-0 flex-1",children:(0,eb.jsx)("div",{className:"px-2 py-2",children:0===c.length?(0,eb.jsx)("p",{className:"px-2 py-1 text-sm text-muted-foreground/70",children:"暂无 hook"}):(0,eb.jsx)("ul",{className:"flex flex-col gap-1.5",children:c.map(e=>{let t=e.enabled&&!e.disabled,n="webhook"===e.trigger.source?e.fireUrl:void 0;return(0,eb.jsxs)("li",{className:(0,ez.cn)("flex flex-col gap-1 rounded-md border px-2.5 py-2",!t&&"opacity-60"),children:[(0,eb.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,eb.jsx)("span",{className:"block truncate text-[13px] font-medium leading-5 text-foreground",title:e.name||e.id,children:e.name||e.id}),(0,eb.jsx)("span",{className:"block truncate text-[11px] text-muted-foreground/70",children:e.id})]}),(0,eb.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5",children:[(0,eb.jsx)(bt,{checked:t,disabled:a===e.id,onCheckedChange:()=>void l(e.id),"aria-label":"启用/停用 hook"}),(0,eb.jsx)("button",{type:"button",disabled:a===e.id,onClick:()=>void s(e.id),"aria-label":"删除 hook",title:"删除 hook",className:"grid size-6 place-items-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-destructive disabled:opacity-50 [&_svg]:size-3.5",children:(0,eb.jsx)(bb,{})})]})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[12px] leading-5",children:[(0,eb.jsx)("span",{className:"text-foreground",children:function(e){switch(e.source){case"timer":if(e.cron)return`⏱ cron: ${e.cron}`;if(e.intervalSec&&e.intervalSec>0)return`⏱ 每 ${e.intervalSec}s`;if(e.delaySec&&e.delaySec>0)return`⏱ ${e.delaySec}s 后`;return"⏱ 定时";case"process_exit":{let t=e.terminalSessionId||e.backgroundCmdId?`: ${e.terminalSessionId||e.backgroundCmdId}`:"";return`⛔ 进程退出${t}`}case"webhook":return"🔌 webhook";case"file":return`📁 文件变化${e.path?`: ${e.path}`:""}`;case"shell_poll":return`🐚 shell${e.command?`: ${e.command}`:""}`;case"lifecycle":return`🔁 生命周期${e.event?`: ${e.event}`:""}`;default:return e.source}}(e.trigger)}),(0,eb.jsx)("span",{className:"text-muted-foreground/50",children:"→"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:function(e){switch(e.type){case"resume_conversation":return"唤醒本会话";case"run_command":return`运行命令${e.command?`: ${e.command}`:""}`;case"start_conversation":return"新建会话";default:return e.type}}(e.action)})]}),(0,eb.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 text-[11px] text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"tabular-nums",children:["已触发 ",e.fireCount," 次"]}),(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsx)("span",{children:function(e){if(!e)return"从未触发";let t=Date.parse(e);if(!Number.isFinite(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));return n<60?"刚刚触发":n<3600?`${Math.floor(n/60)} 分钟前触发`:n<86400?`${Math.floor(n/3600)} 小时前触发`:new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}(e.lastFiredAt)}),e.once?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsx)("span",{children:"仅一次"})]}):e.maxFires&&e.maxFires>0?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("span",{className:"text-muted-foreground/40",children:"·"}),(0,eb.jsxs)("span",{children:["上限 ",e.maxFires]})]}):null]}),n?(0,eb.jsx)("div",{className:"mt-0.5",children:(0,eb.jsx)(GZ,{url:n})}):null]},e.id)})})})})]})}function GQ({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}=x6(),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 sz(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 cn(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)(u$,{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)(HW,{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)(u$,{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 G0=(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"}]]),G1=(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"}]]),G2=(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"}]]),G5=(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 G4(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}${t}`):(0,eT.localAPIURL)(t)}async function G3(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(G4(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 G6(e,t,n){let r=await fetch(G4(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 G8(e,t){return G6(e,"/v1/extensions/browser/install",{variant:t})}async function G7(e,t){return G6(e,"/v1/extensions/browser/update",t?{variant:t}:{})}async function G9(e){return G6(e,"/v1/extensions/browser/uninstall")}async function Xe(e,t){return G6(e,"/v1/extensions/browser/enable",{enabled:t})}async function Xt(e,t){let{timeoutMs:n=6e3}=t??{},r=new AbortController,a=n>0?setTimeout(()=>r.abort(),n):void 0;try{let t=await fetch(G4(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 Xn(e,t){return{monitoring:!!(await G6(e,"/v1/browser/monitor",{enabled:t})).monitoring}}let Xr={drafting:"撰写计划",awaiting_approval:"等待批准",executing:"执行中",compacting:"压缩上下文",done:"已完成"};function Xa(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=Xa(r);t+=e.done,n+=e.total}return{done:t,total:n}}function Xi(e,t){if(e){if(e.id===t)return e;for(let n of e.children??[]){let e=Xi(n,t);if(e)return e}}}function Xo({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 Xl({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=Xi(e.tree,r);n&&"phase"===n.kind&&(t=n)}let r=n[n.length-1];return{phase:t,task:r?Xi(e.tree,r):void 0}}(e),r=e.tree?Xa(e.tree):{done:0,total:0},a=t?Xa(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)(Xs,{icon:(0,eb.jsx)(uL,{}),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??Xr[e.phase]??e.phase??"—"})]}),a&&a.total>0?(0,eb.jsx)(Xo,{done:a.done,total:a.total}):null,n?(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[o?(0,eb.jsx)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):"done"===n.status?(0,eb.jsx)(pt,{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 Xs({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 Xc(){let[e,t]=ew.useState("loading"),[n,r]=ew.useState(!1),a=ew.useCallback(async e=>{try{let n=(await G3(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 Xe(void 0,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await G3(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)(UI,{className:"size-4 shrink-0 text-muted-foreground"}),(0,eb.jsx)("span",{className:"text-muted-foreground",children:"浏览器"}),"running"===e?(0,eb.jsx)(Xd,{online:!0}):"starting"===e?(0,eb.jsx)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):(0,eb.jsx)(Xd,{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)(VD,{className:"size-3"}),"启动"]}):"running"===e?(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground/70",title:"在画布的「浏览器」节点中实时查看 Agent 的浏览器操作",children:"画布查看"}):null})]})}function Xd({online:e}){return(0,eb.jsx)("span",{"aria-hidden":!0,className:(0,ez.cn)("inline-block size-2 shrink-0 rounded-full",e?"bg-emerald-500":"bg-muted-foreground/40")})}function Xu({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(null),[a,i]=ew.useState([]),[o,l]=ew.useState([]),{machines:s}=xD();ew.useEffect(()=>{if(!e)return;let n=!0,a=async()=>{try{let[a,o,s]=await Promise.all([sI(e,t),sA(e,t).catch(()=>[]),sT(e,t).catch(()=>[])]);if(!n)return;r(a),i(o),l(s)}catch{}};a();let o=window.setInterval(a,1200);return()=>{n=!1,window.clearInterval(o)}},[e,t]);let c=ew.useMemo(()=>new Map(s.map(e=>[e.id,e])),[s]),d=e=>"local"===e||c.get(e)?.status==="online",u=e=>"local"===e?c.get("local")?.name??"本地":c.get(e)?.name??e,f=t??n?.conversation.ownerMachineId??"local",h=(n?.conversation.settings?.hosts??[]).filter(Boolean),m=n?.conversation.runUsage,p=n?.conversation.status==="working",g=(m?.cachedInputTokens??0)+(m?.cacheCreationInputTokens??0),{additions:x,deletions:v}=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=0,r=0;for(let a=Math.max(0,t);a<e.length;a+=1){let t=e[a],i=t?.additions??t?.meta?.additions,o=t?.deletions??t?.meta?.deletions;"number"==typeof i&&(n+=i),"number"==typeof o&&(r+=o)}return{additions:n,deletions:r}}(n?.events??[]),b=function(e){let t=-1;for(let n=e.length-1;n>=0;n-=1)if(e[n]?.kind==="user"){t=n;break}let n=new Set;for(let r=Math.max(0,t);r<e.length;r+=1){let t=e[r];if(t?.kind==="subagent"&&Array.isArray(t.subagents))for(let e of t.subagents)e?.id&&n.add(e.id)}return n}(n?.events??[]),y=function e(t,n=0,r=[]){for(let a of t)r.push({node:a,depth:n}),a.children&&a.children.length>0&&e(a.children,n+1,r);return r}(a.filter(e=>b.has(e.id))),w=n?.conversation.planState;return(0,eb.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col overflow-auto rounded-[inherit] bg-background text-sm",children:[(0,eb.jsx)(Xs,{icon:(0,eb.jsx)(uP,{}),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)(Xd,{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)(G5,{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)(Xd,{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)(G1,{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)(Xc,{})]}),(0,eb.jsx)("div",{className:"mx-3 border-t border-border/60"}),w?(0,eb.jsx)(Xl,{state:w}):null,(0,eb.jsx)(Xs,{icon:(0,eb.jsx)(uO,{}),label:"子智能体"}),(0,eb.jsx)("div",{className:"flex max-h-44 flex-col gap-1 overflow-y-auto px-3 pb-2 text-[13px]",children:0===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)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(fP.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(pt,{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)(Xs,{icon:(0,eb.jsx)(uB,{}),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)(G2,{className:"size-3.5 shrink-0 animate-spin text-amber-500"}):n?(0,eb.jsx)(hB,{className:"size-3.5 shrink-0 text-amber-500"}):t?(0,eb.jsx)(fP.XIcon,{className:"size-3.5 shrink-0 text-rose-500"}):(0,eb.jsx)(pt,{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)(Xs,{icon:(0,eb.jsx)(G0,{}),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 Xf({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 Xh({conversationId:e,ownerMachineId:t}){let[n,r]=ew.useState(void 0);ew.useEffect(()=>{if(r(void 0),!e)return;let n=!0,a=0,i=async()=>{let i=a+=1;try{let o=await sz(e,{limit:400},t);if(!n||i!==a)return;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}}(o.events)??[])}catch{}};i();let o=window.setInterval(i,1200);return()=>{n=!1,window.clearInterval(o)}},[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)(Xf,{done:o,total:i})]}),(0,eb.jsx)(wK,{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,ez.cn)("mt-px shrink-0 text-[13px] leading-5",n),"aria-hidden":!0,children:t}),(0,eb.jsx)("span",{className:(0,ez.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 Xm="application/vnd.vantaloom.canvas-node",Xp="application/vnd.vantaloom.canvas-tab",Xg="application/vnd.vantaloom.dashboard-widget",Xx="application/vnd.vantaloom.workspace-card";var Xv=e.i(78737);let Xb=(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"}]]),Xy=(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"}]]),Xw=(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"}]]),Xj=[{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"}],Xk=[{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}],XN={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)(Xy,{className:"size-4"}):"tablet"===e?(0,eb.jsx)(Xw,{className:"size-4"}):(0,eb.jsx)(eO,{className:"size-4"})}function XM({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=Xj,ratios:h=Xk,srcDoc:m,renderPreview:p,showHeader:g=!0,labels:x,className:v,headerClassName:b,previewClassName:y,...w}){let j=ew.useMemo(()=>({...XN,...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,z]=ew.useState(l),[A,T]=ew.useState(d),[R,D]=ew.useState(!1),[_,L]=ew.useState(0),$=ew.useRef(null),F=ew.useId(),[B,V]=function(){let e=ew.useRef(null),[t,n]=ew.useState({width:0,height:0});return ew.useEffect(()=>{let t=e.current;if(!t)return;function r(e){t&&n(e??{width:t.clientWidth,height:t.clientHeight})}r();let a=new ResizeObserver(e=>{let t=e[0];t?r({width:t.contentRect.width,height:t.contentRect.height}):r()});return a.observe(t),()=>a.disconnect()},[]),[e,t]}(),H=e??k,U=XS(f,o??I,f[0]??Xj[0]),q=XS(h,c??A,h[0]??Xk[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,ez.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,ez.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)(Xb,{className:"size-3.5"})}),(0,eb.jsxs)("form",{onSubmit:function(e){let t;e.preventDefault();let n=(t=S.trim())?/^[a-z][a-z\d+\-.]*:\/\//i.test(t)?t:/^(localhost|127\.0\.0\.1|\[::1\])(?::\d+)?(?:\/|$)/i.test(t)?`http://${t}`:`https://${t}`:"";C(n),en(n)},className:"min-w-0 flex-1",children:[(0,eb.jsx)("label",{className:"sr-only",htmlFor:F,children:j.urlLabel}),(0,eb.jsx)(eA,{id:F,value:S,onChange:e=>C(e.target.value),placeholder:j.urlPlaceholder,className:"h-5 rounded-md border bg-background px-2 shadow-none ui-text-kbd",spellCheck:!1})]}),(0,eb.jsx)(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)(Xv.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)(bv,{className:"size-3.5"})})]}),(0,eb.jsx)("div",{ref:B,"data-slot":"browser-tab-viewer-stage",className:(0,ez.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,ez.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&&z(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,ez.cn)("size-4 transition-transform",R&&"rotate-90")})})]})]})}let XE=(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"}]]),XP=(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 XO({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,ez.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)(XE,{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)(XP,{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,ez.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)(XE,{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)(XE,{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)(XE,{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)(VD,{className:"size-3.5"}),"启动浏览器"]})]}):!f&&h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(XE,{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)(XE,{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,ez.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 XI(e,t){return e?(0,eT.localAPIURL)(`/v1/remote/${e}/browser${t}`):(0,eT.localAPIURL)(`/v1/browser${t}`)}async function Xz(e,t){try{await fetch(XI(e,"/input"),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch{}}function XA({active:e=!0,className:t}){let[n,r]=ew.useState(0),a=function(e,t){let{machines:n}=xD(),[r,a]=ew.useState([]);return ew.useEffect(()=>{if(!e)return;let t=!1;async function r(e,t,n){try{let r=(await G3(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(XI(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 Xt(h?.machineId).then(e=>{!t&&e&&f(e.monitoring)}),()=>{t=!0}},[e,m,h?.machineId]);let b=ew.useCallback(e=>{Xn(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=>{Xz(h?.machineId,e)},[h?.machineId]),j=ew.useCallback(async()=>{if(!c){d(!0);try{await Xe(h?.machineId,!0);let e=Date.now()+3e4;for(;Date.now()<e;){await new Promise(e=>setTimeout(e,1500));try{let e=await G3(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)(XO,{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 XT({defaultUrl:e,className:t}){let{machines:n}=xD(),[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 G3(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)(XA,{active:!0,className:t}):(0,eb.jsx)(XM,{className:t,defaultUrl:e})}let XR=[{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"}],XD=Array.from(new Set(XR.flatMap(e=>e.tags))).sort(),X_=[["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"]],XL=[["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 X$({className:e,...t}){return(0,eb.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,ez.cn)("mx-auto flex w-full justify-center",e),...t})}function XF({className:e,...t}){return(0,eb.jsx)("ul",{"data-slot":"pagination-content",className:(0,ez.cn)("flex flex-row items-center gap-1",e),...t})}function XB({...e}){return(0,eb.jsx)("li",{"data-slot":"pagination-item",...e})}function XV({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,ez.cn)((0,eI.buttonVariants)({variant:t?"outline":"ghost",size:n}),e),...r})}function XH({className:e,previousLabel:t="Previous",...n}){return(0,eb.jsxs)(XV,{"aria-label":t,size:"default",className:(0,ez.cn)("gap-1 px-2.5 sm:pl-2",e),...n,children:[(0,eb.jsx)(pn,{}),(0,eb.jsx)("span",{className:"hidden sm:block",children:t})]})}function XU({className:e,nextLabel:t="Next",...n}){return(0,eb.jsxs)(XV,{"aria-label":t,size:"default",className:(0,ez.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)(pr,{})]})}function Xq({className:e,moreLabel:t="More pages",...n}){return(0,eb.jsxs)("span",{"aria-hidden":!0,"data-slot":"pagination-ellipsis",className:(0,ez.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 XW({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function XK(){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)(XY,{zone:e.sourceZone})},{id:"sourceIPs",header:"源 IP",accessorKey:"sourceIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.sourceIPs,variant:"outline"}),copyValue:({row:e})=>e.sourceIPs.join(", ")},{id:"destinationZone",header:"目标区域",accessorKey:"destinationZone",width:112,cell:({row:e})=>(0,eb.jsx)(XY,{zone:e.destinationZone})},{id:"destinationIPs",header:"目标 IP",accessorKey:"destinationIPs",width:250,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.destinationIPs,variant:"outline"}),copyValue:({row:e})=>e.destinationIPs.join(", ")},{id:"tags",header:"标签",accessorKey:"tags",width:220,cell:({row:e})=>(0,eb.jsx)(XX,{items:e.tags,variant:"secondary"}),copyValue:({row:e})=>e.tags.join(", ")},{id:"action",header:"动作",accessorKey:"action",width:96,cell:({row:e})=>(0,eb.jsx)(XZ,{action:e.action})}],[]),d=ew.useMemo(()=>{let t=e.trim().toLowerCase();return XR.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)(XW,{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)(x_,{className:"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,eb.jsx)(eA,{value:e,onChange:e=>t(e.target.value),placeholder:"搜索策略...",className:"pl-8"})]})]}),(0,eb.jsxs)("label",{className:"grid gap-1",children:[(0,eb.jsx)("span",{className:"ui-text-kbd text-muted-foreground",children:"标签"}),(0,eb.jsxs)(gG,{value:n,onValueChange:r,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"全部标签"})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"all",children:"全部标签"}),XD.map(e=>(0,eb.jsx)(xI,{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)(m1,{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)(m2,{value:"allow",children:"允许"}),(0,eb.jsx)(m2,{value:"drop",children:"丢弃"}),(0,eb.jsx)(m2,{value:"deny",children:"拒绝"}),(0,eb.jsx)(m2,{value:"clear",children:"全部"})]})]})]}),(0,eb.jsx)(qz,{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)(XG,{page:f,totalPages:u,onPageChange:function(e){l(Math.min(u,Math.max(1,e)))}})]})}function XG({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)(X$,{className:"mt-3 shrink-0",children:(0,eb.jsxs)(XF,{className:"gap-1 sm:gap-2",children:[(0,eb.jsx)(XB,{children:(0,eb.jsx)(XH,{href:"#",previousLabel:"上一页","aria-disabled":1===e,className:(0,ez.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)(XB,{children:(0,eb.jsx)(XV,{href:"#",size:"icon",onClick:e=>o(e,1),children:"1"})}),a>2?(0,eb.jsx)(XB,{children:(0,eb.jsx)(Xq,{moreLabel:"更多页"})}):null]}):null,r.map(t=>(0,eb.jsx)(XB,{children:(0,eb.jsx)(XV,{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)(XB,{children:(0,eb.jsx)(Xq,{moreLabel:"更多页"})}):null,(0,eb.jsx)(XB,{children:(0,eb.jsx)(XV,{href:"#",size:"icon",onClick:e=>o(e,t),children:t})})]}):null,(0,eb.jsx)(XB,{children:(0,eb.jsx)(XU,{href:"#",nextLabel:"下一页","aria-disabled":e===t,className:(0,ez.cn)(e===t&&"pointer-events-none opacity-40"),onClick:t=>o(t,e+1)})})]})})}function XX({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)(Bk,{variant:t,children:e},e))})}function XY({zone:e}){return(0,eb.jsx)(Bk,{variant:"Trust"===e?"secondary":"outline",children:e})}function XZ({action:e}){return(0,eb.jsx)(Bk,{variant:"allow"===e?"default":"destructive",children:{allow:"允许",drop:"丢弃",deny:"拒绝"}[e]})}function XJ({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,ez.cn)("w-full caption-bottom text-sm",e),...t})})}function XQ({className:e,...t}){return(0,eb.jsx)("thead",{"data-slot":"table-header",className:(0,ez.cn)("[&_tr]:border-b",e),...t})}function X0({className:e,...t}){return(0,eb.jsx)("tbody",{"data-slot":"table-body",className:(0,ez.cn)("[&_tr:last-child]:border-0",e),...t})}function X1({className:e,...t}){return(0,eb.jsx)("tr",{"data-slot":"table-row",className:(0,ez.cn)("border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",e),...t})}function X2({className:e,...t}){return(0,eb.jsx)("th",{"data-slot":"table-head",className:(0,ez.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 X5({className:e,...t}){return(0,eb.jsx)("td",{"data-slot":"table-cell",className:(0,ez.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",e),...t})}function X4({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}function X3({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)(X4,{title:e}),(0,eb.jsx)("div",{className:"mt-3 min-h-0 flex-1 overflow-auto",children:(0,eb.jsxs)(XJ,{children:[(0,eb.jsx)(XQ,{children:(0,eb.jsx)(X1,{children:t.map(e=>(0,eb.jsx)(X2,{children:e},e))})}),(0,eb.jsx)(X0,{children:n.map(e=>(0,eb.jsx)(X1,{children:e.map((e,t)=>(0,eb.jsx)(X5,{className:0===t?"font-medium":"text-muted-foreground",children:e},`${e}-${t}`))},e.join("-")))})]})})]})}function X6(){return(0,eb.jsxs)("div",{className:"grid h-full min-h-0 content-start gap-3 p-3",children:[(0,eb.jsx)(X4,{title:"策略申请"}),(0,eb.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,eb.jsx)(eA,{placeholder:"策略名称"}),(0,eb.jsx)(eA,{placeholder:"负责人"}),(0,eb.jsx)(eA,{placeholder:"源 CIDR"}),(0,eb.jsx)(eA,{placeholder:"目标 CIDR"})]}),(0,eb.jsx)("textarea",{placeholder:"用途",className:"min-h-32 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50"}),(0,eb.jsx)("div",{children:(0,eb.jsxs)(eI.Button,{size:"sm",children:[(0,eb.jsx)(lY,{className:"size-4"}),"提交申请"]})})]})}function X8(){return(0,eb.jsxs)(mN,{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)(mA,{className:"h-8 w-max min-w-full",children:[(0,eb.jsx)(mT,{value:"policies",children:"防火墙策略"}),(0,eb.jsx)(mT,{value:"ip-addresses",children:"IP 地址"}),(0,eb.jsx)(mT,{value:"renewals",children:"续期"}),(0,eb.jsx)(mT,{value:"policy-request",children:"策略申请"}),(0,eb.jsx)(mT,{value:"user-settings",children:"用户设置"})]})}),(0,eb.jsx)(mR,{value:"policies",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(XK,{})}),(0,eb.jsx)(mR,{value:"ip-addresses",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"IP 地址",headers:["地址","名称","区域","策略"],rows:X_})}),(0,eb.jsx)(mR,{value:"renewals",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"续期",headers:["策略","续期时间","负责人"],rows:XL})}),(0,eb.jsx)(mR,{value:"policy-request",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X6,{})}),(0,eb.jsx)(mR,{value:"user-settings",className:"mt-3 min-h-0 flex-1 border-t",children:(0,eb.jsx)(X3,{title:"用户设置",headers:["设置","值"],rows:[["默认区域","Trust"],["审核提醒","14 天"],["申请审批","安全负责人"],["策略导出","已开启"]]})})]})}function X7(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 X9(e,t){let n=t.machineId||"local";return X7((await u6(n,e.path)).items)}function Ye({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 u3();r(e.roots.map(e=>({id:e.id,machineId:e.machineId,name:e.name,path:e.path,platform:e.platform,children:X7(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)(Ue,{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:X9,onOpenNode:(e,n)=>{"folder"!==e.kind&&t?.({machineId:n.machineId||"local",path:e.path})},onRefresh:()=>{s()}},o)}function Yt({open:e,onOpenChange:t,onSelectFile:n}){return(0,eb.jsx)(dD,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fI,{className:"h-[min(42rem,calc(100svh-2rem))] max-w-2xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fT,{className:"sr-only",children:"选择文件"}),(0,eb.jsx)(fR,{className:"sr-only",children:"选择本机可访问文件。"}),(0,eb.jsx)(Ye,{className:"size-full max-w-none rounded-none border-0",onOpenFile:e=>{n(e),t(!1)}})]})})}function Yn(){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 Yr=(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 Ya({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)(jX,{className:"size-4"}):(0,eb.jsx)(Yr,{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,ez.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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let Yi=[];function Yo(e,t){return`${e} / ${t.replace(/\\/g," / ").replace(/\//g," / ")}`}function Yl(e,t){for(let n of e){if(n.id===t)return n;let e=n.children?Yl(n.children,t):void 0;if(e)return e}}function Ys(e,t){return e.replace(/\\/g,"/").toLowerCase()===t.replace(/\\/g,"/").toLowerCase()}function Yc(e,t){let n=e.replace(/\\/g,"/").replace(/\/+/g,"/");return"windows"===t?n.toLowerCase():n}function Yd(e){return e.map(e=>({...e,children:e.children?Yd(e.children):void 0}))}let Yu=(0,ek.default)("move-right",[["path",{d:"M18 8L22 12L18 16",key:"1r0oui"}],["path",{d:"M2 12H22",key:"1m8cig"}]]),Yf=(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"}]]),Yh=(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"}]]),Ym={title:"Clipboard",empty:"No clips",dragHandle:"Drag clip"};function Yp({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={...Ym,...i},[j,k]=ew.useState(n),[N,S]=ew.useState(),[C,M]=ew.useState(),[E,P]=ew.useState(n),[O,I]=ew.useState(),[z,A]=ew.useState({canScrollDown:!1,canScrollUp:!1}),[T,R]=ew.useState(!1),[D,_]=ew.useState(!1),L=ew.useRef(0),$=ew.useRef(void 0),F=ew.useRef(!1),B=ew.useRef(null),V=ew.useRef(null),H=void 0!==t,U=(H?t:j)||void 0!==N,q=Math.min(o,10),W=U?e:e.slice(0,q),K=E?C:void 0,G=44*W.length+18,X=Math.min(G,l),Y=U&&G>X,Z=0===e.length?"h-24":U?`${X}px`:"h-28",J=U&&Y?14:0;ew.useEffect(()=>{if(!U){P(!1),A({canScrollDown:!1,canScrollUp:!1});return}P(!1),window.requestAnimationFrame(()=>{V.current&&(V.current.scrollTop=0)}),A({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,ez.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,ez.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)(Yh,{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,ez.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,ez.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,ez.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,ez.cn)("relative h-full overflow-x-visible",U&&Y?"clipboard-stack-scrollbar-hidden overflow-y-auto pt-2 pr-1 pb-3":"overflow-visible"),onScroll:e=>{let t=e.currentTarget;A({canScrollUp:t.scrollTop>1,canScrollDown:t.scrollTop+t.clientHeight<t.scrollHeight-1})},onDragOver:function(e){U&&N&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="move")},onDrop:function(t){if(!U||!N||void 0===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)(Yg,{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&&z.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&&z.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 Yg({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,ez.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)(Yh,{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,ez.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,ez.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)(fD,{className:"size-3.5"})})]})})}function Yx({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} 项`:Yb(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)(Yf,{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)(Yu,{className:"size-4"}),expandedHeight:132,content:(0,eb.jsx)(Yv,{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)(Yp,{items:n,title:"传输",labels:{empty:"暂无传输",dragHandle:"传输任务"},expansionDirection:"down-left",maxExpandedHeight:420})})}function Yv({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:Yb(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:[Yy(e.progress.bytesDone)," /"," ",Yy(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:Yb(e.progress.currentPath)}):null]})]})}function Yb(e){return e.split(/[\\/]+/).filter(Boolean).at(-1)??e}function Yy(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 Yw=(0,ek.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);function Yj({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,ez.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)(fP.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)(Yw,{})})]}),(0,eb.jsx)("div",{className:"truncate text-center ui-text-control",children:e.title}),(0,eb.jsx)("div",{className:"w-14"})]}),(0,eb.jsx)(w8,{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 Yk({clipboardItems:e=[],onClipboardItemsChange:t,className:n,minBoardHeight:r=520,actionsPlacement:a="container"}){let[i,o]=Yn(),[l,s]=ew.useState([]),[c,d]=ew.useState(Yi),[u,f]=ew.useState(Yi[0]?.id),[h,m]=ew.useState([]),[p,g]=ew.useState(!1),[x,v]=ew.useState(!1),[b,y]=ew.useState(),w=ew.useRef(Yi.length),j=ew.useRef(!1),k=ew.useRef(new Set),N=ew.useCallback(async(e,t,n)=>{let r=await u6(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:Ys(e.path,a.path)?{...e,children:Yd(a.items)}:{...e,children:function(e,t,n,r,a){let i=function(e,t,n){let r=Yc(e,n),a=Yc(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 Yd(a);let o="windows"===r?"\\":"/";return function e(t,n,r){let l=i[r];if(!l)return Yd(a);let s=n===o?`${o}${l}`:`${n.replace(/[\\/]+$/,"")}${o}${l}`,c=t.findIndex(e=>Ys(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 fr()).transfers);return m(e),e},[]),C=ew.useCallback(e=>{m(t=>YC([e,...t.filter(t=>t.id!==e.id)]))},[]),M=ew.useCallback(e=>{fn({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??Yo(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 u3();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:Yo(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(),z=c.find(e=>e.id===u);function A(e){return{onNavigate:({rootId:t,path:n})=>{let r=l.find(e=>e.id===t),a=r?.machineId??e.machineId;P(e.id,e=>({...e,machineId:a,rootId:t,path:n,title:Yo(r?.name??a,n)})),N(a,t,n)},onRootsChange:s,onCreateFolder:(t,n)=>{u9({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onRenameItem:(t,n)=>{fe({machineId:e.machineId,path:t.path,name:n}).then(()=>N(e.machineId,e.rootId,e.path)).catch(()=>{})},onDeleteItems:t=>{ft({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=Yl(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,ez.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,ez.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:z?(0,eb.jsx)(YN,{windowLayout:z,roots:l,...A(z)}):(0,eb.jsx)("div",{className:"grid h-full place-items-center text-sm text-muted-foreground",children:"暂无打开的文件窗口"})}),(0,eb.jsx)(Yx,{transfers:h}),(0,eb.jsx)(Ya,{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,ez.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)(Yj,{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),...A(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:Yo(r?.name??a,t)})),N(a,e,t)},onRootsChange:s,onCreateFolder:(e,t)=>{u9({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onRenameItem:(e,t)=>{fe({machineId:n.machineId,path:e.path,name:t}).then(()=>N(n.machineId,n.rootId,n.path)).catch(()=>{})},onDeleteItems:e=>{ft({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=Yl(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)(Yx,{transfers:h}),(0,eb.jsx)(Ya,{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 YN({windowLayout:e,roots:t,onNavigate:n,onRootsChange:r,onCreateFolder:a,onRenameItem:i,onDeleteItems:o,onMoveItems:l}){return(0,eb.jsx)(w8,{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)(ua,{open:void 0!==e,onOpenChange:e=>{e||t()},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"确认移动"}),(0,eb.jsx)(uC,{children:e?`将 ${1===(r=a).length?r[0]?YM(r[0]):"0 项":`${r.length} 项`} 移动到 ${YM(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:YM(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:YM(e.target)})]})]}):null,(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{onClick:()=>{e&&n(e)},children:"确认移动"})]})]})})}function YC(e){return e.slice(0,10)}function YM(e){let t=e.path.replace(/\\/g,"/");return`${e.machineId} / ${e.name||t}`}function YE({className:e}){return(0,eb.jsx)(Yk,{className:(0,ez.cn)("h-full min-h-0 w-full rounded-[inherit] border-0 shadow-none",e),minBoardHeight:360,actionsPlacement:"container"})}var YP=ew;function YO(){return(YO=Object.assign.bind()).apply(null,arguments)}var YI=e=>{var{cx:t,cy:n,r,className:a}=e,i=(0,jQ.clsx)("recharts-dot",a);return kO(t)&&kO(n)&&kO(r)?ew.createElement("circle",YO({},z1(e),AC(e),{className:i,cx:t,cy:n,r:r})):null},Yz=["points"];function YA(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 YT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?YA(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)):YA(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function YR(){return(YR=Object.assign.bind()).apply(null,arguments)}function YD(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,jQ.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,Yz);return ew.createElement(YI,YR({},l,{className:a}))}function Y_(e){var{points:t,dot:n,className:r,dotClassName:a,dataKey:i,baseProps:o,needClip:l,clipPathId:s,zIndex:c=Me.scatter}=e;if(null==t||!n&&1!==t.length)return null;var d=Tm(n),u=null==n?null:(0,ew.isValidElement)(n)?z5(n.props):"object"!=typeof n||Array.isArray(n)?null:z5(n),f=t.map((e,r)=>{var l,s,c=YT(YT(YT({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(YD,{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(_5,{zIndex:c},ew.createElement(z6,YR({className:r},h),f))}function YL(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 Y$(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?YL(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)):YL(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var YF=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=Y$(Y$(Y$({},{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}),z2(i)),AC(i));return t=(0,ew.isValidElement)(i)?(0,ew.cloneElement)(i,s):"function"==typeof i?i(s):ew.createElement(YI,s),ew.createElement(z6,{className:"recharts-active-dot",clipPath:l},t)};function YB(e){var{points:t,mainColor:n,activeDot:r,itemDataKey:a,clipPath:i,zIndex:o=Me.activeDot}=e,l=Np(_h),s=Np(_j);if(null==t||null==s)return null;var c=t.find(e=>s.includes(e.payload));return null==c?null:ew.createElement(_5,{zIndex:o},ew.createElement(YF,{point:c,childIndex:Number(l),mainColor:n,dataKey:a,activeDot:r,clipPath:i}))}function YV(e,t){var n,r,a=Np(t=>OJ(t,e)),i=Np(e=>O1(e,t)),o=null!=(n=null==a?void 0:a.allowDataOverflow)?n:OY.allowDataOverflow,l=null!=(r=null==i?void 0:i.allowDataOverflow)?r:OQ.allowDataOverflow;return{needClip:o||l,needClipX:o,needClipY:l}}function YH(e){var{xAxisId:t,yAxisId:n,clipPathId:r}=e,a=Np(Bl),{needClipX:i,needClipY:o,needClip:l}=YV(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 YU(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 Yq(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 YW=(e,t,n)=>zC(e,"xAxis",YU(e,t),n),YK=(e,t,n)=>zS(e,"xAxis",YU(e,t),n),YG=(e,t,n)=>zC(e,"yAxis",Yq(e,t),n),YX=(e,t,n)=>zS(e,"yAxis",Yq(e,t),n),YY=kl([CR,YW,YG,YK,YX],(e,t,n,r,a)=>kK(e,"xAxis")?k2(t,r,!1):k2(n,a,!1)),YZ=kl([O7,(e,t)=>t],(e,t)=>e.filter(e=>"area"===e.type).find(e=>e.id===t)),YJ=e=>kK(CR(e),"xAxis")?"yAxis":"xAxis",YQ=kl([YZ,(e,t,n)=>Ik(e,YJ(e),"yAxis"===YJ(e)?Yq(e,t):YU(e,t),n)],(e,t)=>{if(null!=e&&null!=t){var n,{stackId:r}=e,a=My(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]])}}}),Y0=kl([CR,YW,YG,YK,YX,YQ,kf,YY,YZ,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(kO(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=kW(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==kW(e,a);return x?{x:kJ({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:kJ({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 Y1(e){var t=z2(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 Y2=["id"],Y5=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function Y4(){return(Y4=Object.assign.bind()).apply(null,arguments)}function Y3(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 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}function Y8(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}function Y7(e,t){return e&&"none"!==e?e:t}var Y9=YP.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:kF,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:k4(o,t),hide:l,type:c,color:Y7(r,i),unit:s,graphicalItemId:d}};return YP.createElement(Db,{tooltipEntrySettings:u})});function Ze(e){var{clipPathId:t,points:n,props:r}=e,{needClip:a,dot:i,dataKey:o}=r,l=z1(r);return YP.createElement(Y_,{points:n,dot:i,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:l,needClip:a,clipPathId:t})}function Zt(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 Y8(Y8({},r),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:r,fill:void 0})});return YP.createElement(Lx,{value:t?a:void 0},n)}function Zn(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=Y3(i,Y2),h=z1(f),m=z5(f);return YP.createElement(YP.Fragment,null,(null==t?void 0:t.length)>1&&YP.createElement(z6,{clipPath:r?"url(#clipPath-".concat(a,")"):void 0},YP.createElement(AD,Y4({},m,{id:u,points:t,connectNulls:c,type:l,baseLine:n,layout:o,stroke:"none",className:"recharts-area-area"})),"none"!==s&&YP.createElement(AD,Y4({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:t})),"none"!==s&&d&&Array.isArray(n)&&YP.createElement(AD,Y4({},h,{className:"recharts-area-curve",layout:o,type:l,connectNulls:c,fill:"none",points:n}))),YP.createElement(Ze,{points:t,props:f,clipPathId:a}))}function Zr(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(!kV(l)||!kV(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.x||0));return(kO(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.x||0),d)),kO(d))?YP.createElement("rect",{x:0,y:l<s?l:l-c,width:d+(o?parseInt("".concat(o),10):1),height:Math.floor(c)}):null}function Za(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(!kV(l)||!kV(s))return null;var c=r*Math.abs(l-s),d=Math.max(...i.map(e=>e.y||0));return(kO(a)?d=Math.max(a,d):a&&Array.isArray(a)&&a.length&&(d=Math.max(...a.map(e=>e.y||0),d)),kO(d))?YP.createElement("rect",{x:l<s?l:l-c,y:0,width:c,height:Math.floor(d+(o?parseInt("".concat(o),10):1))}):null}function Zi(e){var{alpha:t,layout:n,points:r,baseLine:a,strokeWidth:i}=e;return"vertical"===n?YP.createElement(Zr,{alpha:t,points:r,baseLine:a,strokeWidth:i}):YP.createElement(Za,{alpha:t,points:r,baseLine:a,strokeWidth:i})}function Zo(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=TL((0,YP.useMemo)(()=>({points:o,baseLine:l}),[o,l]),"recharts-area-"),p=CD(),[g,x]=(0,YP.useState)(!1),v=(0,YP.useCallback)(()=>{"function"==typeof h&&h(),x(!1)},[h]),b=(0,YP.useCallback)(()=>{"function"==typeof f&&f(),x(!0)},[f]);if(null==p)return null;var y=a.current,w=i.current;return YP.createElement(Zt,{showLabels:!g,points:o},r.children,YP.createElement(T_,{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 Y8(Y8({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return t});if(kO(l))c=kD(w,l,e);else c=null==l||kE(l)?kD(w,0,e):l.map((t,n)=>{var r=Math.floor(n*d);if(Array.isArray(w)&&w[r]){var a=w[r];return Y8(Y8({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return t});return e>0&&(a.current=u,i.current=c),YP.createElement(Zn,{points:u,baseLine:c,needClip:t,clipPathId:n,props:r})}return e>0&&(a.current=o,i.current=l),YP.createElement(z6,null,s&&YP.createElement("defs",null,YP.createElement("clipPath",{id:"animationClipPath-".concat(n)},YP.createElement(Zi,{alpha:e,points:o,baseLine:l,layout:p,strokeWidth:r.strokeWidth}))),YP.createElement(z6,{clipPath:"url(#animationClipPath-".concat(n,")")},YP.createElement(Zn,{points:o,baseLine:l,needClip:t,clipPathId:n,props:r})))}),YP.createElement(Lw,{label:r.label}))}function Zl(e){var{needClip:t,clipPathId:n,props:r}=e,a=(0,YP.useRef)(null),i=(0,YP.useRef)();return YP.createElement(Zo,{needClip:t,clipPathId:n,props:r,previousPointsRef:a,previousBaselineRef:i})}class Zs extends YP.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,jQ.clsx)("recharts-area",r),{r:p,strokeWidth:g}=Y1(t),x=Tm(t),v=2*p+g,b=o?"url(#clipPath-".concat(x?"":"dots-").concat(u,")"):void 0;return YP.createElement(_5,{zIndex:h},YP.createElement(z6,{className:m},o&&YP.createElement("defs",null,YP.createElement(YH,{clipPathId:u,xAxisId:l,yAxisId:s}),!x&&YP.createElement("clipPath",{id:"clipPath-dots-".concat(u)},YP.createElement("rect",{x:i-v/2,y:a-v/2,width:c+v,height:d+v}))),YP.createElement(Zl,{needClip:o,clipPathId:u,props:this.props})),YP.createElement(YB,{points:n,mainColor:Y7(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}),this.props.isRange&&Array.isArray(f)&&YP.createElement(YB,{points:f,mainColor:Y7(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:b}))}}var Zc={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:Me.area};function Zd(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=Y3(e,Y5),x=Np(CR),v=Np(C1),{needClip:b}=YV(m,p),y=Cd(),{points:w,isRange:j,baseLine:k}=null!=(t=Np(t=>Y0(t,e.id,y)))?t:{},N=Np(Bl);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?YP.createElement(Zs,Y4({},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 Zu=YP.memo(function(e){var t=A2(e,Zc),n=Cd();return YP.createElement(_T,{id:t.id,type:"area"},e=>YP.createElement(YP.Fragment,null,YP.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,fill:a,legendType:i,hide:o}=e;return[{inactive:o,dataKey:t,type:i,color:Y7(r,a),value:k4(n,t),payload:e}]})(t)}),YP.createElement(Y9,{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}),YP.createElement(_H,{type:"area",id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:kZ(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),YP.createElement(Zd,Y4({},t,{id:e}))))},FR);function Zf(){return(Zf=Object.assign.bind()).apply(null,arguments)}function Zh(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}Zu.displayName="Area";var Zm=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zh(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)):Zh(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"},Fk),Zp=(0,ew.forwardRef)(function(e,t){var n,r=A2(e.categoricalChartProps,Zm),{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,categoricalChartProps:s}=e;return ew.createElement(Fz,{preloadedState:{options:{chartName:a,defaultTooltipEventType:i,validateTooltipEventTypes:o,tooltipPayloadSearcher:l,eventEmitter:void 0}},reduxStoreName:null!=(n=s.id)?n:a},ew.createElement(FA,{chartData:s.data}),ew.createElement(FD,{layout:r.layout,margin:r.margin}),ew.createElement(FL,{throttleDelay:r.throttleDelay,throttledEvents:r.throttledEvents}),ew.createElement(F_,{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(Bu,Zf({},r,{ref:t})))}),Zg=["axis"],Zx=(0,ew.forwardRef)((e,t)=>ew.createElement(Zp,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:Zg,tooltipPayloadSearcher:LB,categoricalChartProps:e,ref:t})),Zv=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 Zb(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 Zy(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 Zw(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 Zj(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zw(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)):Zw(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Zk(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(kO(c)||A_.isSsr)return null!=(r=Zb(i,(kO(c)?c:0)+1))?r:[];var h="top"===s||"bottom"===s?"width":"height",m=u&&"width"===h?AU(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=AU(i,{fontSize:t,letterSpacing:n}),Zv({width:a.width+m.width,height:a.height+m.height},f)):AU(i,{fontSize:t,letterSpacing:n})[h]},g=i[0],x=i[1],v=i.length>=2&&null!=g&&null!=x?kM(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:Zb(r,d)};var o=c,f=()=>(void 0===t&&(t=n(i,o)),t),h=i.coordinate,m=0===c||Zy(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||Zy(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=Zj(Zj({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate}),null!=d.tickCoord&&Zy(e,d.tickCoord,()=>u,s,c)&&(c=d.tickCoord-e*(u/2+a),o[l-1]=Zj(Zj({},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=Zj(Zj({},l),{},{tickCoord:u<0?l.coordinate-u*e:l.coordinate})}else o[t]=l=Zj(Zj({},l),{},{tickCoord:l.coordinate});null!=l.tickCoord&&Zy(e,l.tickCoord,d,s,c)&&(s=l.tickCoord+e*(d()/2+a),o[t]=Zj(Zj({},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=Zj(Zj({},d),{},{tickCoord:f>0?d.coordinate-f*e:d.coordinate})}else i[t]=d=Zj(Zj({},d),{},{tickCoord:d.coordinate});null!=d.tickCoord&&Zy(e,d.tickCoord,u,l,s)&&(s=d.tickCoord-e*(u()/2+a),i[t]=Zj(Zj({},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 ZN=["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 ZM(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 ZE={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:Me.axis};function ZP(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=ZM(ZM(ZM({},s),z1(l)),{},{fill:"none"});if("top"===i||"bottom"===i){var d=+("top"===i&&!o||"bottom"===i&&o);c=ZM(ZM({},c),{},{x1:t,y1:n+d*a,x2:t+r,y2:n+d*a})}else{var u=+("left"===i&&!o||"right"===i&&o);c=ZM(ZM({},c),{},{x1:t+u*r,y1:n,x2:t+u*r,y2:n+a})}return ew.createElement("line",ZS({},c,{className:(0,jQ.clsx)("recharts-cartesian-axis-line",(0,jJ.default)(l,"className"))}))}function ZO(e){var t,{option:n,tickProps:r,value:a}=e,i=(0,jQ.clsx)(r.className,"recharts-cartesian-axis-tick-value");if(ew.isValidElement(n))t=ew.cloneElement(n,ZM(ZM({},r),{},{className:i}));else if("function"==typeof n)t=n(ZM(ZM({},r),{},{className:i}));else{var o="recharts-cartesian-axis-tick-value";"boolean"!=typeof n&&(o=(0,jQ.clsx)(o,Lj(n))),t=ew.createElement(To,ZS({},r,{className:o}),a)}return t}function ZI(e){var{ticks:t,axisType:n,axisId:r}=e,a=Nu();return(0,ew.useEffect)(()=>null==r||null==n?kF:(a(FE({ticks:t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),axisId:r,axisType:n})),()=>{a(FP({axisId:r,axisType:n}))}),[a,t,r,n]),null}var Zz=(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=Zk(ZM(ZM({},y),{},{ticks:n}),v,b),S=z1(y),C=z2(r),M=A9(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=ZM(ZM({},S),{},{fill:"none"},P),I=N.map(e=>ZM({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=kO(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))),z=I.map(e=>{var{entry:t,line:n}=e;return ew.createElement(z6,{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,jQ.clsx)("recharts-cartesian-axis-tick-line",(0,jJ.default)(a,"className"))})))}),A=I.map((e,t)=>{var n,a,{entry:d,tick:u}=e,f=ZM(ZM(ZM(ZM({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=ZM(ZM({},f),C);return ew.createElement(z6,ZS({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(d.value,"-").concat(d.coordinate,"-").concat(d.tickCoord)},AM(w,d,t)),r&&ew.createElement(ZO,{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(ZI,{ticks:N,axisId:k,axisType:j}),A.length>0&&ew.createElement(_5,{zIndex:Me.label},ew.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(j,"-tick-labels"),ref:t},A)),z.length>0&&ew.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(j,"-tick-lines")},z))}),ZA=(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,ZN),[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(_5,{zIndex:e.zIndex},ew.createElement(z6,{className:(0,jQ.clsx)("recharts-cartesian-axis",i)},ew.createElement(ZP,{x:e.x,y:e.y,width:r,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:n,otherSvgProps:z1(e)}),ew.createElement(Zz,{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(Lr,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},ew.createElement(Ld,{label:e.label,labelRef:e.labelRef}),e.children)))}),ZT=ew.forwardRef((e,t)=>{var n=A2(e,ZE);return ew.createElement(ZA,ZS({},n,{ref:t}))});ZT.displayName="CartesianAxis";var ZR=["x1","y1","x2","y2","key"],ZD=["offset"],Z_=["xAxisId","yAxisId"],ZL=["xAxisId","yAxisId"];function Z$(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ZF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z$(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z$(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ZB(){return(ZB=Object.assign.bind()).apply(null,arguments)}function ZV(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 ZH=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 ZU(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=z1(ZV(n,ZR)))?a:{},{offset:u}=d,f=ZV(d,ZD);r=ew.createElement("line",ZB({},f,{x1:i,y1:o,x2:l,y2:s,fill:"none",key:c}))}return r}function Zq(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=ZV(e,Z_),s=a.map((e,a)=>{var i=ZF(ZF({},l),{},{x1:t,y1:e,x2:t+n,y2:e,key:"line-".concat(a),index:a});return ew.createElement(ZU,{key:"line-".concat(a),option:r,lineItemProps:i})});return ew.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function ZW(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=ZV(e,ZL),s=a.map((e,a)=>{var i=ZF(ZF({},l),{},{x1:e,y1:t,x2:e,y2:t+n,key:"line-".concat(a),index:a});return ew.createElement(ZU,{option:r,lineItemProps:i,key:"line-".concat(a)})});return ew.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function ZK(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 ZG(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 ZX=(e,t)=>{var{xAxis:n,width:r,height:a,offset:i}=e;return kG(Zk(ZF(ZF(ZF({},ZE),n),{},{ticks:kX(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.left,i.left+i.width,t)},ZY=(e,t)=>{var{yAxis:n,width:r,height:a,offset:i}=e;return kG(Zk(ZF(ZF(ZF({},ZE),n),{},{ticks:kX(n,!0),viewBox:{x:0,y:0,width:r,height:a}})),i.top,i.top+i.height,t)},ZZ={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:Me.grid};function ZJ(e){var t=Np(k3),n=Np(k6),r=CT(),a=ZF(ZF({},A2(e,ZZ)),{},{x:kO(e.x)?e.x:r.left,y:kO(e.y)?e.y:r.top,width:kO(e.width)?e.width:r.width,height:kO(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=Cd(),p=Np(e=>zk(e,"xAxis",i,m)),g=Np(e=>zk(e,"yAxis",o,m));if(!kH(c)||!kH(d)||!kO(l)||!kO(s))return null;var x=a.verticalCoordinatesGenerator||ZX,v=a.horizontalCoordinatesGenerator||ZY,{horizontalPoints:b,verticalPoints:y}=a;if((!b||!b.length)&&"function"==typeof v){var w=f&&f.length,j=v({yAxis:g?ZF(ZF({},g),{},{ticks:w?f:g.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!w||u);Cm(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?ZF(ZF({},p),{},{ticks:k?h:p.ticks}):void 0,width:null!=t?t:c,height:null!=n?n:d,offset:r},!!k||u);Cm(Array.isArray(N),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof N,"]")),Array.isArray(N)&&(y=N)}return ew.createElement(_5,{zIndex:a.zIndex},ew.createElement("g",{className:"recharts-cartesian-grid"},ew.createElement(ZH,{fill:a.fill,fillOpacity:a.fillOpacity,x:a.x,y:a.y,width:a.width,height:a.height,ry:a.ry}),ew.createElement(ZK,ZB({},a,{horizontalPoints:b})),ew.createElement(ZG,ZB({},a,{verticalPoints:y})),ew.createElement(Zq,ZB({},a,{offset:r,horizontalPoints:b,xAxis:p,yAxis:g})),ew.createElement(ZW,ZB({},a,{offset:r,verticalPoints:y,xAxis:p,yAxis:g}))))}ZJ.displayName="CartesianGrid";var ZQ=["domain","range"],Z0=["domain","range"];function Z1(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 Z2(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 Z5(e,t){if(e===t)return!0;var{domain:n,range:r}=e,a=Z1(e,ZQ),{domain:i,range:o}=t,l=Z1(t,Z0);return!!Z2(n,i)&&!!Z2(r,o)&&FR(a,l)}var Z4=["type"],Z3=["dangerouslySetInnerHTML","ticks","scale"],Z6=["id","scale"];function Z8(){return(Z8=Object.assign.bind()).apply(null,arguments)}function Z7(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 Z9(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z7(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)):Z7(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Je(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 Jt(e){var t=Nu(),n=(0,ew.useRef)(null),r=CD(),{type:a}=e,i=Je(e,Z4),o=Ma(r,"xAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Z9(Z9({},i),{},{type:o})},[i,o]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($S(l)):n.current!==l&&t($C({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($M(n.current)),n.current=null)},[t]),null}var Jn=e=>{var{xAxisId:t,className:n}=e,r=Np(Nl),a=Cd(),i="xAxis",o=Np(e=>zN(e,i,t,a)),l=Np(e=>zm(e,t)),s=Np(e=>zx(e,t)),c=Np(e=>OZ(e,t));if(null==l||null==s||null==c)return null;var{dangerouslySetInnerHTML:d,ticks:u,scale:f}=e,h=Je(e,Z3),{id:m,scale:p}=c,g=Je(c,Z6);return ew.createElement(ZT,Z8({},h,g,{x:s.x,y:s.y,width:l.width,height:l.height,className:(0,jQ.clsx)("recharts-".concat(i," ").concat(i),n),viewBox:r,ticks:o,axisType:i,axisId:t}))},Jr={allowDataOverflow:OY.allowDataOverflow,allowDecimals:OY.allowDecimals,allowDuplicatedCategory:OY.allowDuplicatedCategory,angle:OY.angle,axisLine:ZE.axisLine,height:OY.height,hide:!1,includeHidden:OY.includeHidden,interval:OY.interval,label:!1,minTickGap:OY.minTickGap,mirror:OY.mirror,orientation:OY.orientation,padding:OY.padding,reversed:OY.reversed,scale:OY.scale,tick:OY.tick,tickCount:OY.tickCount,tickLine:ZE.tickLine,tickSize:ZE.tickSize,type:OY.type,niceTicks:OY.niceTicks,xAxisId:0},Ja=ew.memo(e=>{var t=A2(e,Jr);return ew.createElement(ew.Fragment,null,ew.createElement(Jt,{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(Jn,t))},Z5);Ja.displayName="XAxis";var Ji=["type"],Jo=["dangerouslySetInnerHTML","ticks","scale"],Jl=["id","scale"];function Js(){return(Js=Object.assign.bind()).apply(null,arguments)}function Jc(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 Jd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Jc(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)):Jc(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ju(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 Jf(e){var t=Nu(),n=(0,ew.useRef)(null),r=CD(),{type:a}=e,i=Ju(e,Ji),o=Ma(r,"yAxis",a),l=(0,ew.useMemo)(()=>{if(null!=o)return Jd(Jd({},i),{},{type:o})},[o,i]);return(0,ew.useLayoutEffect)(()=>{null!=l&&(null===n.current?t($E(l)):n.current!==l&&t($P({prev:n.current,next:l})),n.current=l)},[l,t]),(0,ew.useLayoutEffect)(()=>()=>{n.current&&(t($O(n.current)),n.current=null)},[t]),null}function Jh(e){var{yAxisId:t,className:n,width:r,label:a}=e,i=(0,ew.useRef)(null),o=(0,ew.useRef)(null),l=Np(Nl),s=Cd(),c=Nu(),d="yAxis",u=Np(e=>zb(e,t)),f=Np(e=>zv(e,t)),h=Np(e=>zN(e,d,t,s)),m=Np(e=>O0(e,t));if((0,ew.useLayoutEffect)(()=>{if(!("auto"!==r||!u||Lo(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($T({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=Ju(e,Jo),{id:b,scale:y}=m,w=Ju(m,Jl);return ew.createElement(ZT,Js({},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,jQ.clsx)("recharts-".concat(d," ").concat(d),n),viewBox:l,ticks:h,axisType:d,axisId:t}))}var Jm={allowDataOverflow:OQ.allowDataOverflow,allowDecimals:OQ.allowDecimals,allowDuplicatedCategory:OQ.allowDuplicatedCategory,angle:OQ.angle,axisLine:ZE.axisLine,hide:!1,includeHidden:OQ.includeHidden,interval:OQ.interval,label:!1,minTickGap:OQ.minTickGap,mirror:OQ.mirror,orientation:OQ.orientation,padding:OQ.padding,reversed:OQ.reversed,scale:OQ.scale,tick:OQ.tick,tickCount:OQ.tickCount,tickLine:ZE.tickLine,tickSize:ZE.tickSize,type:OQ.type,niceTicks:OQ.niceTicks,width:OQ.width,yAxisId:0},Jp=ew.memo(e=>{var t=A2(e,Jm);return ew.createElement(ew.Fragment,null,ew.createElement(Jf,{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(Jh,t))},Z5);function Jg({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,ez.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)(mN,{value:o.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mA,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mT,{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,ez.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)(Jj,{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)(Jx,{metric:d}):null]})]})]})}function Jx({metric:e}){return"cpu"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"cpu",title:"% 利用率",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{details:e.details,columns:4})]}):"memory"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"memory",title:"内存使用量",value:e.detail,data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jy,{segments:e.composition}),(0,eb.jsx)(Jw,{details:e.details,columns:3})]}):"disk"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"disk-active",title:"活动时间",value:"100%",data:e.data,span:"full"},size:"large"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jv,{panel:{id:"disk-rate",title:"磁盘传输速率",value:"500 KB/秒",data:e.panels?.[0]?.data??e.data,span:"full"},size:"short"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{details:e.details,columns:4})]}):"network"===e.kind?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Jv,{panel:{id:"network",title:"吞吐量",value:"100 Kbps",data:e.data,span:"full",color:"danger"},size:"tall"}),(0,eb.jsx)(Jb,{}),(0,eb.jsx)(Jw,{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)(Jv,{panel:e},e.id))}),(0,eb.jsx)(Jw,{details:e.details,columns:3})]})}function Jv({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,ez.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)(Jk,{data:e.data,color:e.color,className:(0,ez.cn)("w-full",n)})]})}function Jb(){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 Jy({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,ez.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 Jw({details:e,columns:t}){return e?.length?(0,eb.jsx)("div",{className:(0,ez.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 Jj({data:e,color:t}){return(0,eb.jsx)(Jk,{data:e,color:t,className:"h-10 w-full",strokeWidth:1.4,compact:!0})}function Jk({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)(Vp,{config:o,className:(0,ez.cn)("aspect-auto border bg-background text-muted-foreground",n),initialDimension:{width:a?96:640,height:a?40:220},children:(0,eb.jsxs)(Zx,{data:i,margin:{top:a?2:6,right:0,bottom:0,left:0},children:[a?null:(0,eb.jsx)(ZJ,{strokeDasharray:"0",stroke:"var(--border)",strokeOpacity:.7}),(0,eb.jsx)(Ja,{dataKey:"index",hide:!0,domain:["dataMin","dataMax"]}),(0,eb.jsx)(Jp,{hide:!0,domain:[0,100]}),a?null:(0,eb.jsx)(B3,{cursor:!1,content:(0,eb.jsx)(Vx,{hideLabel:!0,indicator:"line"})}),(0,eb.jsx)(Zu,{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})]})})}Jp.displayName="YAxis";let JN=(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 JM({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(JA(a))?t:e(a,n,r)}(a,n),i=JA(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:JR(Math.min(100,e.cpu)),memoryMb:JR(e.memoryMb),diskMbps:JR(e.diskMbps),networkMbps:JR(e.networkMbps)}))}(f.processes)].sort((e,t)=>JT(e,t,o,s)),t=[];for(let n of e){if(n.children.length<=1){let e=n.children[0];e&&t.push(Jz(e,0));continue}if(t.push(n),d[n.id])for(let e of[...n.children].sort((e,t)=>JT(e,t,o,s)))t.push(Jz(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,ez.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)(mN,{value:f.id,onValueChange:i,className:"shrink-0 px-3 pt-3",children:(0,eb.jsx)(mA,{className:"h-8",children:e.map(e=>(0,eb.jsx)(mT,{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)(JE,{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)(JE,{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,ez.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)(JP,{row:e,expanded:"group"===e.kind&&!!d[e.id],onToggle:()=>{"group"===e.kind&&u(t=>({...t,[e.id]:!t[e.id]}))}}),(0,eb.jsx)(JO,{platform:f.platform,status:e.status}),(0,eb.jsx)(JI,{value:e.cpu,max:100,label:`${e.cpu.toFixed(1)}%`}),(0,eb.jsx)(JI,{value:e.memoryMb,max:JD(m,"memoryMb"),label:(t=e.memoryMb)>=1024?`${J_(t/1024)} GB`:`${J_(t)} MB`}),(0,eb.jsx)(JI,{value:e.diskMbps,max:Math.max(1,JD(m,"diskMbps")),label:`${J_(e.diskMbps)} MB/秒`}),(0,eb.jsx)(JI,{value:e.networkMbps,max:Math.max(1,JD(m,"networkMbps")),label:`${J_(e.networkMbps)} Mbps`})]},`${e.kind}-${e.id}`)})})]}):null}function JE({active:e,direction:t,className:n}){return e?(0,eb.jsx)("asc"===t?jW:jq,{className:(0,ez.cn)("ml-1 size-3",n)}):null}function JP({row:e,expanded:t,onToggle:n}){if("group"===e.kind){let r=t?xS:pr;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,ez.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 JO({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)(JN,{"aria-label":"运行",className:"size-4 text-primary"}):null]}):(0,eb.jsx)("div",{className:"px-3"})}function JI({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,ez.cn)("leading-9",a&&"text-destructive"),children:n})})}function Jz(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 JA(e){return e.appId?.trim().toLowerCase()||e.appName?.trim().toLowerCase()||e.name.trim().toLowerCase().replace(/\.(exe|com)$/i,"")||e.id}function JT(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 JR(e){return Math.round(10*e)/10}function JD(e,t){return e.reduce((e,n)=>Math.max(e,n[t]),0)}function J_(e){return new Intl.NumberFormat("zh-CN",{maximumFractionDigits:+(e<10)}).format(e)}function JL({className:e}){let t=JF("/api/local/machines/processes"),n=JB("/machines/processes"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(JM,{machines:r,className:(0,ez.cn)("h-full min-h-0 w-full",e)})}function J$({className:e}){let t=JF("/api/local/machines/performance"),n=JB("/machines/performance"),r=ew.useMemo(()=>[...t,...n],[t,n]);return(0,eb.jsx)(Jg,{machines:r,className:(0,ez.cn)("h-full min-h-0 w-full",e)})}function JF(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 JB(e){let{machines:t}=xD(),[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 JV=(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"}]]),JH=(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"}]]),JU={loading:"Starting terminal...",newTerminal:"New terminal",closeTerminal:e=>`Close ${e}`,terminalList:"Terminal sessions",status:{idle:"Idle",running:"Running",success:"Succeeded",error:"Failed"}},Jq=[{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 JW(e,t,n){return e.getPropertyValue(t).trim()||n}function JK(e,t=!1){let n=getComputedStyle(e),r=JW(n,"--foreground","#18181b"),a=JW(n,"--terminal-background",JW(n,"--background","#ffffff")),i="transparent"===a?JW(n,"--background","#ffffff"):a,o=JW(n,"--muted-foreground","#71717a"),l=JW(n,"--border","#e4e4e7"),s=JW(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:JW(n,"--selection-foreground","#ffffff"),scrollbarSliderBackground:`color-mix(in oklch, ${l} 78%, transparent)`,scrollbarSliderHoverBackground:l,black:r,red:JW(n,"--terminal-red","#bf616a"),green:JW(n,"--terminal-green","#5e8c61"),yellow:JW(n,"--terminal-yellow","#b06f3c"),blue:JW(n,"--terminal-blue","#5e81ac"),magenta:JW(n,"--terminal-magenta","#b48ead"),cyan:JW(n,"--terminal-cyan","#4c8da8"),white:a,brightBlack:o,brightRed:JW(n,"--terminal-bright-red","#d06f79"),brightGreen:JW(n,"--terminal-bright-green","#6b9a70"),brightYellow:JW(n,"--terminal-bright-yellow","#c2824b"),brightBlue:JW(n,"--terminal-bright-blue","#6f91ba"),brightMagenta:JW(n,"--terminal-bright-magenta","#c19ac0"),brightCyan:JW(n,"--terminal-bright-cyan","#5aa0b8"),brightWhite:r}}function JG(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function JX({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:JU.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=JW(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:JK(g.current),...j.current,allowTransparency:!0}),E=new h,O=new m,I=new p;function z(){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(z),(n=new ResizeObserver(z)).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))})),JG(t)))C.write(e);w.current?.({terminal:C,fitAddon:E,searchAddon:O,webLinksAddon:I,fit:z,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=JK(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=JK(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,JG(n)))e.write(t)},[n,r]),(0,eb.jsxs)("div",{"data-slot":"terminal-tab-surface",className:(0,ez.cn)("relative size-full min-h-0 overflow-hidden bg-background text-foreground",f),...m,children:[(0,eb.jsx)("div",{ref:g,className:(0,ez.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 JY({status:e="idle"}){return"running"===e?(0,eb.jsx)(JV,{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)(yF,{className:"size-3.5 text-muted-foreground"})}function JZ({session:e}){return e.aiControlled?(0,eb.jsx)(JH,{className:"size-3.5 text-destructive"}):(0,eb.jsx)(JY,{status:e.status})}function JJ({sessions:e,defaultSessions:t=Jq,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(()=>({...JU,...g,status:{...JU.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,ez.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,ez.cn)("flex min-w-0 items-center gap-1 border-b bg-muted/35 px-2 py-1.5",v),children:[(0,eb.jsx)(uB,{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,ez.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)(JZ,{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)(fP.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)(JQ,{session:e,selected:t,terminalOptions:p,readOnly:h,localEcho:m,onSessionData:s,onSessionResize:c,onSessionReady:d,labels:w,terminalClassName:b},e.id)})})]})}function JQ({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)(JX,{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 J0({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,z=I??"__unscoped__";ew.useEffect(()=>{E.current=n},[n]),ew.useEffect(()=>{P.current=r},[r]);let A=a.find(e=>e.id===d)??a[0],T=A?.shells?.find(e=>e.id===f)??A?.shells?.[0],R=ew.useMemo(()=>o.map(e=>e.id),[o]),D=ew.useMemo(()=>o.filter(e=>e.aiControlled).map(e=>e.id),[o]),_=R.join("\0"),L=D.join("\0"),$=ew.useCallback((e,t)=>{let n=b.current.get(e);if(t){let t=j.current.get(e);void 0!==t&&(window.clearTimeout(t),j.current.delete(e))}n?.setCursorSuppressed(t)},[]),F=ew.useCallback(e=>{let t=j.current.get(e);void 0!==t&&window.clearTimeout(t);let n=window.setTimeout(()=>{j.current.delete(e),$(e,!1)},90);j.current.set(e,n)},[$]),B=ew.useCallback(e=>{let t=w.current.get(e),n=b.current.get(e);if(!t||!n||t.writing)return;if(!t.buffer){w.current.delete(e),F(e);return}void 0!==t.drainTimer&&(window.clearTimeout(t.drainTimer),t.drainTimer=void 0);let r=t.buffer.slice(0,65536);t.buffer=t.buffer.slice(r.length),t.writing=!0,$(e,!0);try{n.write(r,()=>{(t.writing=!1,b.current.has(e))?t.buffer?t.drainTimer=window.setTimeout(()=>B(e),0):(w.current.delete(e),F(e)):w.current.delete(e)})}catch{t.writing=!1,w.current.delete(e),F(e)}},[F,$]),V=ew.useCallback((e,t)=>{if(!t)return;if(!b.current.get(e))return void y.current.set(e,`${y.current.get(e)??""}${t}`);let n=w.current.get(e);(n||(n={buffer:"",writing:!1},w.current.set(e,n)),n.buffer+=t,$(e,!0),n.buffer.length>=65536)?B(e):n.writing||void 0!==n.drainTimer||(n.drainTimer=window.setTimeout(()=>B(e),8))},[B,$]),H=ew.useCallback((e,t)=>{(k.current.set(e,t.sequence),"output"===t.type&&t.data)?V(e,t.data):"status"===t.type&&t.status&&l(n=>n.map(n=>n.id===e?{...n,status:t.status??n.status,updatedAt:t.createdAt}:n))},[V]),U=ew.useCallback(e=>{if(v.current.has(e))return;let t=new EventSource(function(e,t=0){let n=new URLSearchParams;t>0&&n.set("after",String(t));let r=n.toString();return(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(A&&!m){M.current=!1,p(!0);try{let e=await fN({machineId:A.id,scopeId:I,shell:T?.id,cwd:A.defaultCwd,cols:100,rows:30});l(t=>t.some(t=>t.id===e.id)?t:[...t,e]),c(e.id),U(e.id)}catch{return}finally{p(!1)}}},[m,U,A,T,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([fj(),fk(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,z]),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,ez.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)(gG,{value:A?.id,onValueChange:e=>{u(e);let t=a.find(t=>t.id===e);h(t?.shells?.[0]?.id)},children:[(0,eb.jsxs)(xM,{size:"sm",className:"max-w-44",children:[(0,eb.jsx)(bp,{className:"size-3.5"}),(0,eb.jsx)(gJ,{placeholder:"机器"})]}),(0,eb.jsx)(xO,{align:"start",children:a.filter(e=>"online"===e.status).map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsxs)(gG,{value:T?.id,onValueChange:h,children:[(0,eb.jsx)(xM,{size:"sm",className:"max-w-44",children:(0,eb.jsx)(gJ,{placeholder:"Shell"})}),(0,eb.jsx)(xO,{align:"start",children:A?.shells?.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.name},e.id))})]}),(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm","aria-label":"新建终端",disabled:!A||m,onClick:()=>void q(),className:"ml-auto",children:(0,eb.jsx)(lY,{className:"size-4"})})]}),(0,eb.jsx)(JJ,{sessions:o.map(J1),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}),fS(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,fC(t,r).catch(()=>{}).finally(()=>{let n=N.current.get(t);n&&(n.inFlight=!1,n.buffer?e(t):void 0===n.timer&&N.current.delete(t))})}(t)},6))}(e)},onSessionResize:function(e,t){let n=`${t.cols}x${t.rows}`;S.current.get(e)!==n&&(S.current.set(e,n),fM(e,t).then(e=>{l(t=>t.map(t=>t.id===e.id?{...t,...e}:t))}).catch(()=>{}))},onSessionReady:function(e,t){b.current.set(e,t);let n=y.current.get(e);n&&(y.current.delete(e),V(e,n))},className:"min-h-0 rounded-none border-0"})]})}function J1(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 J2(e,t={}){let n="h-full min-h-0 w-full overflow-hidden rounded-[inherit]";switch(e.kind){case"file-tab-viewer":{let r=u2("file-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Up,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(GL,{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)(XT,{className:`${n} border-0`,defaultUrl:e.defaultUrl??u2("browser-tab-viewer").defaultUrl});case"diff-tab-viewer":{let t=u2("diff-tab-viewer");return(0,eb.jsx)(qH,{className:`${n} border-0`,file:e.file??t.file,diff:e.diff??t.diff??""})}case"data-table-tab-viewer":{let r=u2("data-table-tab-viewer"),a=e.file;if(!a&&t.onRequestFileTab)return(0,eb.jsx)(Up,{className:n,onChooseFile:t.onRequestFileTab});return(0,eb.jsx)(qz,{className:`${n} border-0`,file:{name:a?.name??r.file?.name??"data",path:a?.path??r.file?.path,type:J5(e)},source:void 0!==e.defaultValue?{type:J5(e),content:e.defaultValue}:void 0,data:e.tableData??r.tableData??[]})}case"terminal-tab-group":return(0,eb.jsx)(J0,{className:`${n} border-0`,scopeId:t.terminalScopeId,state:e.terminal??t.terminalState,onStateChange:t.onTerminalStateChange})}}function J5(e){return`${e.file?.mimeType??""} ${e.file?.path??e.file?.name??""}`.toLowerCase().includes("json")?"json":"csv"}function J4(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)(GV,{className:n,contentClassName:"min-h-0",tabs:r.map(n=>({id:n.id,title:n.title,meta:n.meta,modified:n.modified,icon:u1(n.kind),content:J2(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:[Xp],createLabel:"打开文件",emptyContent:(0,eb.jsx)(Up,{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)(Uh,{folders:t.workspaceFolders,className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});return(0,eb.jsx)(Ye,{className:`${n} max-w-none`,onOpenFile:t.onOpenWorkspaceFile});case"process-management":return(0,eb.jsx)(JL,{className:`${n} rounded-[inherit] border-0`});case"machine-performance":return(0,eb.jsx)(J$,{className:`${n} rounded-[inherit] border-0`});case"firewall-policy-workspace":return(0,eb.jsx)("div",{className:`${n} bg-card`,children:(0,eb.jsx)(X8,{})});case"machine-file-management":return(0,eb.jsx)(YE,{className:`${n} bg-card`});case"agent-conversation-panel":return(0,eb.jsx)(HW,{className:`${n} vtl-canvas-agent-conversation-node`,composerClassName:"max-w-[42rem]"});case"status-monitor":return(0,eb.jsx)(Xu,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"plan-doc-viewer":return(0,eb.jsx)(GX,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"spec-doc-viewer":return(0,eb.jsx)(GY,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"tasks-pane":return(0,eb.jsx)(Xh,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"hooks-pane":return(0,eb.jsx)(GJ,{conversationId:t.conversationId,ownerMachineId:t.ownerMachineId});case"sidequery-pane":return(0,eb.jsx)(GQ,{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 J2(t.tab??u2(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 J3({kind:e,...t}){return J4(e,t)}let J6="application/vnd.vantaloom.agent-pane-shredder",J8="application/vnd.vantaloom.agent-pane-cutter";function J7(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 J9=[{id:"quad",label:"四分",slots:4,icon:(0,eb.jsx)(bm,{})},{id:"vertical-split",label:"上下二分",slots:2,icon:(0,eb.jsx)(UT,{})},{id:"horizontal-split",label:"左右二分",slots:2,icon:(0,eb.jsx)(UM,{})},{id:"left-two-right-one",label:"左二右一",slots:3,icon:(0,eb.jsx)(cl,{})},{id:"left-one-right-two",label:"左一右二",slots:3,icon:(0,eb.jsx)(cc,{})},{id:"top-two-bottom-one",label:"上二下一",slots:3,icon:(0,eb.jsx)(UT,{})},{id:"top-one-bottom-two",label:"上一下二",slots:3,icon:(0,eb.jsx)(UA,{})},{id:"single",label:"整窗口",slots:1,icon:(0,eb.jsx)(Uz,{})}];function Qe(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 Qt(e,t){return{[e[0]]:t[0],[e[1]]:t[1]}}function Qn(e,t){return[e[t[0]]??50,e[t[1]]??50]}function Qr({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=Qe(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(a,e),onLayoutChanged:e=>n?.("outer",Qn(e,a)),children:[(0,eb.jsx)(h_,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("vertical-split"===e){let e=Qe(t,"outer"),a=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(a,e),onLayoutChanged:e=>n?.("outer",Qn(e,a)),children:[(0,eb.jsx)(h_,{id:a[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:a[1],defaultSize:e[1],minSize:24,children:r[1]})]})}if("left-two-right-one"===e){let e=Qe(t,"outer",[58,42]),a=Qe(t,"left"),i=["left","right"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("left",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:20,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:20,children:r[1]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("left-one-right-two"===e){let e=Qe(t,"outer",[42,58]),a=Qe(t,"right"),i=["left","right"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("right",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:20,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:20,children:r[2]})]})})]})}if("top-two-bottom-one"===e){let e=Qe(t,"outer",[58,42]),a=Qe(t,"top"),i=["top","bottom"],o=["pane-0","pane-1"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("top",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:24,children:r[1]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:r[2]})]})}if("top-one-bottom-two"===e){let e=Qe(t,"outer",[42,58]),a=Qe(t,"bottom"),i=["top","bottom"],o=["pane-1","pane-2"];return(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(i,e),onLayoutChanged:e=>n?.("outer",Qn(e,i)),children:[(0,eb.jsx)(h_,{id:i[0],defaultSize:e[0],minSize:24,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:i[1],defaultSize:e[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(o,a),onLayoutChanged:e=>n?.("bottom",Qn(e,o)),children:[(0,eb.jsx)(h_,{id:o[0],defaultSize:a[0],minSize:24,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:o[1],defaultSize:a[1],minSize:24,children:r[2]})]})})]})}let a=Qe(t,"outer"),i=Qe(t,"left"),o=Qe(t,"right"),l=["left","right"],s=["pane-0","pane-2"],c=["pane-1","pane-3"];return(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:Qt(l,a),onLayoutChanged:e=>n?.("outer",Qn(e,l)),children:[(0,eb.jsx)(h_,{id:l[0],defaultSize:a[0],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(s,i),onLayoutChanged:e=>n?.("left",Qn(e,s)),children:[(0,eb.jsx)(h_,{id:s[0],defaultSize:i[0],minSize:20,children:r[0]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:s[1],defaultSize:i[1],minSize:20,children:r[2]})]})}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:l[1],defaultSize:a[1],minSize:24,children:(0,eb.jsxs)(hD,{direction:"vertical",defaultLayout:Qt(c,o),onLayoutChanged:e=>n?.("right",Qn(e,c)),children:[(0,eb.jsx)(h_,{id:c[0],defaultSize:o[0],minSize:20,children:r[1]}),(0,eb.jsx)(hL,{withHandle:!0}),(0,eb.jsx)(h_,{id:c[1],defaultSize:o[1],minSize:20,children:r[3]})]})})]})}function Qa({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,ez.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(J8)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("cutter");return}if(t.includes(J6)){e.preventDefault(),e.dataTransfer.dropEffect="move",x("shredder");return}t.includes(jH)&&(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(J8)){e.preventDefault(),e.stopPropagation(),x(void 0),d(n);return}if(Array.from(e.dataTransfer.types).includes(J6)){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?.[jH]:void 0;if(n&&r)return{item:n,content:r.content};let i=e.dataTransfer.getData(jH);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,ez.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:jV(r)?J4(r.kind,{tab:r.tab,conversationId:e,ownerMachineId:t,terminalScopeId:e?`agent:${e}:pane:${r.id}`:void 0,terminalState:r.terminal,onTerminalStateChange:e=>{J7(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)(HW,{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 Qi({open:e,onOpenChange:t,onAdd:n}){let r=Ql.map(e=>jF(e.kind)).filter(e=>!!e);return(0,eb.jsx)(vO,{open:e,onOpenChange:t,title:"添加工作区组件",description:"选择一个组件填入当前窗口。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索组件..."}),(0,eb.jsxs)(vz,{children:[(0,eb.jsx)(vA,{children:"没有匹配组件。"}),(0,eb.jsx)(vT,{heading:"可放入窗口",children:r.map(e=>(0,eb.jsxs)(vR,{"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)(vD,{children:"添加"})]},e.id))})]})]})})}function Qo({content:e,index:t,conversationId:n,ownerMachineId:r,workspaceFolders:a,onContentChange:i,onOpenWorkspaceFile:o,onSaveFileTab:l,onOpenFileHistory:s,onRequestFileTab:c}){return jV(e)?J4(e.kind,{tab:e.tab,conversationId:n,ownerMachineId:r,terminalScopeId:n?`agent:${n}:pane:${e.id}`:void 0,terminalState:e.terminal,onTerminalStateChange:n=>{J7(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)(HW,{className:"size-full min-h-0",composerClassName:"max-w-[42.5rem]",initialEvents:e.events},e.id)}let Ql=[{kind:"status-monitor",label:"状态监控",icon:(0,eb.jsx)(uP,{})},{kind:"sidequery-pane",label:"旁问",icon:(0,eb.jsx)(u$,{})},{kind:"hooks-pane",label:"Hook",icon:(0,eb.jsx)(uH,{})},{kind:"plan-doc-viewer",label:"计划文档",icon:(0,eb.jsx)(uz,{})},{kind:"spec-doc-viewer",label:"规范文档",icon:(0,eb.jsx)(UP,{})},{kind:"browser-tab-viewer",label:"预览窗口",icon:(0,eb.jsx)(UI,{})},{kind:"diff-tab-viewer",label:"Diff 栏",icon:(0,eb.jsx)(UE,{})},{kind:"terminal-tab-group",label:"终端窗口",icon:(0,eb.jsx)(uB,{})},{kind:"file-tree-panel",label:"文件树",icon:(0,eb.jsx)(UO,{})},{kind:"file-tab-viewer",label:"文件窗口",icon:(0,eb.jsx)(uD,{})}];function Qs(e,t,n){return Math.min(n,Math.max(t,e))}function Qc({onAddCard:e,align:t="end"}){return(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(xS,{className:"size-3.5 text-muted-foreground"})]})}),(0,eb.jsx)(wt,{align:t,sideOffset:6,className:"min-w-40",children:Ql.map(t=>(0,eb.jsxs)(wn,{onSelect:()=>e(t.kind),children:[t.icon,(0,eb.jsx)("span",{className:"flex-1",children:t.label})]},t.kind))})]})}function Qd({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),z=ew.useRef(null),A=ew.useRef(null);ew.useEffect(()=>{let e={};j(t=>{let n=new Set(g.map(e=>e.content.id)),r=t.map(e=>({...e,cardIds:e.cardIds.filter(e=>n.has(e))})).filter(e=>e.cardIds.length>0),a=new Set(r.flatMap(e=>e.cardIds)),o=g.map(e=>e.content.id).filter(e=>!a.has(e));if(o.length>0){r=r.map(e=>({...e,cardIds:[...e.cardIds]}));let t=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){z.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";z.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):A.current&&function(e,t){let n=A.current;if(!n)return;if("width"===n.kind){let t=Qs(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=Qs(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=z.current;I.current=null,z.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}A.current&&(A.current=null,S(null))})();return window.addEventListener("pointermove",e),window.addEventListener("pointerup",t),window.addEventListener("pointercancel",t),()=>{window.removeEventListener("pointermove",e),window.removeEventListener("pointerup",t),window.removeEventListener("pointercancel",t)}},[N]);let R=a.map((e,t)=>({column:e,realIndex:t}));b&&R.reverse();let D=(0,eb.jsx)("div",{className:(0,ez.cn)("flex shrink-0 px-3 py-2",b?"justify-end":"justify-start"),children:(0,eb.jsx)(Qc,{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,ez.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,ez.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,z.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)(fD,{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)(fP.XIcon,{})})]}),(0,eb.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:(0,eb.jsx)(Qo,{content:a,index:i,conversationId:e,ownerMachineId:t,workspaceFolders:u,onContentChange:c,onOpenWorkspaceFile:f,onSaveFileTab:h,onOpenFileHistory:m,onRequestFileTab:p})})]},a.id)}),n.cardIds.slice(0,-1).map((e,t)=>(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:r=>{var a;return a=n.cardIds[t+1],void(0===r.button&&(r.preventDefault(),r.stopPropagation(),A.current={kind:"height",aboveId:e,belowId:a,startY:r.clientY,hA:T(e),hB:T(a)},S("resize")))},style:{top:r[t]??0},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})},`hbar-${e}`)),l&&!s?(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>{0===e.button&&(e.preventDefault(),e.stopPropagation(),A.current={kind:"growHeight",cardId:l,startY:e.clientY,h0:T(l)},S("resize"))},style:{top:o+6},className:"group/hbar absolute inset-x-0 z-10 flex h-3 -translate-y-1/2 cursor-ns-resize items-center justify-center",children:(0,eb.jsx)("span",{className:"h-1 w-12 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/hbar:opacity-100"})}):null,(0,eb.jsx)("div",{"aria-hidden":!0,onPointerDown:e=>(function(e,t){if(0!==t.button)return;t.preventDefault(),t.stopPropagation();let n=a.find(t=>t.key===e)?.width??360;A.current={kind:"width",columnKey:e,startX:t.clientX,startWidth:n,factor:b?-1:1},S("resize")})(n.key,e),style:b?{left:-6}:{right:-6},className:(0,ez.cn)("group/wbar absolute inset-y-0 z-10 flex w-3 cursor-ew-resize items-center justify-center",b?"-translate-x-1/2":"translate-x-1/2"),children:(0,eb.jsx)("span",{className:"h-12 w-1 rounded-full bg-muted-foreground/40 opacity-0 transition-opacity group-hover/wbar:opacity-100"})})]},n.key)}),E?(0,eb.jsx)("div",{"aria-hidden":!0,className:"pointer-events-none absolute z-40 rounded-full bg-muted-foreground/70",style:{left:E.left,top:E.top,width:E.width,height:E.height}}):null]})}),N?(0,eb.jsx)("div",{"aria-hidden":!0,className:"absolute inset-0 z-50",style:{cursor:"drag"===N?"grabbing":A.current?.kind==="width"?"ew-resize":"ns-resize"}}):null]})}let Qu="vtl:workspace-layout-mode",Qf="vtl:workspace-agent-side",Qh="vtl:workspace-layout-changed",Qm={mode:"pane",agentSide:"left"};function Qp(){let e=Qm.mode,t=Qm.agentSide;try{let n=window.localStorage.getItem(Qu);("pane"===n||"card"===n||"control-room"===n)&&(e=n);let r=window.localStorage.getItem(Qf);("left"===r||"right"===r)&&(t=r)}catch{}return{mode:e,agentSide:t}}function Qg(e){try{e.mode&&window.localStorage.setItem(Qu,e.mode),e.agentSide&&window.localStorage.setItem(Qf,e.agentSide)}catch{}window.dispatchEvent(new CustomEvent(Qh))}function Qx({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=Hj(t.subagentType),i=n===e.length-1,o=r.Icon;return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(pr,{className:"size-3 shrink-0 text-muted-foreground/60"}),(0,eb.jsxs)("button",{type:"button",className:(0,ez.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,ez.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)(hB,{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)(Hi,{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 Qv=[],Qb="vantaloom:file-system-changed",Qy=[{id:"",label:"默认"},{id:"low",label:"低"},{id:"medium",label:"中"},{id:"high",label:"高"},{id:"xhigh",label:"极高"}];function Qw(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 Qj(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 Qk(e){var t;let n=(t=e?.layoutMode,J9.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:QN(e.outer),left:QN(e.left),right:QN(e.right),top:QN(e.top),bottom:QN(e.bottom)}}(e?.sizes),i=Array.from({length:Math.max(4,J9.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:QC(i.title)??"Subagent",subagentId:QC(i.subagentId)??a,events:Array.isArray(i.events)?i.events:[]};if(!jF(e.kind))return;let o=i.tab&&"object"==typeof i.tab?i.tab:void 0,l=Array.isArray(i.tabs)?i.tabs.filter(e=>u0(e?.kind)):void 0,s=jF(e.kind);return{id:a,kind:e.kind,title:QC(i.title)??o?.title??s?.title??"组件",tab:o,tabs:l,activeTabId:QC(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:QC(r.activeSessionId),selectedMachineId:QC(r.selectedMachineId),selectedShellId:QC(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 QN(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 QS(e){return e.filter(e=>"number"==typeof e&&Number.isFinite(e)&&e>0)}function QC(e){return"string"==typeof e&&e.trim()?e:void 0}function QM(e){let t=e?.id.match(/-(\d+)$/);return t?Number(t[1]):0}function QE(e){return e.reduce((e,t)=>Math.max(e,QM(t)),0)}function QP({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=Qk(e?.panes),[x,v]=ew.useState(g.layoutMode),[b,y]=ew.useState(g.agentPosition),w=function(){let[e,t]=ew.useState(Qm);return ew.useEffect(()=>{t(Qp());let e=()=>t(Qp());return window.addEventListener(Qh,e),window.addEventListener("storage",e),()=>{window.removeEventListener(Qh,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),[z,A]=ew.useState(()=>g.cardColumns),[T,R]=ew.useState(()=>g.cardHeights),[D,_]=ew.useState(()=>e?.events??[]),[L,$]=ew.useState(()=>e?.eventsStart??0),[F,B]=ew.useState(()=>e?.eventsTotal??e?.events?.length??0),[V,H]=ew.useState(!1),U=L>0,[q,W]=ew.useState(null),[K,G]=ew.useState(new Set),[X,Y]=ew.useState(void 0),[Z,J]=ew.useState(()=>Uk(e?.conversation.id)),Q=ew.useCallback(t=>{J(t),function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(Uj(e));window.localStorage.setItem(Uj(e),t.slice(0,1e5))}catch{}}(e?.conversation.id,t)},[e?.conversation.id]),[ee,et]=ew.useState(()=>US(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(!1),[ef,eh]=ew.useState(()=>new Set),[em,ep]=ew.useState(void 0),[eg,ex]=ew.useState(""),[ev,ey]=ew.useState(!1),[ej,ek]=ew.useState(void 0),[eN,eS]=ew.useState(""),[eC,eM]=ew.useState(e?.conversation.status==="working"),[eE,eP]=ew.useState(e?.conversation.status??"idle"),[eO,eA]=ew.useState(e?.conversation.awaitingTakeover??!1),[eR,eD]=ew.useState(!1),[e_,eL]=ew.useState(e?.conversation.settings?.permissionMode??"acceptEdits"),[e$,eF]=ew.useState(e?.conversation.settings?.reasoningEffort??""),[eB,eV]=ew.useState([]),[eH,eU]=ew.useState(e?.conversation.tokens??0),[eq,eW]=ew.useState(e?.conversation.runUsage),[eK,eG]=ew.useState(e?.conversation.contextTokens??0),[eX,eY]=ew.useState(!1),eZ=ew.useRef(eE),[eJ,eQ]=ew.useState(),[e0,e1]=ew.useState(),[e2,e5]=ew.useState(),e4=ew.useRef(QE(g.panes)),e3=ew.useRef(0),e6=ew.useRef(""),e8=J9.find(e=>e.id===x)?.slots??4,e7=e?.conversation.settings.folders??Qv,{models:e9}=x6(),te=ew.useMemo(()=>{let t=e?.conversation.settings.mainModels??[];return t.length?e9.filter(e=>t.includes(e.value)).map(e=>({id:e.value,label:e.label})):[]},[e9,e?.conversation.settings.mainModels]),tt=jv(e?.conversation.settings.engine),tn=ew.useMemo(()=>{if(tt){let t=e?.conversation.settings.ccModel;return[{id:t&&""!==t?t:"__cc_model__",label:jb(t),disabled:!0}]}return te},[tt,e?.conversation.settings.ccModel,te]),tr=!tt&&0===te.length,[ta,ti]=ew.useState(!1),to=eC||"working"===eE||ta,tl=ew.useCallback(async t=>{if(!e||eX)return;let n=e.conversation.id,r=e.conversation.ownerMachineId;if(tt){if(to)return void await ct(n,"请执行 /compact 压缩上下文。",r);eM(!0),eP("working");try{let e=await sZ(n,{message:"/compact",modelRef:"",mode:"agent"},r);eP(e.conversation.status)}catch(e){eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"压缩请求失败")}return}if(to)return void await ct(n,"precise"===t?"请在完成当前小任务后进行精确压缩(去除冗余文件读取和旧工具输出)。":"请在完成当前小任务后进行极致压缩(AI摘要),以便继续工作。",r);eY(!0);try{let e=await cr(n,t,void 0,r),a=await sI(n,r);a&&(_(a.events),$(a.eventsStart??0),B(a.eventsTotal??a.events.length),eU(a.conversation.tokens??0),eW(a.conversation.runUsage),eG(a.conversation.contextTokens??0));let i=Math.max(0,Math.round((e?.tokensSaved??0)/1e3));hQ.success(i>0?`${"extreme"===t?"极致":"精确"}压缩完成 \xb7 节省约 ${i}K tokens`:`${"extreme"===t?"极致":"精确"}压缩完成`)}catch(e){hQ.error(e instanceof Error?e.message:"压缩失败")}finally{eY(!1)}},[e,eX,to,tt]),td=ew.useMemo(()=>{if(!e)return;let t=e9.find(e=>e.value===eN),n=t?.contextLength||200,r=eK>0?eK:e.conversation.contextTokens??0;return{used:r,total:1e3*n,toolCalls:r,userMessages:0,other:void 0,onCompressPrecise:()=>tl("precise"),onCompressExtreme:()=>tl("extreme"),compressing:eX}},[e,e9,eN,eK,tl,eX]),tu=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]),tf=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 sz(n,{fromEventId:r,end:L},e?.conversation.ownerMachineId);t.events.length>0&&(_(e=>Qj(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]),th=ew.useCallback(t=>{let n;if(t&&function(e,t){if(e)try{if(!t)return void window.localStorage.removeItem(UC(e));window.localStorage.setItem(UC(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 tu){let t=e.anchorEventId??e.runId,a=D.findIndex(e=>e.id===t);a>=0&&a<=r&&(n=e.runId)}n||(n=tu.find(e=>t===e.runId||t.startsWith(`${e.runId}-`))?.runId),Y(n)},[e?.conversation.id,D,tu]),tm=ew.useCallback(async e=>{if("file-tab-viewer"!==e.kind||e.modified||e.file?.readOnly)return e;try{var t,n;let r=await ff(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}},[]),tp=ew.useCallback(async e=>{if(!e||!jV(e))return e;if("multi-tab-system"===e.kind){var t,n;let r=e.tabs??[],a=await Promise.all(r.map(tm));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 tm(e.tab);return t!==e.tab?{...e,title:t.title,tab:t}:e}return e},[tm]),tg=ew.useCallback(async()=>{var e,t;let n=await Promise.all(O.map(async e=>tp(e)));e=O,t=n,(e.length!==t.length||e.some((e,n)=>e!==t[n]))&&I(n)},[O,tp]);ew.useEffect(()=>{i?.(void 0!==eJ||void 0!==e0||void 0!==e2)},[e0,e2,i,eJ]);let tx=ew.useRef(void 0);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.events??[];if(tx.current!==t){tx.current=t,_(n),$(e?.eventsStart??0),B(e?.eventsTotal??n.length);return}_(e=>Qw(e,n))},[e?.conversation.id,e?.events]);let tv=ew.useCallback(async()=>{let t=e?.conversation.id;if(t&&!(L<=0)&&!V){H(!0);try{let n=await sz(t,{end:L,limit:200},e?.conversation.ownerMachineId);n.events.length>0&&_(e=>Qj(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 tb(e){if(!e.length)return;let t=e.map(jU);r(e=>[...t,...e.filter(e=>!t.some(t=>t.id===e.id))])}function ty(e,t,n){if(!e||!jV(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 tw(e,t){return e&&jV(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 tj(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 tk(e){e4.current+=1;let t=jB(e,`${e}-${e4.current}`);if("browser-tab-viewer"===e&&t.tab){let e=t.tab;(0,eT.fetchLocalDevServers)().then(n=>{tj(n.length>0?{...t,tab:{...e,defaultUrl:n[0]}}:t)});return}tj(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(UC(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(Uk(e?.conversation.id)),et(US(e?.conversation.id)),er([]),ei(void 0),G(new Set)},[e?.conversation.id]),ew.useEffect(()=>{eM(e?.conversation.status==="working"),eP(e?.conversation.status??"idle")},[e?.conversation.id,e?.conversation.status]),ew.useEffect(()=>{eA(e?.conversation.awaitingTakeover??!1)},[e?.conversation.id,e?.conversation.awaitingTakeover]),ew.useEffect(()=>{eU(e?.conversation.tokens??0),eW(e?.conversation.runUsage),eG(e?.conversation.contextTokens??0)},[e?.conversation.id,e?.conversation.tokens,e?.conversation.runUsage,e?.conversation.contextTokens]),ew.useEffect(()=>{eL(e?.conversation.settings?.permissionMode??"acceptEdits")},[e?.conversation.id,e?.conversation.settings?.permissionMode]),ew.useEffect(()=>{eF(e?.conversation.settings?.reasoningEffort??"")},[e?.conversation.id,e?.conversation.settings?.reasoningEffort]),ew.useEffect(()=>{let e=te[0]?.id??"";eS(t=>te.some(e=>e.id===t)?t:e)},[te]),ew.useEffect(()=>{let t=Qk(e?.panes);v(t.layoutMode),y(t.agentPosition),P(t.layoutSizes),I(t.panes),A(t.cardColumns),R(t.cardHeights),e4.current=QE(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=>Qw(t,e.events)),eP(e.conversation.status),eU(e.conversation.tokens??0),eW(e.conversation.runUsage),eG(e.conversation.contextTokens??0),eA(e.conversation.awaitingTakeover??!1)},o=e=>{void 0===t&&(t=window.setInterval(async()=>{try{let e=await sI(n,r);if(a)return;i(e),eM("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=ca(JSON.parse(e.data));i(t),eM("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(()=>{tg()},3e3);return()=>window.clearInterval(t)},[e?.conversation.id,tg]),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!==e6.current&&(e6.current=e,window.dispatchEvent(new CustomEvent(Qb)),tg())},[D,tg]),ew.useEffect(()=>{let t=e?.conversation.id;if(!t)return;let n=window.setTimeout(()=>{var n;let r;sK(t,(n={columns:z,heights:T},r=[],O.forEach((e,t)=>{if(e){if(jV(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,z,T,e?.conversation.id,x,E,O]);let tN=ew.useCallback(e=>{I(t=>{let n=t.findIndex(e=>e?.kind==="browser-tab-viewer");if(n>=0){let r=t[n];return r&&jV(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}e4.current+=1;let r=jB("browser-tab-viewer",`browser-tab-viewer-${e4.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]),tS=ew.useRef(!1);function tC(e){I(t=>{if(t.findIndex(t=>t?.kind===e)>=0)return t;e4.current+=1;let n=jB(e,`${e}-${e4.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;tS.current=!1;let r=!1,a=async()=>{if(!r&&!tS.current)try{let e=(await (0,eT.fetchLocalDevServers)())[0];if(r||tS.current||!e)return;tS.current=!0,tN(e)}catch{}};a();let i=window.setInterval(a,3e3);return()=>{r=!0,window.clearInterval(i)}},[e?.conversation.id,e?.conversation.ownerMachineId,tN]);let tM=ew.useCallback((e,t)=>{I(n=>{if(n.some(n=>void 0!==n&&jV(n)&&(n.id===t||(n.terminal?.sessionIds??[]).includes(e.id))))return n;let r={...jB("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]),tE=ew.useRef(new Set);ew.useEffect(()=>{let t=e?.conversation.id,n=e?.conversation.ownerMachineId;if(!t||n&&"local"!==n)return;tE.current=new Set;let r=`agent:${t}:pane:`,a=!1,i=async()=>{if(!a)try{let{sessions:e}=await fk();if(a)return;for(let t of e){if(!0!==t.aiControlled||"agent"!==t.controller||!t.scopeId||!t.scopeId.startsWith(r)||tE.current.has(t.id))continue;let e=t.scopeId.slice(r.length);e&&(tE.current.add(t.id),tM(t,e))}}catch{}};i();let o=window.setInterval(i,4e3);return()=>{a=!0,window.clearInterval(o)}},[e?.conversation.id,e?.conversation.ownerMachineId,tM]);let tP=ew.useCallback(()=>{tC("plan-doc-viewer")},[j]),tO=ew.useCallback(()=>{tC("spec-doc-viewer")},[j]),tI=ew.useCallback(()=>{tC("tasks-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 tz=q??e?.conversation.planState??null,tA=ew.useRef(void 0);ew.useEffect(()=>{let e=tz?.approvals?.find(e=>!e.decision);e&&tA.current!==e.id&&(tA.current=e.id,tP())},[tz,tP]);let tT=ew.useRef(void 0);function tR(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);e4.current+=1;let a={id:`${e}-${e4.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 tD(e,t,n){try{let r=await fd(e);if(j)return void tR("file-tab-viewer",r);I(e=>e.map((e,a)=>a===t?ty(e,r,n):e))}catch{hQ.error("文件预览打开失败")}}function t_(e){if(j)return void tD(e,-1);let t=O.slice(0,e8).findIndex(e=>e?.kind==="multi-tab-system");t<0?hQ.warning("请先放入一个多标签页组件"):tD(e,t)}function tL(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 tR("diff-tab-viewer",n);let r=O.slice(0,e8).findIndex(e=>e?.kind==="multi-tab-system");r<0?hQ.warning("请先放入一个多标签页组件"):I(e=>e.map((e,t)=>t===r?ty(e,n):e))}(e):!t||e.meta?.toLowerCase().startsWith("depth")||t_({machineId:e.machineId??"local",path:t})}ew.useEffect(()=>{let t=e?.conversation.id;!t||tT.current===t||D.some(e=>"task"===e.kind)&&(tT.current=t,tI())},[e?.conversation.id,D,tI]);let t$=e?.conversation.ownerMachineId??"local",tF=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 u8(t$,t);if("utf-8"===e.encoding&&"folder"!==e.kind&&!e.truncated)return void t_({machineId:t$,path:t});let a=(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(t$)}/files/raw?path=${encodeURIComponent(t)}`);await m6({url:a,label:r}),hQ.success(`已开始下载「${r}」,可在 系统设置 → 下载 查看进度`)}catch(e){hQ.error(`打开交付物失败:${e instanceof Error?e.message:String(e)}`)}};return{resolveImageSrc:t=>{if(e(t))return t;let n=`path=${encodeURIComponent(t)}`;return"local"===t$?(0,eT.localAPIURL)(`/v1/files/raw?${n}`):(0,eT.localAPIURL)(`/v1/remote/${encodeURIComponent(t$)}/files/raw?${n}`)},classify:t=>e(t)?"url":"local"===t$?"local-file":"remote-file",onOpen:e=>void t(e)}},[t$]);async function tB(e,t,n){let r=t.file?.path,a=t.file?.machineId??"local";if(!r)throw hQ.error("文件路径不可用"),Error("file path is unavailable");try{let i=await u7({machineId:a,path:r,content:n}),o={...await fu(i,{id:t.id,title:t.title,defaultView:t.defaultView,defaultMode:t.defaultMode}),modified:!1};I(t=>t.map((t,n)=>n===e?tw(t,o):t)),window.dispatchEvent(new CustomEvent(Qb)),hQ.success("文件已保存")}catch(e){throw hQ.error("文件保存失败"),e}}async function tV(t){let n=e?.conversation.id,r=e2?.tab.file?.path,a=e2?.tab.file?.machineId??"local";if(e2&&n&&r)try{let i=await s3(n,{machineId:a,path:r,mutationId:t.mutationId,state:t.state},e?.conversation.ownerMachineId),o=await fu(i,{id:e2.tab.id,title:`${i.name} @ ${QI(t.mutationId)} ${"before"===t.state?"before":"after"}`,readOnly:!0,defaultView:e2.tab.defaultView,defaultMode:"review"});I(e=>e.map((e,t)=>t===e2.paneIndex?tw(e,o):e)),e5(void 0)}catch{hQ.error("历史版本打开失败")}}function tH(e,t,n){let i=O[e];e4.current=Math.max(e4.current,QM(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=jU(i);return[r,...n.filter(e=>e.id!==r.id)]}),a?.(void 0)}function tU(e,t){I(n=>n.map((n,r)=>r===e?t:n))}function tq(t){return{id:t.id,ownerMachineId:t.ownerMachineId??e?.conversation.ownerMachineId,name:t.name,subagentType:t.subagentType}}function tW(e){var t=O[e];if(t&&jV(t)&&"terminal-tab-group"===t.kind)for(let e of t.terminal?.sessionIds??[])fS(e).catch(()=>{});I(t=>t.map((t,n)=>n===e?void 0:t))}function tK(e){let t=O[e];t&&tb([t]),I(t=>t.map((t,n)=>n===e?void 0:t))}async function tG(t,n="chat",r=[]){let a=e?.conversation.id,i=tt?"":eN||te[0]?.id||"";if(!a||(t.trim()&&et(function(e,t){let n=t.trim();if(!n)return US(e);let r=n.slice(0,1e5),a=US(e);if(a[a.length-1]===r)return a;let i=[...a,r].slice(-100);if(e&&1)try{window.localStorage.setItem(UN(e),JSON.stringify(i))}catch{}return i}(a,t)),eC||"working"===eE))return;if(!tt&&!i)return void hQ.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??"")!=="");eM(!0),eP("working");try{let r=await sZ(a,{message:t,modelRef:i,mode:n,effort:e$||void 0,attachments:o.length>0?o:void 0},e?.conversation.ownerMachineId);eP(r.conversation.status)}catch(e){eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"对话请求失败")}}async function tX(t){let n=e?.conversation.id,r="string"==typeof t.modelRef?t.modelRef.trim():"",a=tt?"":r||eN||te[0]?.id||"",i="agent"===t.mode?"agent":"chat";if(n){if(!tt&&!a)return void hQ.error("请先在代理模型配置里选择模型");eM(!0),eP("working"),_(e=>e.map(e=>e.id===t.id?{...e,status:"retried"}:e));try{let r=await sJ(n,{modelRef:a,mode:i,effort:e$||void 0,retryEventId:t.id},e?.conversation.ownerMachineId);eP(r.conversation.status)}catch(e){_(e=>e.map(e=>e.id===t.id?t:e)),eM(!1),eP("idle"),hQ.error(e instanceof Error?e.message:"对话重试失败")}}}function tY(e){to?hQ.error("对话正在运行,请先停止后再回退"):ei(e)}async function tZ(){let t=e?.conversation.id;if(t&&!eR){eD(!0);try{let n=await s9(t,e?.conversation.ownerMachineId);eA(n.conversation.awaitingTakeover??!1)}catch(e){hQ.error(e instanceof Error?e.message:"接管失败")}finally{eD(!1)}}}async function tJ(){let t=e?.conversation.id;if(!ea||!t)return void ei(void 0);el(!0);try{let n=await sQ(t,ea.id,e?.conversation.ownerMachineId);_(n.detail.events),$(0),B(n.detail.events.length),eP(n.detail.conversation.status),eM(!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} 个子代理`),hQ.success(r.length?`已回退:${r.join(",")}`:"已回退到此处"),n.skippedRemote&&n.skippedRemote.length>0&&hQ.warning(`${n.skippedRemote.length} 个远程文件未自动回退,请在对应机器手动处理`)}catch(e){hQ.error(e instanceof Error?e.message:"回退失败")}finally{el(!1),ei(void 0)}}async function tQ(t){let n=e?.conversation.id;if(n&&!es){ec(!0);try{let r=await s5(n,t.id,e?.conversation.ownerMachineId);o?.(r),hQ.success("已创建分支对话")}catch(e){hQ.error(e instanceof Error?e.message:"创建分支失败")}finally{ec(!1)}}}function t0(e){_(e.events),$(0),B(e.events.length),eP(e.conversation.status)}function t1(){to?hQ.error("对话正在运行,请先停止后再编辑上下文"):eu(!0)}function t2(){eu(!1),eh(new Set),ep(void 0),ex("")}function t5(e){eh(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function t4(e,t){let n=D.findIndex(t=>t.id===e),r=D.findIndex(e=>e.id===t);if(n<0||r<0)return;let a=Math.min(n,r),i=Math.max(n,r);eh(e=>{let t=new Set(e);for(let e=a;e<=i;e++){let n=D[e];n&&"user"!==n.kind&&t.add(n.id)}return t})}function t3(e){to?hQ.error("对话正在运行,请先停止后再删除"):0!==e.length&&ek(e)}async function t6(){let t=e?.conversation.id;if(!ej||0===ej.length||!t)return void ek(void 0);ey(!0);try{let n=await s0(t,ej,e?.conversation.ownerMachineId);t0(n.detail),eh(new Set),hQ.success(`已从上下文删除 ${n.deletedEvents||ej.length} 条`)}catch(e){hQ.error(e instanceof Error?e.message:"删除失败")}finally{ey(!1),ek(void 0)}}function t8(e,t){ep(e),ex(t)}async function t7(){let t=e?.conversation.id;if(!em||!t)return void ep(void 0);ey(!0);try{let n=await s1(t,em,eg,e?.conversation.ownerMachineId);t0(n.detail),ep(void 0),ex(""),hQ.success("已更新消息")}catch(e){hQ.error(e instanceof Error?e.message:"保存失败")}finally{ey(!1)}}function t9(){ep(void 0),ex("")}async function ne(t,n){let r=e?.conversation.id;if(r){ey(!0);try{let a=await s2(r,[t],n,e?.conversation.ownerMachineId);t0(a.detail)}catch(e){hQ.error(e instanceof Error?e.message:n?"还原失败":"翻译失败")}finally{ey(!1)}}}let nt=ew.useMemo(()=>{if(!tt)return{mode:ed,selectedIds:ef,onToggleSelect:t5,onRangeSelect:t4,onEnterMode:t1,onExitMode:t2,onDeleteOne:e=>t3([e]),editingId:em,editDraft:eg,onStartEdit:t8,onEditDraftChange:ex,onSaveEdit:()=>void t7(),onCancelEdit:t9,onTranslate:e=>void ne(e,!1),onRestore:e=>void ne(e,!0)}},[tt,ed,ef,em,eg]),nn=e&&eO?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex flex-wrap items-center gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"min-w-0 flex-1 text-muted-foreground",children:"这个对话由任务分发代理管理,已锁定输入"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",className:"w-full sm:w-auto",disabled:eR,onClick:()=>void tZ(),children:"接管"})]}):null,nr=nt&&em?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex items-center justify-end gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"mr-auto text-muted-foreground",children:"编辑消息"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",disabled:ev,onClick:t9,children:"取消"}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",disabled:ev,onClick:()=>void t7(),children:"保存"})]}):nt&&ed?(0,eb.jsxs)("div",{className:"vtl-agent-composer-overlay mb-[-1px] flex items-center justify-end gap-2 rounded-t-xl border border-b-0 border-border bg-background px-3 py-2 text-sm",children:[(0,eb.jsx)("span",{className:"mr-auto text-muted-foreground",children:"编辑上下文"}),(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",variant:"destructive",disabled:ev||0===ef.size,onClick:()=>t3([...ef]),children:["删除选中 (",ef.size,")"]}),(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:"ghost",onClick:t2,children:"退出编辑"})]}):void 0;async function na(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){hQ.error(e instanceof Error?e.message:"设置更新失败")}}async function ni(t,n){let r=e?.conversation.id;if(r)try{await s6(r,t,n,void 0,e?.conversation.ownerMachineId)}catch(e){hQ.error(e instanceof Error?e.message:"审批操作失败")}}async function no(t){let n=e?.conversation.id;return n?s8(n,t,e?.conversation.ownerMachineId):{state:"error",explanation:""}}async function nl(){let t=e?.conversation.id;if(t){ti(!0);try{await s7(t,e?.conversation.ownerMachineId)}catch{}}}function ns(){tG("继续","agent")}async function nc(t){let n=e?.conversation.id;if(!n)return;let r=eB.find(e=>e.id===t);if(!r)return;let a="string"==typeof r.content?r.content:String(r.content??"");if(a.trim()){eV(e=>e.filter(e=>e.id!==t));try{await ct(n,a.trim(),e?.conversation.ownerMachineId)}catch{}}}ew.useEffect(()=>{"idle"===eE&&ta&&ti(!1)},[eE,ta]),ew.useEffect(()=>{let e=eZ.current;if(eZ.current=eE,"working"===e&&"idle"===eE&&eB.length>0){let e=eB[0];if(e){eV(eB.slice(1));let t="string"==typeof e.content?e.content:String(e.content??"");t.trim()&&tG(t.trim(),"agent")}}},[eE]);let nd=Array.from({length:e8},(r,a)=>(0,eb.jsx)(Qa,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,index:a,content:O[a],clipboardItems:t,clipboardDraggingId:n,onAdd:()=>eQ(a),onPanelDrop:tH,onContentChange:tU,onClear:tW,onCut:tK,workspaceFolders:e7,onRequestFileTab:(e,t)=>e1({paneIndex:e,insertIndex:t}),onOpenWorkspaceFile:t_,onSaveFileTab:tB,onOpenFileHistory:(e,t)=>e5({paneIndex:e,tab:t})},a)),nu=O.slice(0,e8).some(e=>e?.kind==="subagent-conversation-panel"),nf=E.shell?.agent??42,nh=E.shell?.panes??58,nm=w.agentSide,np="control-room"===w.mode||k,ng=(0,eb.jsxs)(m1,{type:"single",value:np?"hidden":nm,variant:"outline",size:"sm","data-tour":"control-room-toggle","aria-label":"Agent 面板位置",onValueChange:e=>{"left"===e||"right"===e?(N(!1),y(e),Qg({mode:j?"card":"pane",agentSide:e})):"hidden"===e&&(N(!0),Qg({mode:"control-room"}))},children:[(0,eb.jsx)(m2,{value:"left","aria-label":"Agent 在左",title:"Agent 在左",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cl,{})}),(0,eb.jsx)(m2,{value:"hidden","aria-label":"隐藏面板,居中对话",title:"隐藏面板,居中对话",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cu,{})}),(0,eb.jsx)(m2,{value:"right","aria-label":"Agent 在右",title:"Agent 在右",className:"h-7 w-9 px-0 [&_svg]:size-4",children:(0,eb.jsx)(cc,{})})]}),nx=(0,eb.jsxs)("div",{className:"relative flex size-full min-h-0 min-w-0 flex-col",children:[e?(0,eb.jsx)(HG,{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)(HX,{rounds:tu,onJumpToRound:tf,activeRunId:X})})}):null,(0,eb.jsx)("div",{className:"min-h-0 flex-1 pl-10",children:(0,eb.jsx)(HW,{ref:m,events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?tv:void 0,models:e?tn:void 0,modelId:tt?tn[0]?.id:eN,permissionModeId:e_,onPermissionModeChange:t=>{eL(t),e?.conversation.id&&na({permissionMode:t})},running:to,disabled:!!e&&(tr||eO),onModelChange:eS,effortOptions:e?Qy:void 0,selectedEffort:e$,onEffortChange:t=>{eF(t),e?.conversation.id&&na({reasoningEffort:t})},onSubmit:e?e=>{tG(e.value,"agent",e.attachments??[])}:void 0,onStop:nl,onOpenFile:tL,deliverable:tF,onOpenSubagent:function(e){e.id&&c?.([tq(e)])},onOpenPlan:tP,onOpenSpec:()=>tO(),onOpenTasks:tI,planPromptBar:nn||(e?(0,eb.jsx)(Ux,{conversationId:e.conversation.id,ownerMachineId:e.conversation.ownerMachineId,planState:tz,modelRef:eN||te[0]?.id||"",onOpenPlan:tP,onResolved:()=>{let t=e?.conversation.id;t&&sR(t,e?.conversation.ownerMachineId).then(e=>W(e.planState))}}):void 0),onRetry:tX,onApprovalDecision:ni,onFetchExplanation:no,onContinue:ns,onRecallUserMessage:tY,onBranchAssistantMessage:tQ,contextEdit:nt,contextEditBar:nn?void 0:nr,onActiveEventChange:th,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:eB,onQueuedMessagesChange:eV,onNudge:nc,contextUsage:td})}),s.length>0&&e?(0,eb.jsx)(Qx,{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,tq(e)])}}):null]}),nv=(0,eb.jsx)(h_,{id:"agent",defaultSize:nf,minSize:28,children:nx},"agent-conversation"),nb=(0,eb.jsx)(h_,{id:"panes",defaultSize:nh,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":nu?"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)(mN,{value:x,onValueChange:e=>{let t,n;return t=J9.find(t=>t.id===e)?.slots??4,void((n=O.slice(t).filter(e=>!!e)).length&&tb(n),I(Array.from({length:Math.max(4,t)},(e,n)=>n<t?O[n]:void 0)),v(e))},children:(0,eb.jsx)(mA,{children:J9.map(e=>(0,eb.jsx)(mT,{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))})}),ng,(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(J8,"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(J6,"clear")},children:(0,eb.jsx)(cf,{})})]})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:(0,eb.jsx)(Qr,{mode:x,sizes:E,onSizeGroupChange:function(e,t){let n=QS(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:nd},`${e?.conversation.id??"empty"}-${x}`)})]})},"agent-panes"),ny=(0,eb.jsx)(Qd,{conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,panes:O,agentSide:nm,columns:z,heights:T,onColumnsChange:A,onHeightsChange:R,onAddCard:tk,onContentChange:tU,onClear:tW,workspaceFolders:e7,onOpenWorkspaceFile:t_,onSaveFileTab:tB,onOpenFileHistory:(e,t)=>e5({paneIndex:e,tab:t}),onRequestFileTab:(e,t)=>e1({paneIndex:e,insertIndex:t})}),nw=(0,eb.jsx)("div",{className:(0,ez.cn)("absolute inset-y-0 z-30 flex w-9 items-center","left"===nm?"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"===nm?S?(0,eb.jsx)(cd,{}):(0,eb.jsx)(cs,{}):S?(0,eb.jsx)(tc,{}):(0,eb.jsx)(ts,{})})}),nj=(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(Qi,{open:void 0!==eJ,onOpenChange:e=>{e||eQ(void 0)},onAdd:function(e){if(void 0===eJ)return;e4.current+=1;let t=jB(e,`${e}-${e4.current}`),n=O[eJ];n&&tb([n]),I(e=>e.map((e,n)=>n===eJ?t:e)),eQ(void 0)}}),(0,eb.jsx)(Um,{open:void 0!==e0,folders:e7,onOpenChange:e=>{e||e1(void 0)},onSelectFile:e=>{e0&&tD(e,e0.paneIndex,e0.insertIndex),e1(void 0)}}),(0,eb.jsx)(QO,{open:void 0!==e2,conversationId:e?.conversation.id,ownerMachineId:e?.conversation.ownerMachineId,tab:e2?.tab,onOpenChange:e=>{e||e5(void 0)},onSelectVersion:e=>{tV(e)}}),(0,eb.jsx)(ua,{open:void 0!==ea,onOpenChange:e=>{e||eo||ei(void 0)},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"回退对话到此处?"}),(0,eb.jsx)(uC,{children:"此操作会归档此处之后的所有对话记录,并把这期间(含子代理)对文件的修改全部还原到当前这条消息发送前的状态。该用户消息会回到输入框。回退无法撤销。"})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{disabled:eo,children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",disabled:eo,onClick:e=>{e.preventDefault(),tJ()},children:eo?"回退中…":"确认回退"})]})]})}),(0,eb.jsx)(ua,{open:void 0!==ej,onOpenChange:e=>{e||ev||ek(void 0)},children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"从上下文中删除?"}),(0,eb.jsx)(uC,{children:`确认从上下文中删除选中的 ${ej?.length??0} 条?此操作会同时从智能体的实际上下文中移除(不影响磁盘文件)。`})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{disabled:ev,children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",disabled:ev,onClick:e=>{e.preventDefault(),t6()},children:ev?"删除中…":"确认删除"})]})]})})]});return e?h?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(j_,{view:u,onPaneCountChange:f,conversationPanel:(0,eb.jsx)(HW,{flowContentClassName:"pl-10",events:e?D:void 0,hasEarlier:e?U:void 0,loadingEarlier:e?V:void 0,onLoadEarlier:e?tv:void 0,models:e?tn:void 0,modelId:tt?tn[0]?.id:eN,permissionModeId:e_,onPermissionModeChange:t=>{eL(t),e?.conversation.id&&na({permissionMode:t})},running:to,disabled:!!e&&(tr||eO),onModelChange:eS,effortOptions:e?Qy:void 0,selectedEffort:e$,onEffortChange:t=>{eF(t),e?.conversation.id&&na({reasoningEffort:t})},onSubmit:e?e=>{tG(e.value,"agent",e.attachments??[])}:void 0,onStop:nl,onOpenFile:tL,deliverable:tF,onOpenSubagent:function(e){var t;let n=O.slice(0,e8),r=n.findIndex(e=>!e),a=n.findIndex(e=>e?.kind==="subagent-conversation-panel"),i=r>=0?r:a;if(i<0)return void hQ.warning("请释放一个窗口再选中浏览");e3.current+=1;let o={id:t=`subagent-${e.id}-${e3.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:tX,onApprovalDecision:ni,onFetchExplanation:no,onContinue:ns,onRecallUserMessage:tY,onBranchAssistantMessage:tQ,contextEdit:nt,planPromptBar:nn??void 0,contextEditBar:nn?void 0:nr,onActiveEventChange:th,composerValue:Z,onComposerValueChange:Q,promptHistory:ee,attachments:en,onAttachmentsChange:er,queuedMessages:eB,onQueuedMessagesChange:eV,onNudge:nc,contextUsage:td}),paneElements:nd,panes:O,activeSlotCount:e8,onOpenPalette:eQ,timeline:(0,eb.jsx)(HX,{rounds:tu,onJumpToRound:tf,activeRunId:X})}),nj,(0,eb.jsx)(h3,{position:"top-center"})]}):(0,eb.jsxs)("div",{className:"vtl-app-background vtl-agent-conversation-workspace relative h-full min-h-0",children:[np?(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)(hD,{direction:"horizontal",children:nb})}),(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)(hD,{direction:"horizontal",children:nv}),(0,eb.jsx)("div",{className:"absolute right-3 top-1.5 z-20",children:ng})]}),(0,eb.jsx)("div",{className:"relative min-h-0 min-w-0 flex-1",children:(0,eb.jsx)(Uw,{conversationTitle:e.conversation.title,rootEvents:D,rootOwnerMachineId:e.conversation.ownerMachineId,running:to,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:nx}),(0,eb.jsx)("div",{className:(0,ez.cn)("absolute top-2 z-20 flex items-center gap-2","left"===nm?"right-3":"left-3"),children:(0,eb.jsx)(Qc,{onAddCard:tk,align:"left"===nm?"end":"start"})})]}):j?(0,eb.jsx)("div",{className:"flex h-full min-h-0 overflow-x-auto",children:"left"===nm?(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:nx}),(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:ny})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:"flex h-full min-h-0 shrink-0 flex-col",children:ny}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-[20rem] flex-1 flex-col",children:nx})]})}):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)(hD,{direction:"horizontal",children:nb})}),(0,eb.jsx)("div",{className:"relative flex h-full min-h-0 min-w-0 flex-1 flex-col",children:nx}),nw]}):(0,eb.jsxs)("div",{className:"group/panes relative flex h-full min-h-0",children:[(0,eb.jsxs)(hD,{direction:"horizontal",defaultLayout:{agent:nf,panes:nh},onLayoutChanged:e=>{let t=e.agent??nf,n=e.panes??nh;!function(e){let t=QS(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"===nm?[t,n]:[n,t])},children:["left"===nm?nv:nb,(0,eb.jsx)(hL,{withHandle:!0}),"left"===nm?nb:nv]},`${e?.conversation.id??"empty"}-${nm}`),nw]}),nj,(0,eb.jsx)(h3,{position:"top-right"})]}):(0,eb.jsx)(jz,{onCreated:e=>o?.(e),onCancel:l})}function QO({open:e,conversationId:t,ownerMachineId:n,tab:r,onOpenChange:a,onSelectVersion:i}){let[o,l]=ew.useState([]),[s,c]=ew.useState(!1),d=r?.file?.path,u=r?.file?.machineId??"local";return ew.useEffect(()=>{if(!e||!t||!d)return void l([]);let r=!1;return c(!0),s4(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)(dD,{open:e,onOpenChange:a,children:(0,eb.jsxs)(fI,{className:"max-w-xl gap-0 overflow-hidden p-0",children:[(0,eb.jsx)(fT,{className:"sr-only",children:"历史版本"}),(0,eb.jsx)(fR,{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:[QI(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 QI(e){return e.replace(/^mut-/,"").slice(0,16)}var Qz=["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}},{}),QA=ew.forwardRef((e,t)=>(0,eb.jsx)(Qz.label,{...e,ref:t,onMouseDown:t=>{t.target.closest("button, input, select, textarea")||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));function QT({className:e,...t}){return(0,eb.jsx)(QA,{"data-slot":"label",className:(0,ez.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 QR({className:e,orientation:t="horizontal",...n}){return(0,eb.jsx)("div",{role:"separator","aria-orientation":t,"data-slot":"separator","data-orientation":t,className:(0,ez.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 QD(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 Q_(e){return(await QK(`/api/local/skills${QD(e)}`)).skills??[]}async function QL(e,t){return QK(`/api/local/skills/${encodeURIComponent(e)}${QD(t)}`)}async function Q$(e){await QK(`/api/local/skills/${encodeURIComponent(e)}`,{method:"DELETE"})}async function QF(e,t){return QK("/api/local/skills/install",{method:"POST",body:JSON.stringify({name:e,...t})})}async function QB(e,t){return QK("/api/local/skills/pull",{method:"POST",body:JSON.stringify({name:e,source:t})})}async function QV(){return(await QK("/api/local/skills/sources")).sources??[]}async function QH(e){let t=new URLSearchParams;e?.scope&&t.set("scope",e.scope),e?.conversationId&&t.set("conversationId",e.conversationId),e?.workspace&&t.set("workspace",e.workspace);let n=t.toString();return(await QK(`/api/local/memory${n?`?${n}`:""}`)).memories??[]}async function QU(e,t,n){return QK(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${QD(n)}`)}async function Qq(e){return QK("/api/local/memory",{method:"POST",body:JSON.stringify(e)})}async function QW(e,t,n){await QK(`/api/local/memory/${encodeURIComponent(e)}/${encodeURIComponent(t)}${QD(n)}`,{method:"DELETE"})}async function QK(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}QA.displayName="Label";let QG={global:"全局",project:"项目",conversation:"对话"},QX=[{value:"code-style",label:"代码风格"},{value:"pattern",label:"模式"},{value:"spec",label:"规范"},{value:"preference",label:"偏好"},{value:"reference",label:"参考"}];function QY({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 QH(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 QU(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 Qq({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 QW(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,ez.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)(bv,{className:"size-4"})})}),c?(0,eb.jsx)("p",{className:"text-sm text-destructive",children:c}):null,(0,eb.jsxs)(mN,{value:x,onValueChange:e=>v(e),children:[a.length>1?(0,eb.jsx)(mA,{className:"w-full",children:a.map(e=>(0,eb.jsx)(mT,{value:e,className:"flex-1",children:QG[e]},e))}):null,a.map(e=>{let t=i.filter(t=>t.scope===e);return(0,eb.jsxs)(mR,{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"}),"新增",QG[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:["暂无",QG[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)(Bk,{variant:"secondary",className:"shrink-0",children:(t=e.type,QX.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)(bb,{className:"size-3.5"}),"删除"]})]})]},`${e.scope}-${e.name}`)})})]},e)})]}),(0,eb.jsx)(dD,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fI,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsx)(fz,{children:(0,eb.jsxs)(fT,{children:[h?.editing?"编辑记忆":"新增记忆","(",h?QG[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)(QT,{className:"text-sm",children:"名称 (slug)"}),(0,eb.jsx)(eA,{value:h.name,disabled:h.editing,onChange:e=>m({...h,name:e.currentTarget.value}),placeholder:"例如 api-error-handling"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"描述"}),(0,eb.jsx)(eA,{value:h.description,onChange:e=>m({...h,description:e.currentTarget.value}),placeholder:"一行用于相关性匹配的描述"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"类型"}),(0,eb.jsxs)(gG,{value:h.type,onValueChange:e=>m({...h,type:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:QX.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"正文"}),(0,eb.jsx)(wc,{value:h.body,onChange:e=>m({...h,body:e.currentTarget.value}),rows:10,className:"resize-none text-sm",placeholder:"记忆正文(Markdown)"})]})]}):null,(0,eb.jsxs)(fA,{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)(Gw,{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"}]]),QJ=(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 QQ({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([Q_(w),QV()]);a(e),o(t)}catch(e){d(e instanceof Error?e.message:"读取技能失败")}finally{s(!1)}},[w]);async function k(e){g(!0);try{let t=await QL(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 Q$(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 QF(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 QB(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,ez.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)(gG,{value:x||"local",onValueChange:e=>v("local"===e?"":e),children:[(0,eb.jsx)(xM,{className:"h-9 w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择源"})}),(0,eb.jsx)(xO,{children:0===i.length?(0,eb.jsx)(xI,{value:"local",children:"local"}):i.map(e=>(0,eb.jsxs)(xI,{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)(bv,{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)(Bk,{variant:"workspace"===e.scope?"default":"secondary",children:"workspace"===e.scope?"工作区":"全局"}),e.source?(0,eb.jsx)(Bk,{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)(uD,{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)(QJ,{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)(bb,{className:"size-3.5"}),"删除"]}):null]})]},`${e.scope}-${e.name}`))}),(0,eb.jsx)(dD,{open:!!h,onOpenChange:e=>!e&&m(null),children:(0,eb.jsxs)(fI,{className:"max-h-[85vh] max-w-2xl",children:[(0,eb.jsxs)(fz,{children:[(0,eb.jsx)(fT,{children:h?.name}),(0,eb.jsx)(fR,{children:h?.description})]}),h?.whenToUse?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["何时使用:",h.whenToUse]}):null,(0,eb.jsx)(wK,{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 Q0({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)(QT,{className:"text-sm",children:"技能"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,本对话的 agent 不会获得技能工具,系统提示词也不再列出可用技能。"})]}),(0,eb.jsx)(bt,{checked:"off"!==(t||"on"),onCheckedChange:e=>r(e?"on":"off")})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"记忆"}),(0,eb.jsxs)(gG,{value:n||"on",onValueChange:a,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"on",children:"开启(注入 + 可读写)"}),(0,eb.jsx)(xI,{value:"readonly",children:"只读(注入 + 仅可读,禁止写入/删除)"}),(0,eb.jsx)(xI,{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)(QQ,{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)(QY,{conversationId:e,scopes:["project","conversation"]})]})]})}let Q1=(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 Q2({className:e,variant:t,...n}){return(0,eb.jsx)("div",{role:"alert","data-slot":"alert",className:(0,ez.cn)(Q1({variant:t}),e),...n})}function Q5({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-title",className:(0,ez.cn)("mb-1 leading-none font-medium",e),...t})}function Q4({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"alert-description",className:(0,ez.cn)("text-muted-foreground [&_p]:leading-relaxed",e),...t})}function Q3({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 jy(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 jw(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(Gw,{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)(wc,{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 Q6=[{id:"models",label:"模型"},{id:"tools",label:"工具权限"},{id:"commands",label:"禁止命令"},{id:"folders",label:"工作区文件夹"},{id:"system-prompt",label:"系统提示词"},{id:"skill-memory",label:"技能与记忆"},{id:"hosts",label:"可访问主机"}];function Q8({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=jv(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)(fP.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:Q6.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,ez.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)(gG,{value:""===n?jg:n,onValueChange:e=>i?.(e===jg?"":e),children:[(0,eb.jsx)(xM,{id:"conversation-cc-model",className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(x8,{conversation:e,mainModels:t,onMainModelsChange:a})]}):null,"tools"===u?(0,eb.jsx)(jl,{value:r.allowedTools,onChange:e=>o({...r,allowedTools:e,deniedTools:[]})}):null,"commands"===u?(0,eb.jsx)(js,{value:r.blockedCommands,onChange:e=>o({...r,blockedCommands:e})}):null,"folders"===u?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)(jc,{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)(Q3,{conversationId:e.id}),"skill-memory"!==u||h?null:(0,eb.jsx)(Q0,{conversationId:e.id,skillPolicy:e.settings.skillPolicy,memoryPolicy:e.settings.memoryPolicy,onSkillPolicyChange:e=>l?.(e),onMemoryPolicyChange:e=>s?.(e)}),"hosts"===u?(0,eb.jsx)(jp,{value:r.hosts,onValueChange:e=>o({...r,hosts:e}),disabled:h,hint:h?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0}):null]})})]})}function Q7({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)(Q8,{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 Q9=[{value:"reclaude",label:"reclaude(RC)"},{value:"claude-code",label:"Claude Code(CC)"}];function eee({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)(dD,{open:e,onOpenChange:t,children:(0,eb.jsxs)(fI,{className:"flex max-h-[85vh] max-w-xl flex-col gap-4",children:[(0,eb.jsxs)(fz,{children:[(0,eb.jsx)(fT,{children:"导入 Claude 会话"}),(0,eb.jsx)(fR,{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,ez.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)(bf,{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)(gG,{value:d,onValueChange:e=>u(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xO,{children:Q9.map(e=>(0,eb.jsx)(xI,{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)(gG,{value:""===f?jg:f,onValueChange:e=>h(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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 eet(e){return!e||"local"===e}async function een(e,t){return eeo(await eel(t,`/${encodeURIComponent(e)}`),t)}async function eer(e,t){return eeo(await eel(t,"",{method:"POST",body:JSON.stringify({title:e.title,nodes:e.nodes.map(u5),edges:e.edges.map(u4)})}),t)}async function eea(e,t,n){return eeo(await eel(n,`/${encodeURIComponent(e)}/save`,{method:"PUT",body:JSON.stringify({nodes:t.nodes.map(u5),edges:t.edges.map(u4),nodeIds:t.nodeIds})}),n)}async function eei(e,t){return eeo(await eel(t,`/${encodeURIComponent(e)}/open`,{method:"POST"}),t)}function eeo(e,t){var n,r;let a;return{canvas:(n=e.canvas,a=eet(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 eel(e,t,n,r){let a=await fetch((0,eT.localAPIURL)(eet(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 ees=(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"}]]),eec=(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"}]]),eed=(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"}]]),eeu=(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"}]]),eef=(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"}]]),eeh=(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"}]]),eem={done:"Done",current:"Current",queued:"Queued",blocked:"Blocked"};function eep(e,t,n){return Math.min(Math.max(e,t),n)}function eeg({items:e,currentId:t,labels:n,scrollCurrentIntoView:r=!0,className:a,viewportClassName:i,itemClassName:o,extendLineToViewport:l=!1,...s}){let c={...eem,...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=eep(e,0,a),l=performance.now();h.current=o;let s=e=>{let r=eep((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=eep(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,ez.cn)("min-w-0 text-foreground",a),...s,children:(0,eb.jsx)("div",{"data-slot":"roadmap-viewport",ref:d,onWheel:y,className:(0,ez.cn)("max-h-72 overflow-y-auto overscroll-contain pr-2",i),children:(0,eb.jsxs)("div",{ref:u,className:(0,ez.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,ez.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,ez.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,ez.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 eex="/themes/jelly/bg1.png",eev="/themes/jelly/bg2.png",eeb="/themes/jelly/bg3.png",eey="/themes/jelly/bg4.png";function eew({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 eej({title:e}){return(0,eb.jsx)("h2",{className:"h-7 text-sm font-semibold tracking-normal",children:e})}let eek={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:"主题"},eeN={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:"用量与账单"};eek.local,eek.direct,eek.online,eek.p2p,eek.online,eek.direct,eek.sleeping,eek.cpu,eek.memory,eek.activeRuns;function eeS(e){return e.reduce((e,t)=>Math.max(e,t.y+t.h),0)}function eeC({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)(wK,{className:"min-h-0 flex-1",children:e})})}function eeM(e){return Math.max(0,...e.map(e=>e.y+e.h))}function eeE(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 eeP(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 eeO(e,t,n,r,a){for(let i=0;i<eeM(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(!eeE(l,e))return l}return{id:t,kind:n,x:0,y:eeM(e)+2,w:r,h:a}}function eeI(e){return{...e.defaultConfig}}function eez(e){return e.payloads?.[Xx]}function eeA({open:e,definitions:t,title:n="添加卡片",description:r="搜索并选择要添加到当前页面的卡片。",groupTitle:a="可添加卡片",onOpenChange:i,onAdd:o}){return(0,eb.jsx)(vO,{open:e,onOpenChange:i,title:n,description:r,className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索可添加卡片..."}),(0,eb.jsxs)(vz,{className:"max-h-[420px]",children:[(0,eb.jsx)(vA,{children:"没有找到可添加的卡片。"}),(0,eb.jsx)(vT,{heading:a,children:t.map(e=>(0,eb.jsxs)(vR,{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)(vD,{children:[e.defaultSize.w,"x",e.defaultSize.h]})]},e.id))})]})]})})}function eeT({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,ez.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,ez.cn)("size-4 transition-transform",e&&"rotate-90")})})]})})}let eeR=(0,ek.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);function eeD({layout:e,layouts:t,cellSize:n,cellHeight:r,dragMode:a,selected:i,resizing:o,onSelect:l,onMove:s,onCut:c,onCopy:d,onSettingsOpen:u,onResizeStart:f,onResizeEnd:h,children:m}){let[p,g]=ew.useState(!1),x=r??n,v=e.x*(n+12),b=e.y*(x+12),y=e.w*n+(e.w-1)*12,w=e.h*x+(e.h-1)*12;return(0,eb.jsxs)("div",{"data-editable-card":e.id,className:(0,ez.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=eeP({...e,x:e.x+Math.round((r.clientX-c)/(n+12)),y:e.y+Math.round((r.clientY-d)/(n+12))});eeE(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,ez.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)(ee_,{onSettingsOpen:u,onCut:c,onCopy:d,onResizeStart:f}):null,o?(0,eb.jsx)(eeL,{layout:e,layouts:t,cellSize:n,onResize:s,onResizeEnd:h}):null]})}function ee_({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)(eeR,{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 eeL({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,ez.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),eeE(d=eeP(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 ee$({className:e,...t}){return(0,eb.jsx)(dU,{"data-slot":"sheet-overlay",className:(0,ez.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 eeF({className:e,children:t,side:n="right",showCloseButton:r=!0,...a}){return(0,eb.jsxs)(dV,{children:[(0,eb.jsx)(ee$,{}),(0,eb.jsxs)(dG,{"data-slot":"sheet-content","data-side":n,className:(0,ez.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)(d5,{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)(fP.XIcon,{className:"size-4"}),(0,eb.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function eeB({className:e,...t}){return(0,eb.jsx)("div",{"data-slot":"sheet-header",className:(0,ez.cn)("grid gap-1.5 p-4 text-left",e),...t})}function eeV({className:e,...t}){return(0,eb.jsx)(dQ,{"data-slot":"sheet-title",className:(0,ez.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eeH({className:e,...t}){return(0,eb.jsx)(d1,{"data-slot":"sheet-description",className:(0,ez.cn)("text-sm text-muted-foreground",e),...t})}function eeU({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)(dD,{open:e,onOpenChange:i,children:(0,eb.jsx)(eeF,{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)(eeq,{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)(eeB,{className:"border-b",children:[(0,eb.jsx)(eeV,{children:"卡片设置"}),(0,eb.jsxs)(eeH,{children:[n.title," · ",t.w,"x",t.h]})]}),(0,eb.jsxs)("div",{className:"grid flex-1 content-start gap-4 overflow-y-auto p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"显示标题"}),(0,eb.jsx)(eA,{value:r.title,onChange:e=>o({title:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"数据来源"}),(0,eb.jsx)(eA,{value:r.dataSource,onChange:e=>o({dataSource:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"刷新间隔"}),(0,eb.jsx)(eA,{value:r.refreshRate,onChange:e=>o({refreshRate:e.currentTarget.value})})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"ui-text-control font-medium",children:"备注"}),(0,eb.jsx)("textarea",{value:r.note,rows:4,className:"min-h-24 resize-none rounded-lg border border-input bg-transparent px-2.5 py-2 ui-text-control transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",onChange:e=>o({note:e.currentTarget.value})})]}),(0,eb.jsxs)("div",{className:"rounded-lg border bg-muted/20 p-3",children:[(0,eb.jsx)("div",{className:"ui-text-control font-medium",children:"当前绑定"}),(0,eb.jsxs)("div",{className:"mt-2 grid gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{children:["类型:",n.id]}),(0,eb.jsxs)("span",{children:["来源:",r.dataSource]}),(0,eb.jsxs)("span",{children:["刷新:",r.refreshRate]})]})]})]})]})]}):null})})}function eeq({width:e,height:t,className:n,children:r}){let[a,i]=Yn(),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,ez.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 eeW({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]=Yn(),I=O.width>0?(d=O.width)<480?2:d<768?4:12:12,z=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<eeS(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:eeS(r),w:n,h:a})}return r}(x,I),A=O.width>0?(O.width-12*(I-1))/I:96,T=I<12?72:A,R=Math.max(a,eeM(z)+2),D=R*T+(R-1)*12,_=ew.useMemo(()=>new Map(t.map(e=>[e.id,e])),[t]);function L(e){let t=_.get(e.kind);return b[e.id]??(t?eeI(t):void 0)}function $(e){v(t=>{let n=eeP(e);return eeE(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=eeO(x,n,e,t.defaultSize.w,t.defaultSize.h);v(e=>[...e,r]),y(e=>({...e,[n]:eeI(t)})),j(n),N(void 0),m(!1)}function B(e,t){let n=x.find(t=>t.id===e),r=n?_.get(n.kind):void 0;n&&r&&y(n=>({...n,[e]:{...n[e]??eeI(r),...t}}))}ew.useEffect(()=>{c?.(h||!!S)},[h,c,S]),ew.useEffect(()=>()=>c?.(!1),[c]),ew.useEffect(()=>{p||(j(void 0),N(void 0))},[p]),ew.useEffect(()=>{if(k)return window.addEventListener("pointerdown",e),()=>window.removeEventListener("pointerdown",e);function e(e){let t=e.target;t instanceof HTMLElement&&t.closest("[data-editable-card-action]")||(j(k),N(void 0))}},[k]);let V=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=[...z].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)(eeC,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,ez.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,ez.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)(eeT,{open:u,dragMode:!1,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eeA,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeU,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}return(0,eb.jsxs)(eeC,{children:[(0,eb.jsx)("div",{ref:P,"data-editable-card-board":e,className:(0,ez.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(Xx)&&(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&&eez(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=eez(e);if(!n||!_.has(n.kind))return;E.current+=1;let r=`${n.kind}-clip-${E.current}`,a=eeP({id:r,kind:n.kind,x:t?.x??0,y:t?.y??eeM(x),w:n.w,h:n.h}),i=t&&!eeE(a,x)?a:eeO(x,r,n.kind,n.w,n.h);v(e=>[...e,i]),y(e=>({...e,[r]:{...n.config}})),j(r),N(void 0)}(n,{x:o&&A>0?Math.round((e.clientX-o.left-24)/(A+12)):0,y:o&&A>0?Math.round((e.clientY-o.top-24)/(A+12)):eeM(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:z.map(t=>{let n=_.get(t.kind);if(!n)return null;let r=L(t);return r?(0,eb.jsx)(eeD,{layout:t,layouts:z,cellSize:A,cellHeight:T,dragMode:p,selected:w===t.id,resizing:k===t.id,onSelect:()=>{p&&j(t.id)},onMove:$,onCut:()=>(function(t){let n=x.find(e=>e.id===t),r=n?_.get(n.kind):void 0,a=n?L(n):void 0;if(!n||!r||!a)return;let i=function({boardId:e,layout:t,definition:n,config:r}){let a={boardId:e,kind:t.kind,w:t.w,h:t.h,config:{...r}};return{id:`clip-${e}-${t.id}`,title:r.title||n.title,description:n.description,meta:`${t.w}x${t.h}`,icon:n.icon,dragData:{"application/vnd.vantaloom.clip-kind":"workspace-card","application/vnd.vantaloom.workspace-card-board":e,"application/vnd.vantaloom.workspace-card-kind":t.kind,"application/vnd.vantaloom.workspace-card-width":String(t.w),"application/vnd.vantaloom.workspace-card-height":String(t.h),"application/vnd.vantaloom.workspace-card-config":JSON.stringify(r),[Xx]:JSON.stringify(a)},payloads:{[Xx]: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=eeO(x,r,t.kind,t.w,t.h);v(e=>[...e,a]),y(t=>({...t,[r]:t[e]??eeI(n)})),j(r)})(t.id),onSettingsOpen:()=>C(t.id),onResizeStart:()=>{j(void 0),N(t.id)},onResizeEnd:()=>{j(t.id),N(void 0)},children:n.render(r)},t.id):null})})}),(0,eb.jsx)(eeT,{open:u,dragMode:p,label:o,onOpenChange:f,onAdd:()=>{f(!1),m(!0)},onDragModeChange:g}),(0,eb.jsx)(eeA,{open:h,definitions:t,groupTitle:l,onOpenChange:m,onAdd:F}),(0,eb.jsx)(eeU,{open:!!(H&&U&&q),layout:H,definition:U,config:q,cellSize:A,onOpenChange:e=>{e||C(void 0)},onConfigChange:e=>{H&&B(H.id,e)}})]})}function eeK({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 eeG({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,ez.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)(eeK,{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)(eeK,{parts:c})})]})}function eeX(e){return/^\d+$/.test(e)&&1===e.length?`0${e}`:/^\d+(?:\.\d+)?%$/.test(e)?`${Number.parseFloat(e).toFixed(1)}%`:e}function eeY({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)(eeG,{value:eeX(t),minSize:n,maxSize:r,className:a})]})}function eeZ(e){return Math.max(0,Math.min(100,Math.round(e)))}function eeJ({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,ez.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 eeQ({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,ez.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 ee0=(0,ek.default)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);function ee1({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)(ee2,{canvas:e,mode:t,onClick:()=>r(e)})}}),[e,t,r]);return(0,eb.jsx)(eeg,{items:a,scrollCurrentIntoView:!1,className:(0,ez.cn)("mt-2",n&&"min-h-0 flex-1"),viewportClassName:(0,ez.cn)("max-h-none pr-0",n?"h-full overflow-y-auto":"overflow-visible"),itemClassName:"py-2"})}function ee2({canvas:e,onClick:t,mode:n}){return(0,eb.jsxs)("button",{type:"button",className:(0,ez.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)(eeJ,{value:e.progress,className:"h-1.5"}),(0,eb.jsx)("span",{"aria-label":e.progress>=100?"Canvas complete":"Canvas incomplete",className:(0,ez.cn)("size-2.5 rounded-full",e.progress>=100?"bg-primary":"bg-border")})]}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(ee5,{icon:(0,eb.jsx)(VR,{}),value:`${e.snapshots}`}),(0,eb.jsx)(ee5,{icon:(0,eb.jsx)(ee0,{}),value:e.runtime}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:e.lastOpened})]})]})}function ee5({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 ee4=(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"}]]),ee3=(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"}]]),ee6=(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 ee8=ew;function ee7(){return(ee7=Object.assign.bind()).apply(null,arguments)}function ee9(e){return ew.createElement(RN,ee7({shapeType:"rectangle",activeClassName:"recharts-active-bar",inActiveClassName:"recharts-inactive-bar"},e))}var ete=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(n,r)=>{if(kO(e))return e;var a=kO(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)}},ett=["children"],etn=(0,ew.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function etr(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,ett);return ew.createElement(etn.Provider,{value:n},t)}var eta=(e,t,n)=>{var r=null!=n?n:e;if(null!=r)return kT(r,t,0)};function eti(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function eto(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eti(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eti(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var etl=kl([O7,(e,t)=>t],(e,t)=>e.filter(e=>"bar"===e.type).find(e=>e.id===t)),ets=kl([etl],e=>null==e?void 0:e.maxBarSize),etc=kl([CR,O7,YU,Yq,(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)),etd=kl([etc,e=>e.rootProps.barSize,(e,t)=>{var n=CR(e),r=YU(e,t),a=Yq(e,t);if(null!=r&&null!=a)return"horizontal"===n?zy(e,"xAxis",r):zy(e,"yAxis",a)}],(e,t,n)=>{var r=e.filter(Mj),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:eta(t,n,null==(r=i[0])?void 0:r.barSize)}}),...a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>null!=e),barSize:eta(t,n,e.barSize)}))]}),etu=(e,t,n)=>{var r,a,i=CR(e),o=YU(e,t),l=Yq(e,t);if(null!=o&&null!=l)return"horizontal"===i?(r=zC(e,"xAxis",o,n),a=zS(e,"xAxis",o,n)):(r=zC(e,"yAxis",l,n),a=zS(e,"yAxis",l,n)),k2(r,a)},etf=kl([etd,CZ,e=>e.rootProps.barGap,CJ,(e,t,n)=>{var r,a,i,o,l=etl(e,t);if(null==l)return 0;var s=YU(e,t),c=Yq(e,t);if(null==s||null==c)return 0;var d=CR(e),u=CZ(e),{maxBarSize:f}=l;return"horizontal"===d?(i=zC(e,"xAxis",s,n),o=zS(e,"xAxis",s,n)):(i=zC(e,"yAxis",c,n),o=zS(e,"yAxis",c,n)),null!=(r=null!=(a=k2(i,o,!0))?a:null==f?u:f)?r:0},etu,ets],(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=kT(e,n,0,!0),c=[];if(kV(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=kT(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=kV(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=>eto(eto({},e),{},{position:eto(eto({},e.position),{},{offset:e.position.offset-a/2})}))),l}),eth=kl([etf,etl],(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}}),etm=kl([(e,t,n)=>{var r=CR(e),a=YU(e,t),i=Yq(e,t);if(null!=a&&null!=i)return"horizontal"===r?Ik(e,"yAxis",i,n):Ik(e,"xAxis",a,n)},etl],(e,t)=>{var n=My(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)}}}),etp=kl([Ni,Nl,(e,t,n)=>{var r=YU(e,t);if(null!=r)return zC(e,"xAxis",r,n)},(e,t,n)=>{var r=Yq(e,t);if(null!=r)return zC(e,"yAxis",r,n)},(e,t,n)=>{var r=YU(e,t);if(null!=r)return zS(e,"xAxis",r,n)},(e,t,n)=>{var r=Yq(e,t);if(null!=r)return zS(e,"yAxis",r,n)},eth,CR,kf,etu,etm,etl,(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||!kO(t[0])||!kO(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(!kO(e[0])||e[0]<n)&&(a[0]=n),(!kO(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=kW(e,n))||(j=[b,j]);var w=ete(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=kQ({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=kE(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 z=kM(C||w)*(Math.abs(w)-Math.abs(C));N-=z,C+=z}}else{var A=l.scale.map(j[0]),T=l.scale.map(j[1]);if(null==A||null==T)return null;if(k=A,N=kQ({axis:s,ticks:d,bandSize:o,offset:i.offset,entry:e,index:f}),S=T-A,C=i.size,M={x:h.left,y:N,width:h.width,height:C},Math.abs(w)>0&&Math.abs(S)<Math.abs(w)){var R=kM(S||w)*(Math.abs(w)-Math.abs(S));S+=R}}return null!=k&&null!=N&&null!=S&&null!=C&&(a||0!==S&&0!==C)?etz(etz({},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})}}),etg=(e,t)=>t,etx=(e,t,n)=>n,etv=kl([etg,O7,etx],(e,t,n)=>t.filter(e=>"bar"===e.type).filter(t=>t.stackId===e).filter(e=>e.isPanorama===n).filter(e=>!e.hide)),etb=kl([etv],e=>e.map(e=>e.id)),ety=kl([e=>e,etg,etx],(e,t,n)=>{var r=etb(e,t,n),a=[];return r.forEach(t=>{var r=etp(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}),etw=["index"];function etj(){return(etj=Object.assign.bind()).apply(null,arguments)}var etk=(0,ew.createContext)(void 0),etN=(e,t)=>"recharts-bar-stack-clip-path-".concat(e,"-").concat(t),etS=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,etw),r=(e=>{var t=(0,ew.useContext)(etk);if(null!=t){var{stackId:n}=t;return"url(#".concat(etN(n,e),")")}})(t);return ew.createElement(z6,etj({className:"recharts-bar-stack-layer",clipPath:r},n))},etC=["onMouseEnter","onMouseLeave","onClick"],etM=["value","background","tooltipPosition"],etE=["id"],etP=["onMouseEnter","onClick","onMouseLeave"];function etO(){return(etO=Object.assign.bind()).apply(null,arguments)}function etI(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function etz(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?etI(Object(n),!0).forEach(function(t){var r,a,i;r=e,a=t,i=n[t],(a=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(a))in r?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):etI(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function etA(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 etT=ee8.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:kF,settings:{stroke:n,strokeWidth:r,fill:a,dataKey:t,nameKey:void 0,name:k4(i,t),hide:o,type:s,color:a,unit:l,graphicalItemId:c}};return ee8.createElement(Db,{tooltipEntrySettings:d})});function etR(e){var t,n=Np(_h),{data:r,dataKey:a,background:i,allOtherBarProps:o}=e,{onMouseEnter:l,onMouseLeave:s,onClick:c}=o,d=etA(o,etC),u=Dg(l,a,o.id),f=Dx(s),h=Dv(c,a,o.id);if(!i||null==r)return null;var m=z2(i);return ee8.createElement(_5,{zIndex:(t=Me.barBackground,i&&"object"==typeof i&&"zIndex"in i&&"number"==typeof i.zIndex&&kV(i.zIndex)?i.zIndex:t)},r.map((e,t)=>{var{value:r,background:o,tooltipPosition:l}=e,s=etA(e,etM);if(!o)return null;var c=u(e,t),p=f(e,t),g=h(e,t),x=etz(etz(etz(etz(etz({option:i,isActive:String(t)===n},s),{},{fill:"#eee"},o),m),AM(d,e,t)),{},{onMouseEnter:c,onMouseLeave:p,onClick:g,dataKey:a,index:t,className:"recharts-bar-background-rectangle"});return ee8.createElement(ee9,etO({key:"background-bar-".concat(t)},x))}))}function etD(e){var{showLabels:t,children:n,rects:r}=e,a=null==r?void 0:r.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return etz(etz({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return ee8.createElement(Lx,{value:t?a:void 0},n)}function et_(e){var t,{shape:n,activeBar:r,baseProps:a,entry:i,index:o,dataKey:l}=e,s=Np(_h),c=Np(_p),d=r&&String(i.originalDataIndex)===s&&(null==c||l===c),[u,f]=(0,ee8.useState)(!1),[h,m]=(0,ee8.useState)(!1);(0,ee8.useEffect)(()=>{var e;return d?(f(!0),e=requestAnimationFrame(()=>{m(!0)})):m(!1),()=>{cancelAnimationFrame(e)}},[d]);var p=(0,ee8.useCallback)(()=>{d||f(!1)},[d]),g=d&&h,x=d||u;t=d?!0===r?n:r:n;var v=ee8.createElement(ee9,etO({},a,{name:String(a.name)},i,{isActive:g,option:t,index:o,dataKey:l,onTransitionEnd:p}));return x?ee8.createElement(_5,{zIndex:Me.activeBar},ee8.createElement(etS,{index:i.originalDataIndex},v)):v}function etL(e){var{shape:t,baseProps:n,entry:r,index:a,dataKey:i}=e;return ee8.createElement(ee9,etO({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:a,dataKey:i}))}function et$(e){var t,{data:n,props:r}=e,a=null!=(t=z1(r))?t:{},{id:i}=a,o=etA(a,etE),{shape:l,dataKey:s,activeBar:c}=r,{onMouseEnter:d,onClick:u,onMouseLeave:f}=r,h=etA(r,etP),m=Dg(d,s,i),p=Dx(f),g=Dv(u,s,i);return n?ee8.createElement(ee8.Fragment,null,n.map((e,t)=>ee8.createElement(etS,etO({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"},AM(h,e,t),{onMouseEnter:m(e,t),onMouseLeave:p(e,t),onClick:g(e,t)}),c?ee8.createElement(et_,{shape:l,activeBar:c,baseProps:o,entry:e,index:t,dataKey:s}):ee8.createElement(etL,{shape:l,baseProps:o,entry:e,index:t,dataKey:s})))):null}function etF(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=TL(t,"recharts-bar-"),[h,m]=(0,ee8.useState)(!1),p=(0,ee8.useCallback)(()=>{"function"==typeof c&&c(),m(!1)},[c]),g=(0,ee8.useCallback)(()=>{"function"==typeof d&&d(),m(!0)},[d]);return ee8.createElement(etD,{showLabels:!h,rects:r},ee8.createElement(T_,{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 etz(etz({},t),{},{x:kD(r.x,t.x,e),y:kD(r.y,t.y,e),width:kD(r.width,t.width,e),height:kD(r.height,t.height,e)});if("horizontal"===a){var i=kD(0,t.height,e),o=kD(t.stackedBarStart,t.y,e);return etz(etz({},t),{},{y:o,height:i})}var l=kD(0,t.width,e),s=kD(t.stackedBarStart,t.x,e);return etz(etz({},t),{},{width:l,x:s})});return(e>0&&(n.current=null!=i?i:null),null==i)?null:ee8.createElement(z6,null,ee8.createElement(et$,{props:t,data:i}))}),ee8.createElement(Lw,{label:t.label}),t.children)}function etB(e){var t=(0,ee8.useRef)(null);return ee8.createElement(etF,{previousRectanglesRef:t,props:e})}var etV=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:kW(e,t)}};class etH extends ee8.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,jQ.clsx)("recharts-bar",r);return ee8.createElement(z6,{className:c,id:s},o&&ee8.createElement("defs",null,ee8.createElement(YH,{clipPathId:s,xAxisId:a,yAxisId:i})),ee8.createElement(z6,{className:"recharts-bar-rectangles",clipPath:o?"url(#clipPath-".concat(s,")"):void 0},ee8.createElement(etR,{data:t,dataKey:n,background:l,allOtherBarProps:this.props}),ee8.createElement(etB,this.props)))}}var etU={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:Me.bar};function etq(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}=YV(n,r),h=Np(CR),m=Cd(),p=Th(e.children,Tl),g=Np(t=>etp(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,ee8.createElement(etr,{xAxisId:n,yAxisId:r,data:g,dataPointFormatter:etV,errorBarOffset:t},ee8.createElement(etH,etO({},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})))}ee8.memo(function(e){var t,n,r=A2(e,etU),a=(t=r.stackId,null!=(n=(0,ew.useContext)(etk))?n.stackId:null!=t?kZ(t):void 0),i=Cd();return ee8.createElement(_T,{id:r.id,type:"bar"},e=>ee8.createElement(ee8.Fragment,null,ee8.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,fill:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:k4(n,t),payload:e}]})(r)}),ee8.createElement(etT,{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}),ee8.createElement(_H,{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}),ee8.createElement(_5,{zIndex:r.zIndex},ee8.createElement(etq,etO({},r,{id:e})))))},FR).displayName="Bar";let etW=(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 etK({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)(eeG,{value:eeX(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 etG=ew,etX=(e,t,n,r)=>zC(e,"xAxis",t,r),etY=(e,t,n,r)=>zS(e,"xAxis",t,r),etZ=(e,t,n,r)=>zC(e,"yAxis",n,r),etJ=(e,t,n,r)=>zS(e,"yAxis",n,r),etQ=kl([CR,etX,etZ,etY,etJ],(e,t,n,r,a)=>kK(e,"xAxis")?k2(t,r,!1):k2(n,a,!1));function et0(e){return"line"===e.type}var et1=kl([O7,(e,t,n,r,a)=>a],(e,t)=>e.filter(et0).find(e=>e.id===t)),et2=kl([CR,etX,etZ,etY,etJ,et1,etQ,ku],(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=kW(e,o);if("horizontal"===t){var d=kJ({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=kJ({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})}}),et5=["id"],et4=["type","layout","connectNulls","needClip","shape"],et3=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function et6(){return(et6=Object.assign.bind()).apply(null,arguments)}function et8(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 et7(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et8(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)):et8(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function et9(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 ene=etG.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:kF,settings:{stroke:r,strokeWidth:a,fill:i,dataKey:t,nameKey:void 0,name:k4(o,t),hide:l,type:c,color:r,unit:s,graphicalItemId:d}};return etG.createElement(Db,{tooltipEntrySettings:u})}),ent=(e,t)=>"".concat(t,"px ").concat(e,"px");function enn(e){var{clipPathId:t,points:n,props:r}=e,{dot:a,dataKey:i,needClip:o}=r,{id:l}=r,s=z1(et9(r,et5));return etG.createElement(Y_,{points:n,dot:a,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:i,baseProps:s,needClip:o,clipPathId:t})}function enr(e){var{showLabels:t,children:n,points:r}=e,a=(0,etG.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 et7(et7({},r),{},{value:e.value,payload:e.payload,viewBox:r,parentViewBox:void 0,fill:void 0})}),[r]);return etG.createElement(Lx,{value:t?a:void 0},n)}function ena(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=et7(et7({},z5(et9(i,et4))),{},{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 etG.createElement(etG.Fragment,null,(null==r?void 0:r.length)>1&&etG.createElement(RN,et6({shapeType:"curve",option:d},u,{pathRef:n})),etG.createElement(enn,{points:r,clipPathId:t,props:i}))}function eni(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=TL(o,"recharts-line-"),b=(0,etG.useRef)(v),[y,w]=(0,etG.useState)(!1),j=(0,etG.useCallback)(()=>{"function"==typeof p&&p(),w(!1)},[p]),k=(0,etG.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,etG.useRef)(0);b.current!==v&&(S.current=i.current,b.current=v);var C=S.current;return etG.createElement(enr,{points:o,showLabels:!y},n.children,etG.createElement(T_,{animationId:v,begin:c,duration:d,isActive:s,easing:u,onAnimationEnd:j,onAnimationStart:k,key:v},e=>{var c,d=Math.min(kD(C,N+C,e),N);if(c=s?l?((e,t,n)=>{var r=n.reduce((e,t)=>e+t,0);if(!r)return ent(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))):ent(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 et7(et7({},t),{},{x:kD(a.x,t.x,e),y:kD(a.y,t.y,e)})}return f?et7(et7({},t),{},{x:kD(2*h,t.x,e),y:kD(m/2,t.y,e)}):et7(et7({},t),{},{x:t.x,y:t.y})});return a.current=p,etG.createElement(ena,{props:n,points:p,clipPathId:t,pathRef:r,strokeDasharray:c})}return etG.createElement(ena,{props:n,points:o,clipPathId:t,pathRef:r,strokeDasharray:c})}),etG.createElement(Lw,{label:n.label}))}function eno(e){var{clipPathId:t,props:n}=e,r=(0,etG.useRef)(null),a=(0,etG.useRef)(0),i=(0,etG.useRef)(null);return etG.createElement(eni,{props:n,clipPathId:t,previousPointsRef:r,longestAnimatedLengthRef:a,pathRef:i})}var enl=(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:kW(e.payload,t)}};class ens extends etG.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,jQ.clsx)("recharts-line",r),{r:m,strokeWidth:p}=Y1(t),g=Tm(t),x=2*m+p,v=u?"url(#clipPath-".concat(g?"":"dots-").concat(d,")"):void 0;return etG.createElement(_5,{zIndex:f},etG.createElement(z6,{className:h},u&&etG.createElement("defs",null,etG.createElement(YH,{clipPathId:d,xAxisId:a,yAxisId:i}),!g&&etG.createElement("clipPath",{id:"clipPath-dots-".concat(d)},etG.createElement("rect",{x:l-x/2,y:o-x/2,width:s+x,height:c+x}))),etG.createElement(etr,{xAxisId:a,yAxisId:i,data:n,dataPointFormatter:enl,errorBarOffset:0},etG.createElement(eno,{props:this.props,clipPathId:d}))),etG.createElement(YB,{activeDot:this.props.activeDot,points:n,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:v}))}}var enc={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:Me.line,type:"linear"};function end(e){var t=A2(e,enc),{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=et9(t,et3),{needClip:x}=YV(h,m),v=Np(Bl),b=Np(CR),y=Cd(),w=Np(e=>et2(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 etG.createElement(ens,et6({},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 enu=etG.memo(function(e){var t=A2(e,enc),n=Cd();return etG.createElement(_T,{id:t.id,type:"line"},e=>etG.createElement(etG.Fragment,null,etG.createElement(_O,{legendPayload:(e=>{var{dataKey:t,name:n,stroke:r,legendType:a,hide:i}=e;return[{inactive:i,dataKey:t,type:a,color:r,value:k4(n,t),payload:e}]})(t)}),etG.createElement(ene,{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}),etG.createElement(_H,{type:"line",id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),etG.createElement(end,et6({},t,{id:e}))))},FR);enu.displayName="Line";var enf=["axis"],enh=(0,ew.forwardRef)((e,t)=>ew.createElement(Zp,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:enf,tooltipPayloadSearcher:LB,categoricalChartProps:e,ref:t}));let enm={online:"bg-foreground",warning:"bg-muted-foreground",offline:"bg-destructive"},enp={direct:"stroke-foreground",p2p:"stroke-foreground",relay:"stroke-muted-foreground",down:"stroke-destructive"},eng={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,ez.cn)("size-2.5 shrink-0 rounded-full",enm[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]})}},enx={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,ez.cn)("fill-none",enp[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 env({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,ez.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:eng,edgeTypes:enx,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 enb({nodes:e,links:t}){return(0,eb.jsx)(env,{nodes:e,links:t})}function eny({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 enw({items:e}){return(0,eb.jsx)("div",{className:"mt-2 grid",children:e.map((e,t)=>(0,eb.jsxs)("div",{className:(0,ez.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,ez.cn)("mt-1 truncate ui-text-kbd text-muted-foreground","warning"===e.tone&&"text-destructive"),children:e.meta})]},e.id))})}function enj({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)(eeg,{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 enk({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)(enN,{item:e})}}),[e]);return(0,eb.jsx)(eeg,{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 enN({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)(eeJ,{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)(eeJ,{value:e.load,className:"h-1.5"}),(0,eb.jsx)("div",{className:"text-right ui-text-kbd text-muted-foreground",children:"load"})]})]})}function enS({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)(enC,{worker:e,divided:t>0},e.id))})}function enC({worker:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,ez.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)(enM,{label:"CPU",value:e.cpu}),(0,eb.jsx)(enM,{label:"MEM",value:e.memory})]})]})}function enM({label:e,value:t}){return(0,eb.jsxs)("div",{className:"grid justify-items-center gap-1",children:[(0,eb.jsx)(eeQ,{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 enE({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)(eeg,{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 enP({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)(enO,{machine:e,divided:t>0},e.id))})}function enO({machine:e,divided:t}){return(0,eb.jsxs)("div",{className:(0,ez.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)(enz,{status:e.status}),(0,eb.jsx)("span",{className:"truncate text-sm font-medium",children:e.name})]}),(0,eb.jsxs)("div",{className:"mt-1 truncate ui-text-kbd text-muted-foreground",children:[e.os," · ",e.link," · heartbeat ",e.heartbeat]})]}),(0,eb.jsxs)("div",{className:"grid gap-2 sm:grid-cols-4",children:[(0,eb.jsx)(enI,{icon:(0,eb.jsx)(uT,{}),label:"CPU",value:e.cpu}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(ee4,{}),label:"MEM",value:e.memory}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(uR,{}),label:"DISK",value:e.disk}),(0,eb.jsx)(enI,{icon:(0,eb.jsx)(ee3,{}),label:"NET",value:e.network})]})]})}function enI({icon:e,label:t,value:n}){return(0,eb.jsxs)("div",{className:"grid gap-1",children:[(0,eb.jsxs)("div",{className:"flex justify-between gap-1 ui-text-kbd text-muted-foreground",children:[(0,eb.jsxs)("span",{className:"flex items-center gap-1 [&_svg]:size-3",children:[e,t]}),(0,eb.jsxs)("span",{children:[n,"%"]})]}),(0,eb.jsx)(eeJ,{value:n,className:"h-1.5"})]})}function enz({status:e}){return(0,eb.jsx)("span",{className:(0,ez.cn)("size-2 rounded-full bg-border","online"===e&&"bg-primary")})}function enA({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)(eeg,{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 enT({config:e,data:t}){return(0,eb.jsx)(Vp,{config:e,className:"mt-2 min-h-0 flex-1",children:(0,eb.jsxs)(Zx,{data:t,margin:{left:8,right:8},children:[(0,eb.jsx)(ZJ,{vertical:!1}),(0,eb.jsx)(Ja,{dataKey:"time",tickLine:!1,axisLine:!1,tickMargin:8}),(0,eb.jsx)(B3,{content:(0,eb.jsx)(Vx,{indicator:"line"})}),(0,eb.jsx)(Zu,{dataKey:"cpu",type:"monotone",fill:"var(--color-cpu)",fillOpacity:.11,stroke:"var(--color-cpu)",strokeWidth:2}),(0,eb.jsx)(Zu,{dataKey:"memory",type:"monotone",fill:"var(--color-memory)",fillOpacity:.1,stroke:"var(--color-memory)",strokeWidth:2}),(0,eb.jsx)(Zu,{dataKey:"network",type:"monotone",fill:"var(--color-network)",fillOpacity:.08,stroke:"var(--color-network)",strokeWidth:2})]})})}function enR({services:e}){let[t,n]=Yn(),r=Math.max(1,Math.floor((Math.max(0,n.width-192-64-32)+5)/12)),a=Math.max(48,n.height>0?Math.floor((n.height-0*Math.max(0,e.length-1))/e.length):48),i=Math.max(28,a-22);return(0,eb.jsx)("div",{ref:t,className:"mt-2 min-h-0 flex-1",children:e.map((e,t)=>(0,eb.jsx)(enD,{service:e,divided:t>0,rowHeight:a,sampleCount:r,sampleHeight:i},e.id))})}function enD({service:e,divided:t,rowHeight:n,sampleCount:r,sampleHeight:a}){let i=ew.useMemo(()=>{var t,n;return t=e.samples,n=r,t.length>=n?t.slice(t.length-n):Array.from({length:n},(e,n)=>{let r=n%t.length;return t[r]??0})},[r,e.samples]);return(0,eb.jsxs)("div",{className:(0,ez.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,ez.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,ez.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 en_=[{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 enL(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:[]}}}en_.push(enL("canvas-terminal-layout","终端工作台草图","记录终端标签组、日志表和命令区的组合方式。",7,"36m",84e3,"昨天 15:21"),enL("canvas-file-review","文件审阅流程","沉淀文件树、diff 预览和文件标签之间的拖拽关系。",12,"58m",126e3,"周五 20:10"),enL("canvas-settings-ia","设置导航结构","整理设置菜单面板的主菜单、子菜单和搜索入口。",8,"24m",61e3,"周五 16:42"),enL("canvas-auth-access","本机账户接入","记录本机用户、工作组加入和可用机器列表关系。",10,"47m",112e3,"周四 22:05"),enL("canvas-data-ops","运维数据面板","对齐数据表标签、机器状态卡片和运行记录列表。",14,"1h 18m",172e3,"周三 19:48"));let en$=en_.filter(e=>"idle"!==e.status),enF=en_.filter(e=>"idle"===e.status);function enB(e,t,n=""){return{title:e,dataSource:t,refreshRate:"30s",note:n}}function enV(e,t){return(0,eb.jsx)("section",{className:(0,ez.cn)("size-full rounded-xl border bg-card p-5","vtl-jelly-image-card vtl-jelly-image-card-shadowless"),style:eew({image:t,opacity:.88,blur:"0px"}),children:e})}let enH=[{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*enF.length)+1)}];function enU({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)(dD,{open:e,onOpenChange:o,children:(0,eb.jsxs)(fI,{hideClose:!0,className:(0,ez.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)(fT,{className:"sr-only",children:t}),(0,eb.jsxs)(fR,{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)(fP.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,ez.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)(Bk,{variant:"outline",className:"h-4 px-1 ui-text-kbd",children:e.badge}):null]},e.id))})}),(0,eb.jsx)(wK,{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)(wK,{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,ez.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)(Bk,{variant:"outline",className:"h-5 px-1.5 ui-text-kbd",children:e.badge}):null]},e.id))})})}),(0,eb.jsx)(wK,{className:"min-h-0 bg-background",children:(0,eb.jsx)("div",{className:"p-5 pr-9",children:d?.content})})]})]})})}function enq({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)(uV,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("活跃画布","画布列表"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"当前正在编辑的画布数量",value:String(en$.length)}),eex)},{id:"metric-nodes",title:"运行节点",description:"所有活跃画布内的节点。",icon:(0,eb.jsx)(VR,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("运行节点","画布节点"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"所有活跃画布内的节点",value:"38"}),eev)},{id:"metric-unsaved",title:"未保存",description:"等待写入的画布变更。",icon:(0,eb.jsx)(jY,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("未保存","画布保存状态"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"等待写入的画布变更",value:"4"}),eeb)},{id:"metric-snapshots",title:"快照",description:"可回退的历史存档。",icon:(0,eb.jsx)(Gv,{className:"size-4"}),defaultSize:{w:3,h:3},defaultConfig:enB("快照","画布快照"),render:e=>enV((0,eb.jsx)(etK,{label:e.title,description:"可回退的历史存档",value:"46"}),eey)},{id:"active",title:"正在使用的画布",description:"活跃画布 Roadmap。",icon:(0,eb.jsx)(uV,{className:"size-4"}),defaultSize:{w:12,h:3},defaultConfig:enB("正在使用的画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col overflow-hidden",children:[(0,eb.jsx)(eny,{title:t.title,count:en$.length}),(0,eb.jsx)(ee1,{canvases:en$,scrollable:!0,onSelect:e})]})},{id:"recent",title:"最近画布",description:"最近打开的画布。",icon:(0,eb.jsx)(pa,{className:"size-4"}),defaultSize:{w:12,h:Math.max(3,Math.ceil(.75*enF.length)+1)},defaultConfig:enB("最近画布","画布列表"),render:t=>(0,eb.jsxs)("section",{className:"flex size-full flex-col",children:[(0,eb.jsx)(eny,{title:t.title,count:enF.length}),(0,eb.jsx)(ee1,{canvases:enF,mode:"archive",onSelect:e})]})}]})({onSelect:a}),[]);return(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(eeW,{boardId:"canvas-library",definitions:i,initialLayouts:enH,clipboardItems:e,actionLabel:"画布库页面卡片操作",paletteGroupTitle:"画布库页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n}),(0,eb.jsx)(enK,{canvas:r,onOpenChange:e=>{e||a(void 0)}})]})}function enW({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 enK({canvas:e,onOpenChange:t}){return e?(0,eb.jsx)(enU,{open:!!e,onOpenChange:t,title:e.title,eyebrow:"画布管理",description:e.purpose,panels:[{id:"overview",label:"首页",icon:(0,eb.jsx)(VD,{}),content:(0,eb.jsx)(enG,{canvas:e})},{id:"templates",label:"节点模板",icon:(0,eb.jsx)(ees,{}),badge:e.settings.nodeTemplates.length,content:(0,eb.jsx)(enY,{title:"可用节点模板",items:e.settings.nodeTemplates})},{id:"layout",label:"默认布局",icon:(0,eb.jsx)(eeh,{}),content:(0,eb.jsx)(enY,{title:"默认布局参数",items:e.settings.defaultLayout})},{id:"folders",label:"工作区绑定",icon:(0,eb.jsx)(pa,{}),content:(0,eb.jsx)(enY,{title:"绑定的工作区文件夹",items:e.settings.folders})},{id:"sharing",label:"共享权限",icon:(0,eb.jsx)(eef,{}),content:(0,eb.jsx)(enY,{title:"共享与权限",items:e.settings.sharing})},{id:"autosave",label:"自动保存",icon:(0,eb.jsx)(Gw,{}),content:(0,eb.jsx)(enY,{title:"自动保存策略",items:e.settings.autosave})},{id:"snapshots",label:"快照和版本",icon:(0,eb.jsx)(Gv,{}),content:(0,eb.jsx)(enY,{title:"快照和版本策略",items:e.settings.snapshots})},{id:"hosts",label:"可访问主机",icon:(0,eb.jsx)(eed,{}),content:(0,eb.jsx)(enY,{title:"可访问主机",items:e.settings.hosts})},{id:"plugins",label:"插件",icon:(0,eb.jsx)(eeu,{}),content:(0,eb.jsx)(enY,{title:"画布插件",items:e.settings.plugins,empty:"未加载插件"})}]}):null}function enG({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)(enX,{label:"Nodes",value:`${e.nodes}`}),(0,eb.jsx)(enX,{label:"Agent",value:`${e.agents}`}),(0,eb.jsx)(enX,{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)(enW,{icon:(0,eb.jsx)(VR,{}),value:e.runtime})]}),(0,eb.jsx)(eeg,{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 enX({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 enY({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,ez.cn)("flex min-h-10 items-center gap-2 px-3 text-sm",t>0&&"border-t"),children:[(0,eb.jsx)(eec,{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)(vO,{open:e,onOpenChange:t,title:"添加节点",description:"搜索并选择要放入画布的可用节点。",className:"top-1/2 max-w-xl -translate-y-1/2",children:(0,eb.jsxs)(vP,{loop:!0,children:[(0,eb.jsx)(vI,{placeholder:"搜索节点..."}),(0,eb.jsxs)(vz,{children:[(0,eb.jsx)(vA,{children:"没有匹配节点。"}),(0,eb.jsx)(vT,{heading:"可用节点",children:uZ.map(e=>(0,eb.jsxs)(vR,{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)(vD,{children:[e.size.width,"x",e.size.height]})]},e.id))})]})]})})}function enJ({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 u0(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,uZ.find(e=>e.id===n)?.size??uW({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:uX(n,r),data:{contentScale:2,kind:e.kind,tab:{...e,id:`${t}-tab`}},width:r.width,height:r.height,style:uK(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 fh(e):await fd(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{hQ.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 hQ.error("文件路径不可用"),Error("file path is unavailable");try{let i=await u7({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),hQ.success("文件已保存")}catch(e){throw hQ.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?.[Xp]:void 0;if(a)return a;let i=e.dataTransfer.getData(Xp);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)(J3,{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=[]:u0(e.id)&&(r.tab=u2(e.id,`${t}-tab`)),{id:t,type:"blank",position:uX(n,e.size),data:r,width:e.size.width,height:e.size.height,style:uK(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]),z=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?.[Xm]: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:uX(n,r),style:e.style??uK(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]),A=ew.useCallback(e=>{Array.from(e.dataTransfer.types).some(e=>[Xm,Xp].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&&u0(n.kind))return n;let r=t.kind;if(u0(r))return u2(r,e.id)}(e=u5(u)))?{tab:l,sourceNodeId:u.id}:void 0,c={[Xm]:{node:e}},d={"application/vnd.vantaloom.clip-kind":l?"canvas-tab":"canvas-node",[Xm]:u.id},s&&(c[Xp]=s,d[Xp]=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?u1(l.kind):(0,eb.jsx)(uI,{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)(Yt,{open:void 0!==h,onOpenChange:e=>{e||m(void 0)},onSelectFile:e=>{m(void 0),w(e,h)}}),handleAddPaletteOpenChange:function(e){d(e),e||f(void 0)},handleCanvasAction:T,handleCanvasDragOver:A,handleCanvasDrop:z,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:uU,edgeTypes:uq,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)(h3,{position:"top-right"})]})}async function enQ(){return(await en7("/api/local/projects")).projects??[]}async function en0(e){return en7(`/api/local/projects/${encodeURIComponent(e)}`)}async function en1(e){return en7("/api/local/projects",{method:"POST",body:JSON.stringify(e)})}async function en2(e,t){return en7(`/api/local/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function en5(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/budget`)}async function en4(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/codestats`)}async function en3(e){return en7(`/api/local/projects/${encodeURIComponent(e)}/gitgraph`)}async function en6(e){return((await en7(`/api/local/projects/${encodeURIComponent(e)}/conversations`)).conversations??[]).map(e=>ci(e,void 0))}async function en8(e,t){return ci((await en7("/api/local/agent/conversations",{method:"POST",body:JSON.stringify({projectId:e,title:t?.title??"新对话",goal:t?.goal??""})})).conversation,void 0)}async function en7(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}xR.length;let en9=(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"}]]),ere=["运行环境","工作目录与预算","模型","编排与风控","确认创建"],ert=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],ern=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。默认。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],err=[{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)强制上卡。"}],era=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],eri=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],ero=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}];function erl({onCreated:e,onCancel:t}){let{machines:n}=xD(),{models:r}=x6(),[a,i]=ew.useState("local"),{engines:o}=jE(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,z]=ew.useState(""),[A,T]=ew.useState("standard"),[R,D]=ew.useState("queue-park"),[_,L]=ew.useState(!1),[$,F]=ew.useState("risky+"),[B,V]=ew.useState(!1),[H,U]=ew.useState("wake-singleton"),[q,W]=ew.useState(!1),[K,G]=ew.useState(""),X=jv(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:ers(P,1,16),maxSpawnDepth:ers(I,1,5),hitlStrictness:A,awayMode:R,dangerAgent:{enabled:_,severity:_?$:"",modelRef:""},reviewerAgent:{enabled:B,mode:B?H:"",modelRef:""}},n=await en1({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:ers(S,0,Number.MAX_SAFE_INTEGER)});e(n.id)}catch(e){G(e instanceof Error?e.message:"工程创建失败")}finally{W(!1)}}},[R,S,h,q,_,$,u,k,A,x,X,M,P,I,e,a,p,B,H,w,b]),Q=c===ere.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:ere.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,ez.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)(pt,{className:"size-4"}):t+1}),(0,eb.jsx)("span",{className:(0,ez.cn)("hidden truncate text-sm font-medium transition-colors sm:inline",r?"text-foreground":n?"text-foreground/80":"text-muted-foreground"),children:e})]}),t<ere.length-1?(0,eb.jsx)("span",{"aria-hidden":"true",className:(0,ez.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)(eru,{value:a,onChange:i,machines:n}),(0,eb.jsxs)(erd,{label:"运行引擎(engine)",children:[(0,eb.jsxs)(gG,{value:u,onValueChange:e=>f(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行引擎"})}),(0,eb.jsx)(xO,{children:ert.map(e=>{let t=l(e.value);return(0,eb.jsxs)(xI,{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)(erd,{label:"Claude Code 模型(ccModel)",children:[(0,eb.jsxs)(gG,{value:""===h?jg:h,onValueChange:e=>m(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(erd,{label:"权限模式(permissionMode)",hint:"新对话默认的工具调用门控强度。与下一步的 HITL 严格度独立设置。",children:[(0,eb.jsxs)(gG,{value:p,onValueChange:g,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:ern.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:ern.find(e=>e.value===p)?.desc})]}),(0,eb.jsx)(jp,{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)(erd,{label:"工程名称(必填)",children:[(0,eb.jsx)(eA,{value:b,placeholder:"新工程",onChange:e=>{y(e.currentTarget.value),K&&G("")}}),Z?null:(0,eb.jsx)("p",{className:"mt-1.5 text-xs text-amber-500",children:"工程名称不能为空。"})]}),(0,eb.jsx)(erd,{label:"摘要(可选)",hint:"一句话描述这个工程的目标。",children:(0,eb.jsx)(wc,{value:w,onChange:e=>j(e.currentTarget.value),placeholder:"暂无工程摘要",rows:3})}),(0,eb.jsx)(jc,{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)(erd,{label:"预算上限(budgetTokens,可选)",hint:"工程累计 token 上限。留空 / 0 = 沿用全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:S,onChange:e=>C(e.currentTarget.value),placeholder:"0 = 全局默认",className:"w-52"})})]}):null,2===c?X?(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("span",{className:"text-base font-semibold tracking-normal text-foreground",children:"Claude Code 模型"}),(0,eb.jsxs)(gG,{value:""===h?jg:h,onValueChange:e=>m(e===jg?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{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)(x8,{mainModels:M,onMainModelsChange:E})]}):null,3===c?(0,eb.jsxs)("div",{className:"grid gap-6",children:[(0,eb.jsx)(erd,{label:"同伴并发上限(maxPeers,可选)",hint:`后台同时存在的同伴会话上限。留空 = 默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:P,onChange:e=>O(e.currentTarget.value),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(erd,{label:"派生深度上限(maxSpawnDepth,可选)",hint:`同伴再派生同伴的最大层数。留空 = 默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:I,onChange:e=>z(e.currentTarget.value),placeholder:`默认 3`,className:"w-40"})}),(0,eb.jsxs)(erd,{label:"HITL 严格度(hitlStrictness)",children:[(0,eb.jsxs)(gG,{value:A,onValueChange:e=>T(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:err.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:err.find(e=>e.value===A)?.desc})]}),(0,eb.jsxs)(erd,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gG,{value:R,onValueChange:e=>D(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:era.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:era.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)(hB,{}),"危险反思智能体"]}),(0,eb.jsx)(bt,{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)(erd,{label:"触发档位(severity)",children:(0,eb.jsxs)(gG,{value:$,onValueChange:e=>F(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:eri.map(e=>(0,eb.jsx)(xI,{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)(uO,{}),"评审智能体"]}),(0,eb.jsx)(bt,{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)(erd,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gG,{value:H,onValueChange:e=>U(e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:ero.map(e=>(0,eb.jsx)(xI,{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)(erc,{icon:(0,eb.jsx)(pa,{}),label:"工程名称",value:b.trim()||"(未填写)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(eO,{}),label:"运行环境",value:Y}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(uT,{}),label:"运行引擎",value:ert.find(e=>e.value===u)?.label??u}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(pe,{}),label:"模型",value:X?jb(h):M.length>0?M.map(e=>r.find(t=>t.value===e)?.label??e).join("、"):"未选择(工程内新建对话将无模型可用)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(en9,{}),label:"权限 / HITL",value:`${ern.find(e=>e.value===p)?.label??p} \xb7 ${err.find(e=>e.value===A)?.label??A}`}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(eed,{}),label:"编排上限",value:`同伴 ${P.trim()||`默认8`} \xb7 深度 ${I.trim()||`默认3`}`}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(G0,{}),label:"预算上限",value:S.trim()&&Number(S.trim())>0?`${Number(S.trim()).toLocaleString("en-US")} tokens`:"全局默认"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(pa,{}),label:"工作目录",value:k.length>0?`${k.length} 个目录`:"未选择(可稍后在工程设置中配置)"}),(0,eb.jsx)(erc,{icon:(0,eb.jsx)(uO,{}),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)(pn,{className:"size-4"}),0===c?"取消":"上一步"]}),Q?(0,eb.jsxs)(eI.Button,{type:"button",disabled:q||!Z,onClick:()=>void J(),children:[(0,eb.jsx)(pi,{className:"size-4"}),q?"创建中…":"创建"]}):(0,eb.jsxs)(eI.Button,{type:"button",disabled:1===c&&!Z,onClick:()=>d(e=>Math.min(ere.length-1,e+1)),children:["下一步",(0,eb.jsx)(pr,{className:"size-4"})]})]})})]})}function ers(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 erc({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 erd({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 eru({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)(erd,{label:"工程运行位置",hint:"选择该工程的运行时实际运行在工作组里的哪台机器(默认本机)。",children:(0,eb.jsxs)(gG,{value:e,onValueChange:t,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择运行位置"})}),(0,eb.jsx)(xO,{children:r.map(e=>{let t=e.reachable?"":e.online?"(在线·不可达)":"(离线)";return(0,eb.jsxs)(xI,{value:e.id,disabled:!e.reachable,children:[e.name,t]},e.id)})})]})})}let erf=[{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)强制上卡。"}],erh=[{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:"无人处理时自动放行(仅硬危险命令仍被拒)。谨慎使用。"}],erm=[{value:"high-only",label:"仅高危(high-only)"},{value:"risky+",label:"风险及以上(risky+)"},{value:"all",label:"全部(all)"}],erp=[{value:"wake-singleton",label:"唤醒单例(wake-singleton)"},{value:"spawn-per-card",label:"每卡派生(spawn-per-card)"}],erg=[{value:"vantaloom",label:"Vantaloom(原生)"},{value:"claude-code",label:"Claude Code"},{value:"reclaude",label:"reclaude"}],erx=[{value:"auto",label:"自动(auto)",desc:"不门控,自动放行所有工具调用。"},{value:"acceptEdits",label:"接受编辑(acceptEdits)",desc:"编辑自动放行,命令等高风险调用需审批。"},{value:"ask",label:"逐项审批(ask)",desc:"所有非内联工具调用都需审批。"}],erv=[{value:"basic",label:"基本",icon:(0,eb.jsx)(eeR,{})},{value:"models",label:"模型",icon:(0,eb.jsx)(pe,{})},{value:"tools",label:"工具权限",icon:(0,eb.jsx)(eeh,{})},{value:"commands",label:"禁止命令",icon:(0,eb.jsx)(uB,{})},{value:"folders",label:"工作区文件夹",icon:(0,eb.jsx)(bf,{})},{value:"hosts",label:"可访问主机",icon:(0,eb.jsx)(G5,{})},{value:"engine",label:"引擎",icon:(0,eb.jsx)(eeh,{})},{value:"orchestration",label:"编排与预算",icon:(0,eb.jsx)(eed,{})},{value:"hitl",label:"HITL 风控",icon:(0,eb.jsx)(en9,{})}];function erb({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 en0(e);n(t),s(erj(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=erj(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?erN(l):void 0;async function y(){if(!l||!t)return;let r=erN(l);if(r)return void f(r);d(!0),f(void 0);try{var a;let t,r,i,o=await en2(e,(a=l,t={maxPeers:erk(a.maxPeers,1,16),maxSpawnDepth:erk(a.maxSpawnDepth,1,5),budgetSoftPct:erk(a.budgetSoftPct,1,100),budgetHardPct:erk(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=jv(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:erk(a.budgetTokens,0,Number.MAX_SAFE_INTEGER),policy:t,settingsTemplate:i}));n(o),s(erj(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)(hB,{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)(eeR,{}),"工程设置"]}),(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:erv.map(e=>(0,eb.jsxs)("button",{type:"button",onClick:()=>g(e.value),className:(0,ez.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)(erS,{icon:(0,eb.jsx)(eeR,{className:"size-4"}),title:"基本",desc:"工程名称与摘要。",children:[(0,eb.jsx)(erC,{label:"名称",children:(0,eb.jsx)(eA,{value:l.title,onChange:e=>w({title:e.target.value}),placeholder:"工程名称"})}),(0,eb.jsx)(erC,{label:"摘要",hint:"一句话描述这个工程的目标(可选)。",children:(0,eb.jsx)(wc,{value:l.summary,onChange:e=>w({summary:e.target.value}),placeholder:"暂无工程摘要",rows:3})})]}):null,"models"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(pe,{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)(hB,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未选择任何模型时,本工程内新建的对话将无模型可用、无法运行。请至少选择一个模型。此项与「引擎与工具」一样属于",(0,eb.jsx)("strong",{children:"快照"}),"模板,仅影响未来新建的对话。"]})]}),jv(l.engine)?(0,eb.jsx)(erC,{label:"Claude Code 模型(ccModel)",hint:"当前引擎为 Claude Code,模型由其提供,不走 Vantaloom 模型路由。",icon:(0,eb.jsx)(pe,{className:"size-4"}),children:(0,eb.jsxs)(gG,{value:""===l.ccModel?jg:l.ccModel,onValueChange:e=>w({ccModel:e===jg?"":e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:"选择 Claude Code 模型"})}),(0,eb.jsx)(xO,{children:jx.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}):(0,eb.jsx)(x8,{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)(ery,{}),(0,eb.jsx)(jl,{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)(ery,{}),(0,eb.jsx)(js,{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)(ery,{}),(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)(hB,{}),(0,eb.jsxs)("span",{children:[(0,eb.jsx)("strong",{children:"关键:"}),"未配置工作区文件夹时,本工程内新建的对话",(0,eb.jsx)("strong",{children:"没有任何工作目录"}),",智能体将无处读写文件。请至少添加一个文件夹。"]})]}),(0,eb.jsx)(jc,{title:"可访问的工作区文件夹",value:l.folders,onValueChange:e=>w({folders:jv(l.engine)?e.slice(-1):e})}),jv(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)(ery,{}),(0,eb.jsx)(jp,{value:l.hosts,onValueChange:e=>w({hosts:e}),disabled:jv(l.engine),hint:jv(l.engine)?"Claude Code 的工具锁定在所选 owner 机器本地,可访问主机已锁定。":void 0})]}):null,"orchestration"===p?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(eed,{className:"size-4"}),title:"编排上限",desc:"限制同伴并发数与派生深度,避免后台 peer 失控扩散。0 / 留空 = 全局默认。",children:[(0,eb.jsx)(erC,{label:"同伴并发上限(maxPeers)",hint:`后台同时存在的同伴会话上限。默认 8,范围 1–16。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:16,value:l.maxPeers,onChange:e=>w({maxPeers:e.target.value}),placeholder:`默认 8`,className:"w-40"})}),(0,eb.jsx)(erC,{label:"派生深度上限(maxSpawnDepth)",hint:`同伴再派生同伴的最大层数。默认 3,范围 1–5。`,children:(0,eb.jsx)(eA,{type:"number",min:1,max:5,value:l.maxSpawnDepth,onChange:e=>w({maxSpawnDepth:e.target.value}),placeholder:`默认 3`,className:"w-40"})})]}),(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(G0,{className:"size-4"}),title:"预算",desc:"工程级 token 预算上限与软 / 硬阈值。与概览页的预算条共用同一更新逻辑——0 = 全局默认。",children:[(0,eb.jsx)(erC,{label:"预算上限(budgetTokens)",hint:"工程累计 token 上限。0 = 恢复全局默认(当前 5,000,000)。",children:(0,eb.jsx)(eA,{type:"number",min:0,step:1e5,value:l.budgetTokens,onChange:e=>w({budgetTokens:e.target.value}),placeholder:"0 = 全局默认",className:"w-52"})}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(erC,{label:"软阈值 %(budgetSoftPct)",hint:`接近上限时提示。默认 80%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:100,value:l.budgetSoftPct,onChange:e=>w({budgetSoftPct:e.target.value}),placeholder:`默认 80`,className:"w-32"})}),(0,eb.jsx)(erC,{label:"硬阈值 %(budgetHardPct)",hint:`达到后阻止新增 peer。默认 100%。0 = 默认。`,children:(0,eb.jsx)(eA,{type:"number",min:0,max:200,value:l.budgetHardPct,onChange:e=>w({budgetHardPct:e.target.value}),placeholder:`默认 100`,className:"w-32"})})]})]})]}):null,"hitl"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(en9,{className:"size-4"}),title:"HITL 风控",desc:"人类在环(Human-in-the-loop)的严格度、离开模式与监督智能体。",children:[(0,eb.jsxs)(erC,{label:"严格度(hitlStrictness)",children:[(0,eb.jsxs)(gG,{value:l.hitlStrictness||"standard",onValueChange:e=>w({hitlStrictness:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erf.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erf.find(e=>e.value===(l.hitlStrictness||"standard"))?.desc})]}),(0,eb.jsxs)(erC,{label:"离开模式(awayMode)",hint:"无人值守时审批门的行为。",children:[(0,eb.jsxs)(gG,{value:l.awayMode||"queue-park",onValueChange:e=>w({awayMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erh.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erh.find(e=>e.value===(l.awayMode||"queue-park"))?.desc})]}),(0,eb.jsx)(erC,{label:"驻留 TTL(秒,approvalParkTtlSeconds)",hint:"排队驻留下审批卡的存活秒数。0 = 无限驻留(直到你处理)。",children:(0,eb.jsx)(eA,{type:"number",min:0,value:l.approvalParkTtlSeconds,onChange:e=>w({approvalParkTtlSeconds:e.target.value}),placeholder:"0 = 无限驻留",className:"w-40"})}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-amber-500",children:[(0,eb.jsx)(hB,{}),"危险反思智能体"]}),(0,eb.jsx)(bt,{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)(erC,{label:"触发档位(severity)",children:(0,eb.jsxs)(gG,{value:l.dangerSeverity||"risky+",onValueChange:e=>w({dangerSeverity:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erm.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(erC,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.dangerModelRef,onChange:e=>w({dangerModelRef:e.target.value}),placeholder:"例如 gpt-5-mini(留空 = 默认)"})})]}):null]}),(0,eb.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground [&_svg]:size-4 [&_svg]:text-sky-teal",children:[(0,eb.jsx)(uO,{}),"评审智能体"]}),(0,eb.jsx)(bt,{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)(erC,{label:"模式(mode)",hint:"单例唤醒省槽位;每卡派生会迅速消耗同伴槽位。",children:(0,eb.jsxs)(gG,{value:l.reviewerMode||"wake-singleton",onValueChange:e=>w({reviewerMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erp.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsx)(erC,{label:"模型(modelRef,可选)",hint:"留空使用工程 / 全局默认模型。",children:(0,eb.jsx)(eA,{value:l.reviewerModelRef,onChange:e=>w({reviewerModelRef:e.target.value}),placeholder:"例如 gpt-5-codex(留空 = 默认)"})})]}):null]})]}):null,"engine"===p?(0,eb.jsxs)(erS,{icon:(0,eb.jsx)(eeh,{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)(hB,{}),(0,eb.jsxs)("span",{children:["此模板为",(0,eb.jsx)("strong",{children:"快照"}),":只影响本工程",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]}),(0,eb.jsx)(erC,{label:"引擎(engine)",children:(0,eb.jsxs)(gG,{value:l.engine,onValueChange:e=>w({engine:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erg.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})}),(0,eb.jsxs)(erC,{label:"权限模式(permissionMode)",children:[(0,eb.jsxs)(gG,{value:l.permissionMode,onValueChange:e=>w({permissionMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:erx.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]}),(0,eb.jsx)("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:erx.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,ez.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)(pt,{}),"已保存"]}):null,v?(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>t&&s(erj(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)(pt,{className:"size-4"}),"保存"]})]})})]}):null}function ery(){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)(hB,{}),(0,eb.jsxs)("span",{children:["此为本工程的",(0,eb.jsx)("strong",{children:"设置模板"}),"(快照):只影响",(0,eb.jsx)("strong",{children:"未来"}),"新建的对话,不会回溯修改已存在的对话。"]})]})}function erw(e){return e&&e>0?String(e):""}function erj(e){let t=e.policy??{},n=t.dangerAgent??{},r=t.reviewerAgent??{},a=e.settingsTemplate;return{title:e.title??"",summary:e.summary??"",maxPeers:erw(t.maxPeers),maxSpawnDepth:erw(t.maxSpawnDepth),budgetTokens:erw(e.budgetTokens),budgetSoftPct:erw(t.budgetSoftPct),budgetHardPct:erw(t.budgetHardPct),approvalParkTtlSeconds:erw(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 erk(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 erN(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 erS({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 erC({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 erM=(0,ek.default)("kanban",[["path",{d:"M5 3v14",key:"9nsxs2"}],["path",{d:"M12 3v8",key:"1h2ygw"}],["path",{d:"M19 3v18",key:"1sk56x"}]]);function erE({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,ez.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)(xS,{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 erP({className:e,...t}){return(0,eb.jsx)("option",{"data-slot":"native-select-option",className:(0,ez.cn)("bg-[Canvas] text-[CanvasText]",e),...t})}function erO(){return{kind:"human",id:"local",displayName:"我"}}async function erI(e,t){let n=t?`?status=${encodeURIComponent(t)}`:"";return(await erq(`/api/local/projects/${encodeURIComponent(e)}/issues${n}`)).issues??[]}async function erz(e){return erq(`/api/local/issues/${encodeURIComponent(e)}`)}async function erA(e,t){return erq(`/api/local/projects/${encodeURIComponent(e)}/issues`,{method:"POST",body:JSON.stringify(t)})}async function erT(e,t){return erq(`/api/local/issues/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function erR(e){await erq(`/api/local/issues/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erD(e,t){return erq(`/api/local/issues/${encodeURIComponent(e)}/claim`,{method:"POST",body:JSON.stringify({assignee:t})})}async function er_(e,t,n=erO()){return erq(`/api/local/issues/${encodeURIComponent(e)}/comments`,{method:"POST",body:JSON.stringify({actor:n,body:t})})}async function erL(e){return(await erq(`/api/local/issues/${encodeURIComponent(e)}/events`)).events??[]}async function er$(e){return(await erq(`/api/local/projects/${encodeURIComponent(e)}/links`)).links??[]}async function erF(e,t,n,r){return erq(`/api/local/projects/${encodeURIComponent(e)}/links`,{method:"POST",body:JSON.stringify({fromIssueId:t,toIssueId:n,kind:r})})}async function erB(e){await erq(`/api/local/links/${encodeURIComponent(e)}`,{method:"DELETE"})}async function erV(e){return(await erq(`/api/local/projects/${encodeURIComponent(e)}/approvals`)).approvals??[]}async function erH(e,t,n,r){await erq(`/api/local/agent/conversations/${encodeURIComponent(e)}/approvals/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify(null!=r&&""!==r?{decision:n,feedback:r}:{decision:n})})}class erU extends Error{status;constructor(e,t){super(e),this.name="KanbanAPIError",this.status=t}}async function erq(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 erU("string"==typeof r?.error?r.error:"kanban api failed",n.status);return r}let erW=[{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"}],erK={status:"cancelled",label:"已取消",dot:"bg-ash-gray",chip:"bg-muted text-muted-foreground"},erG=[...erW,erK],erX={bug:"缺陷",feature:"功能",task:"任务",chore:"杂务",question:"疑问"},erY=["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"},erJ={low:"低",normal:"普通",high:"高",urgent:"紧急"},erQ=["low","normal","high","urgent"],er0={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"},er1={depends_on:"依赖",blocks:"阻塞",parent:"父级",relates_to:"关联"},er2=["depends_on","blocks","parent","relates_to"],er5={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"}},er4={created:"创建",comment:"评论",status_change:"状态变更",claim:"认领",progress:"进度",schedule:"排期"};function er3(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 er6={safe:"安全",normal:"普通",risky:"有风险",dangerous:"危险"},er8={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"},er7=(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"}]]),er9=(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 eae({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([erz(e),erL(e).catch(()=>[]),er$(t).catch(()=>[]),erI(t).catch(()=>[])]);l(n),c(r),u(a),h(i)}catch(e){hQ.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 er$(t).catch(()=>d)),o&&a?.(o)},[t,d,o,a]);async function N(e,n){if(o){x(!0);try{await erF(t,o.id,e,n),await k()}catch(e){hQ.error(e instanceof Error?e.message:"添加关联失败")}finally{x(!1)}}}async function S(e){x(!0);try{await erB(e),await k()}catch(e){hQ.error(e instanceof Error?e.message:"删除关联失败")}finally{x(!1)}}let C=ew.useCallback(async e=>{if(o){x(!0);try{let t=await erT(o.id,e);l(t),a?.(t);let n=await erL(o.id).catch(()=>s);c(n)}catch(e){hQ.error(e instanceof Error?e.message:"更新失败")}finally{x(!1)}}},[o,a,s]);async function M(){if(o){x(!0);try{let e=await erD(o.id,erO());l(e),a?.(e);let t=await erL(o.id).catch(()=>s);c(t),hQ.success("认领成功")}catch(e){e instanceof erU&&409===e.status?(hQ.error("认领失败:该 issue 已被他人认领"),j()):hQ.error(e instanceof Error?e.message:"认领失败")}finally{x(!1)}}}async function E(){if(o&&v.trim()){x(!0);try{await er_(o.id,v.trim()),b("");let e=await erL(o.id).catch(()=>s);c(e),a?.(o)}catch(e){hQ.error(e instanceof Error?e.message:"评论失败")}finally{x(!1)}}}async function P(){if(o&&window.confirm(`确定删除 #${o.number} ${o.title}?`)){x(!0);try{await erR(o.id),i?.(o.id),r()}catch(e){hQ.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 z(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 A(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)(dD,{open:n,onOpenChange:e=>e?void 0:r(),children:(0,eb.jsxs)(fI,{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)(fT,{className:"sr-only",children:o?`#${o.number} ${o.title}`:"issue 详情"}),(0,eb.jsx)(fR,{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)(eat,{label:"标题",children:(0,eb.jsx)(eA,{defaultValue:o.title,onBlur:e=>{let t=e.target.value.trim();t&&t!==o.title&&C({title:t})}})}),(0,eb.jsx)(eat,{label:"描述",children:(0,eb.jsx)(wc,{defaultValue:o.body,rows:4,placeholder:"补充描述…",onBlur:e=>{e.target.value!==o.body&&C({body:e.target.value})}})}),(0,eb.jsx)(eat,{label:`进度 \xb7 ${O.percent}%`,children:(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)(eeJ,{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)(xQ,{checked:e.done,onCheckedChange:()=>void z(t)}),(0,eb.jsx)("span",{className:(0,ez.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)(fP.XIcon,{className:"size-3.5"})})]},t))}),(0,eb.jsx)(ean,{onAdd:e=>void A(e)})]})}),(0,eb.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"活动"}),(0,eb.jsx)("div",{className:"flex flex-col gap-3",children:0===s.length?(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/60",children:"暂无活动"}):s.map(e=>{let t=e.actor?.kind==="human"?"human":"agent",n=e.actor?.displayName??"系统";return(0,eb.jsxs)("div",{className:"flex gap-2.5",children:[(0,eb.jsx)(eaa,{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:er4[e.kind]??e.kind}),(0,eb.jsx)("span",{className:"text-muted-foreground/60",children:er3(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)(wc,{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)(er9,{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)(eat,{label:"状态",children:(0,eb.jsx)(erE,{className:"w-full",value:o.status,onChange:e=>void C({status:e.target.value}),children:erG.map(e=>(0,eb.jsx)(erP,{value:e.status,children:e.label},e.status))})}),(0,eb.jsx)(eat,{label:"优先级",children:(0,eb.jsx)(erE,{className:"w-full",value:o.priority,onChange:e=>void C({priority:e.target.value}),children:erQ.map(e=>(0,eb.jsx)(erP,{value:e,children:erJ[e]},e))})}),(0,eb.jsx)(eat,{label:"类型",children:(0,eb.jsx)(erE,{className:"w-full",value:o.type,onChange:e=>void C({type:e.target.value}),children:erY.map(e=>(0,eb.jsx)(erP,{value:e,children:erX[e]},e))})}),(0,eb.jsx)(eat,{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)(eaa,{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)(eat,{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)(fP.XIcon,{className:"size-3"})})]},e))}),(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:e=>{e.preventDefault();let t=y.trim();t&&!o.labels.includes(t)&&C({labels:[...o.labels,t]}),w("")},children:[(0,eb.jsx)(eA,{value:y,onChange:e=>w(e.target.value),placeholder:"新标签",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})]})}),(0,eb.jsx)(eat,{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=er5[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)(er7,{className:"size-3.5 shrink-0 text-muted-foreground"}),(0,eb.jsxs)("span",{className:(0,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",a.chip),children:[t?"":"被",er1[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)(fP.XIcon,{className:"size-3.5"})})]},e.id)})}),(0,eb.jsx)(ear,{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:["创建于 ",er3(o.createdAt)]}),(0,eb.jsxs)("span",{children:["更新于 ",er3(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)(bb,{className:"size-4"})," 删除 issue"]})]})]})]})]})})}function eat({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 ean({onAdd:e}){let[t,n]=ew.useState("");return(0,eb.jsxs)("form",{className:"flex gap-1.5",onSubmit:r=>{r.preventDefault(),e(t),n("")},children:[(0,eb.jsx)(eA,{value:t,onChange:e=>n(e.target.value),placeholder:"新增清单项",className:"h-8"}),(0,eb.jsx)(eI.Button,{type:"submit",size:"sm",variant:"outline",children:(0,eb.jsx)(lY,{className:"size-4"})})]})}function ear({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)(erE,{size:"sm",className:"w-full",value:c,onChange:e=>d(e.target.value),children:er2.map(e=>(0,eb.jsx)(erP,{value:e,children:er1[e]},e))}),(0,eb.jsx)(eA,{autoFocus:!0,value:l,onChange:e=>s(e.target.value),placeholder:"搜索 issue(编号 / 标题)",className:"h-8"}),(0,eb.jsx)("div",{className:"flex max-h-40 flex-col gap-0.5 overflow-y-auto",children:0===f.length?(0,eb.jsx)("span",{className:"px-1 py-1.5 text-xs text-muted-foreground/60",children:"无可关联的 issue"}):f.map(e=>(0,eb.jsxs)("button",{type:"button",disabled:r,onClick:async()=>{await a(e.id,c),o(!1),s("")},className:"flex items-center gap-1.5 rounded-md px-2 py-1 text-left text-xs transition hover:bg-muted disabled:opacity-50",children:[(0,eb.jsxs)("span",{className:"shrink-0 font-mono text-muted-foreground",children:["#",e.number]}),(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate text-secondary-foreground",children:e.title})]},e.id))}),(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(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 eaa({kind:e,small:t}){let n=t?"size-3":"size-3.5";return(0,eb.jsx)("span",{className:(0,ez.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)(uO,{className:n}):(0,eb.jsx)(VL,{className:n})})}let eai=["backlog","todo","in_progress","blocked","review","done","cancelled"],eao={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 eal({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=eai.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)(eed,{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:er5[e].stroke}}),er1[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)(eed,{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:er5[e].stroke})},e))}),s.map(({link:e,from:t,to:n})=>{let r=eas(t,n),a=eas(n,t),i=er5[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:er1[e.kind]})]},e.id)})]}),a.map(({issue:e,x:t,y:n})=>{var a;let i=eao[e.status];return(0,eb.jsxs)("button",{type:"button",onClick:()=>r(e.id),style:{left:t,top:n,width:184,height:56},className:(0,ez.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,ez.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,erG.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 eas(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}}async function eac(e){let t=await fetch((0,eT.localAPIURL)(`/api/local/projects/${encodeURIComponent(e)}/dispatcher`),{method:"POST",cache:"no-store",headers:{"Content-Type":"application/json"}}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error("string"==typeof n?.error?n.error:"dispatcher api failed");let r=ca(n);return{conversationId:r.conversation.id,ownerMachineId:r.conversation.ownerMachineId,events:r.events,running:r.conversation.running??!1,modelRef:r.conversation.settings?.mainModels?.[0]??"",mainModels:r.conversation.settings?.mainModels??[]}}function ead({projectId:e}){let[t,n]=ew.useState(void 0),[r,a]=ew.useState(void 0),[i,o]=ew.useState(""),[l,s]=ew.useState([]),[c,d]=ew.useState([]),[u,f]=ew.useState(!1),[h,m]=ew.useState(!1);ew.useEffect(()=>{let t=!0;return n(void 0),d([]),f(!1),s([]),(async()=>{try{let r=await eac(e);if(!t)return;n(r.conversationId),a(r.ownerMachineId),o(r.modelRef),s(r.mainModels),d(r.events),f(r.running)}catch{}})(),()=>{t=!1}},[e]),ew.useEffect(()=>{let e;if(!t)return;let n=!0,a=async()=>{if(n)try{let i=await sI(t,r);if(!n)return;let o=i.conversation.running??!1;d(i.events),f(o),s(i.conversation.settings?.mainModels??[]),e=window.setTimeout(a,o?1200:5e3)}catch{if(!n)return;try{let e=await sz(t,{limit:400},r);n&&e.events.length&&d(e.events)}catch{}n&&(e=window.setTimeout(a,5e3))}};return a(),()=>{n=!1,void 0!==e&&window.clearTimeout(e)}},[t,r]);let p=ew.useCallback(e=>{let n=e.trim();t&&n&&!h&&(m(!0),f(!0),(async()=>{try{await sZ(t,{message:n,modelRef:i,mode:"agent"},r)}catch{f(!1)}finally{m(!1)}})())},[t,r,i,h]),g=ew.useMemo(()=>{if(u||h||0===c.length)return;let e=c[c.length-1];return e&&"ask"===e.kind?e:void 0},[c,u,h]),{models:x}=x6(),v=ew.useMemo(()=>l.length?x.filter(e=>l.includes(e.value)).map(e=>({id:e.value,label:e.label})):[],[x,l]),b=0===c.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 flex-col gap-0.5 border-b px-4 py-2.5",children:[(0,eb.jsx)("span",{className:"text-[13px] font-medium text-foreground",children:"任务分发"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"把需求转成任务并派发执行"})]}),(0,eb.jsxs)("div",{className:"relative min-h-0 flex-1",children:[(0,eb.jsx)(HW,{className:"size-full min-h-0",composerClassName:"max-w-[42rem]",events:c,running:u||h,disabled:!t,models:v,modelId:i,onModelChange:e=>o(e),hidePermissionMode:!0,onSubmit:e=>p(e.value),planPromptBar:g?(0,eb.jsx)(eau,{ask:g,onAnswer:p}):void 0}),b?(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.jsx)("div",{className:"max-w-xs text-center",children:(0,eb.jsx)("p",{className:"text-sm text-muted-foreground",children:"把你对这个工程的需求告诉我,我会拆成任务并派发给执行会话。"})})}):null]})]})}function eau({ask:e,onAnswer:t}){let n=(e.detail?.trim()||e.title?.trim())??"",r=e.askOptions??[],a=e.askAllowMultiple??!1,i=e.askAllowCustom??!1,[o,l]=ew.useState([]);return ew.useEffect(()=>{l([])},[e.id]),(0,eb.jsxs)("div",{className:"vtl-agent-composer-prompt-bar mb-[-1px] rounded-t-xl border border-b-0 bg-popover px-3 pt-2.5 pb-3 shadow-sm",children:[(0,eb.jsx)("p",{className:"mb-2 text-[13px] font-medium text-foreground",children:n}),r.length>0?(0,eb.jsx)("div",{className:"flex flex-wrap gap-1.5",children:r.map(e=>{let n=a&&o.includes(e);return(0,eb.jsx)(eI.Button,{type:"button",size:"sm",variant:n?"default":"outline",className:(0,ez.cn)("h-auto max-w-full justify-start whitespace-normal py-1.5 text-left text-xs","w-full sm:w-auto"),onClick:()=>a?void l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]):t(e),children:e},e)})}):null,a?(0,eb.jsx)("div",{className:"mt-2 flex justify-end",children:(0,eb.jsxs)(eI.Button,{type:"button",size:"sm",disabled:0===o.length,onClick:()=>t(o.join("、")),children:[(0,eb.jsx)(er9,{className:"mr-1.5 size-3"}),"提交所选"]})}):null,i?(0,eb.jsx)("p",{className:"mt-2 text-[11px] text-muted-foreground",children:"或在下方输入框自行回答"}):null]})}let eaf="application/x-vantaloom-issue";function eah({projectId:e}){let[t,n]=ew.useState([]),[r,a]=ew.useState([]),[i,o]=ew.useState([]),[l,s]=ew.useState("board"),[c,d]=ew.useState(!1),[u,f]=ew.useState(!1),[h,m]=ew.useState(!0),[p,g]=ew.useState(!1),[x,v]=ew.useState(null),[b,y]=ew.useState(null),[w,j]=ew.useState(null),[k,N]=ew.useState(null),[S,C]=ew.useState(!1),[M,E]=ew.useState(null),P=ew.useCallback(async t=>{t?.silent||g(!0);try{let[t,r,i]=await Promise.all([erI(e),er$(e).catch(()=>[]),erV(e).catch(()=>[])]);n(t),a(r),o(i),v(null)}catch(e){v(e instanceof Error?e.message:"加载看板失败")}finally{m(!1),g(!1)}},[e]);ew.useEffect(()=>{m(!0),P({silent:!0});let e=setInterval(()=>void P({silent:!0}),1e4),t=()=>void P({silent:!0});return window.addEventListener("focus",t),()=>{clearInterval(e),window.removeEventListener("focus",t)}},[P]);let O=ew.useMemo(()=>{let e={};for(let t of[...erW,erK])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 I(e,r,a){let i,o,l=t.find(t=>t.id===e);if(!l)return;let s=(O[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){y(null),n(t=>t.map(t=>t.id===e?{...t,status:r,sortOrder:c}:t));try{await erT(e,{status:r,sortOrder:c})}catch(e){n(t),y(e instanceof Error?`移动失败:${e.message}`:"移动失败,已撤销")}}}function z(e,t,n){e.preventDefault(),e.stopPropagation(),j(null);let r=e.dataTransfer.getData(eaf)||e.dataTransfer.getData("text/plain");r&&I(r,t,n)}async function A(e,t,n){y(null);try{await erH(e.conversationId,e.approvalId,t,n)}catch(e){e instanceof erU&&404===e.status||y(e instanceof Error?`${"approve"===t?"通过":"拒绝"}失败:${e.message}`:"操作失败")}o(t=>t.filter(t=>t.approvalId!==e.approvalId)),P({silent:!0})}let T=S?[...erW,erK]:erW;return(0,eb.jsxs)(eeC,{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)(erM,{className:"size-4 text-muted-foreground"}):(0,eb.jsx)(eed,{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:[b?(0,eb.jsxs)("span",{className:"flex items-center gap-1 text-xs text-hot-pink",children:[(0,eb.jsx)(eE,{className:"size-3.5"}),b]}):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,ez.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)(erM,{className:"size-3.5"}),"看板"]}),(0,eb.jsxs)("button",{type:"button",onClick:()=>s("graph"),className:(0,ez.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)(eed,{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:S,onChange:e=>C(e.target.checked),className:"size-3.5 accent-vivid-violet"}),"显示已取消"]}):null,(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void P(),disabled:p,children:[(0,eb.jsx)(bv,{className:(0,ez.cn)("size-4",p&&"animate-spin")}),"刷新"]}),(0,eb.jsxs)(eI.Button,{variant:"outline",size:"sm",onClick:()=>{f(!0),d(!0)},children:[(0,eb.jsx)(jD,{className:"size-4"}),"任务分发"]})]})]}),i.length>0?(0,eb.jsx)(eam,{approvals:i,onResolve:A}):null,h?(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"})}):x?(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"}),x,(0,eb.jsx)(eI.Button,{variant:"outline",size:"sm",onClick:()=>void P(),children:"重试"})]}):"graph"===l?(0,eb.jsx)(eal,{issues:t,links:r,onOpenIssue:e=>N(e)}):(0,eb.jsx)("div",{className:(0,ez.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:T.map(t=>{let r=O[t.status]??[],a=w===t.status,i=M===t.status;return(0,eb.jsxs)("section",{onDragOver:e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",w!==t.status&&j(t.status)},onDragLeave:e=>{e.currentTarget.contains(e.relatedTarget)||j(e=>e===t.status?null:e)},onDrop:e=>z(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,ez.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,ez.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:()=>E(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,ez.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)(eax,{onCancel:()=>E(null),onCreate:async r=>{try{let a=await erA(e,{...r}),i="backlog"===t.status?a:await erT(a.id,{status:t.status}).catch(()=>a);n(e=>[...e,i]),E(null)}catch(e){y(e instanceof Error?`新建失败:${e.message}`:"新建失败")}}}):null,0!==r.length||i?r.map(e=>(0,eb.jsx)(eag,{issue:e,onOpen:()=>N(e.id),onDropBefore:n=>z(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)(eae,{issueId:k,projectId:e,open:null!==k,onClose:()=>N(null),onChange:t=>{n(e=>e.map(e=>e.id===t.id?t:e)),er$(e).then(e=>a(e)).catch(()=>{})},onDeleted:e=>n(t=>t.filter(t=>t.id!==e))}),(0,eb.jsx)(dD,{open:c,onOpenChange:d,children:(0,eb.jsxs)(eeF,{side:"right",className:"w-full gap-0 p-0 sm:max-w-md md:max-w-lg lg:max-w-xl",children:[(0,eb.jsx)(eeB,{className:"border-b",children:(0,eb.jsx)(eeV,{children:"任务分发"})}),(0,eb.jsx)("div",{className:"min-h-0 flex-1",children:u?(0,eb.jsx)(ead,{projectId:e}):null})]})})]})}function eam({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)(en9,{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)(eap,{approval:e,onResolve:t},e.approvalId))})]})}function eap({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,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",er8[e.classification]),children:er6[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)(jD,{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:er3(e.createdAt)})]}),a?(0,eb.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,eb.jsx)(eA,{autoFocus:!0,value:o,onChange:e=>l(e.target.value),placeholder:"拒绝理由(可选)",className:"h-8",onKeyDown:e=>{"Enter"===e.key&&s("reject",o.trim()),"Escape"===e.key&&(i(!1),l(""))}}),(0,eb.jsxs)("div",{className:"flex justify-end gap-1.5",children:[(0,eb.jsx)(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)(fP.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)(fP.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)(pt,{className:"size-4"}),"通过"]})]})]})}function eag({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(eaf,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,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",erZ[e.type]),children:erX[e.type]}),"low"!==e.priority&&"normal"!==e.priority?(0,eb.jsx)("span",{className:(0,ez.cn)("shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium",er0[e.priority]),children:erJ[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)(eaa,{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 eax({onCreate:e,onCancel:t}){let[n,r]=ew.useState(""),[a,i]=ew.useState("task"),[o,l]=ew.useState("normal"),[s,c]=ew.useState(!1);return(0,eb.jsxs)("form",{className:"flex flex-col gap-2 rounded-lg border border-vivid-violet/40 bg-card p-2.5",onSubmit:async t=>{t.preventDefault(),n.trim()&&(c(!0),await e({title:n.trim(),type:a,priority:o}),c(!1))},children:[(0,eb.jsx)(eA,{autoFocus:!0,value:n,onChange:e=>r(e.target.value),placeholder:"issue 标题",className:"h-8"}),(0,eb.jsxs)("div",{className:"flex gap-1.5",children:[(0,eb.jsx)(erE,{size:"sm",className:"flex-1",value:a,onChange:e=>i(e.target.value),children:erY.map(e=>(0,eb.jsx)(erP,{value:e,children:erX[e]},e))}),(0,eb.jsx)(erE,{size:"sm",className:"flex-1",value:o,onChange:e=>l(e.target.value),children:erQ.map(e=>(0,eb.jsx)(erP,{value:e,children:erJ[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 eav=(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"}]]),eab=(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 eay({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([en4(e).catch(()=>void 0),en3(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 en0(e);if(!t)return;r(a);let o=await en6(e).catch(()=>[]);if(!t)return;c(o);let l=await erI(e).catch(()=>[]);if(!t)return;u(l);let s=await erV(e).catch(()=>[]);if(!t)return;let d=await en5(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 een(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)(eeC,{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)(uI,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程"}),(0,eb.jsx)(eaw,{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)(eeR,{}),"设置"]}):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)(eaN,{icon:(0,eb.jsx)(uO,{className:"size-4"}),label:"Agent 会话",value:a.sessionCount,hint:`${a.runningCount} 个运行中`,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(erM,{className:"size-4"}),label:"issue 总数",value:a.issueCount,hint:`${a.openIssueCount} 个进行中`,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(G0,{className:"size-4"}),label:"总 token",value:a.tokenTotal,loading:o}),(0,eb.jsx)(eaN,{icon:(0,eb.jsx)(uI,{className:"size-4"}),label:"画布节点",value:a.canvasNodeCount??"—",hint:n?.canvasId?void 0:"未绑定画布",loading:o&&n?.canvasId!==void 0})]}),(0,eb.jsx)(eaj,{projectId:e,budget:f,loading:o,onUpdated:(e,t)=>{h(e),t&&r(t)}}),(0,eb.jsx)(eak,{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)(eaE,{stats:m,loading:v,onRefresh:()=>void y()}),(0,eb.jsx)(eaP,{graph:g,loading:v,onRefresh:()=>void y()})]})]})})}function eaw({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)(en9,{}),"待审批 ",e.toLocaleString("zh-CN")]})}function eaj({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)(ee6,{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 en2(e,{budgetTokens:n}),l=await en5(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)(ee6,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"工程预算"})]}),(0,eb.jsx)("span",{className:(0,ez.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,ez.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)(pt,{}),"保存"]}),(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)(fP.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)(HZ,{}),"调整"]})]})})]})}function eak({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)(uO,{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,ez.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)(VR,{}),(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 eaN({icon:e,label:t,value:n,hint:r,loading:a,muted:i}){return(0,eb.jsxs)("div",{className:(0,ez.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 eaS({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)(bv,{className:(0,ez.cn)(e&&"animate-spin")}),"刷新"]})}let eaC=["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 eaM(e,t){return"其他"===t?"bg-ash-gray":eaC[e%eaC.length]??"bg-ash-gray"}function eaE({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)(eav,{className:"size-4"}),(0,eb.jsx)("span",{className:"text-[13px]",children:"代码行数 · 分语言占比"})]}),(0,eb.jsx)(eaS,{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,ez.cn)("h-full",eaM(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,ez.cn)("size-2.5 shrink-0 rounded-sm",eaM(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 eaP({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)(VR,{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)(eaS,{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,ez.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)(eab,{}):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 eaO={delete:"Delete",empty:"Drop here",title:"Trash"};function eaI({active:e=!1,items:t=[],labels:n,className:r,onDrop:a,onDelete:i,onItemRestore:o,...l}){let s={...eaO,...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,ez.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,ez.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)(bb,{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)(fP.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)(bb,{className:"size-5"})})})}function eaz({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,ez.cn)("pointer-events-none fixed inset-0 z-40 overflow-visible transition-opacity duration-200",e&&"opacity-0"),children:[(0,eb.jsx)(eaI,{active:!e&&void 0!==a,items:e?[]:n,className:(0,ez.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,ez.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)(Yp,{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?.[Xg],i=n.payloads?{...n.payloads}:void 0,l=n.payloads?.[Xx],a&&i&&(i[Xg]={...a,config:{...a.config}}),l&&i&&(i[Xx]={...l,config:l.config?{...l.config}:l.config}),s={...n,id:`${n.id}-copy-${c.current}`,title:`${n.title} copy`,payloads:i,dragData:{...n.dragData,...a?{"application/vnd.vantaloom.dashboard-widget-config":JSON.stringify(a.config)}:{}}},void((d=[...t]).splice(r+1,0,s),o(d))},onItemsRemove:e=>o(e),onItemsReorder:e=>o(e),onItemDragStart:({item:e})=>i(e.id),onItemDragEnd:()=>i(void 0)})}):null]}),document.body):null}let eaA=(0,ek.default)("languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]),eaT=(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"}]]),eaR=(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"}]]),eaD=(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"}]]),ea_=(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"}]]),eaL=(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"}]]),ea$=(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"}]]),eaF=(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"}]]),eaB=(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"}]]),eaV=(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 eaH="Collapsible",[eaU,eaq]=ch(eaH),[eaW,eaK]=eaU(eaH),eaG=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:a,disabled:i,onOpenChange:o,...l}=e,[s,c]=cw({prop:r,defaultProp:a??!1,onChange:o,caller:eaH});return(0,eb.jsx)(eaW,{scope:n,disabled:i,contentId:cb(),open:s,onOpenToggle:ew.useCallback(()=>c(e=>!e),[c]),children:(0,eb.jsx)(cS.div,{"data-state":ea0(s),"data-disabled":i?"":void 0,...l,ref:t})})});eaG.displayName=eaH;var eaX="CollapsibleTrigger",eaY=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,a=eaK(eaX,n);return(0,eb.jsx)(cS.button,{type:"button","aria-controls":a.contentId,"aria-expanded":a.open||!1,"data-state":ea0(a.open),"data-disabled":a.disabled?"":void 0,disabled:a.disabled,...r,ref:t,onClick:cp(e.onClick,a.onOpenToggle)})});eaY.displayName=eaX;var eaZ="CollapsibleContent",eaJ=ew.forwardRef((e,t)=>{let{forceMount:n,...r}=e,a=eaK(eaZ,e.__scopeCollapsible);return(0,eb.jsx)(cH,{present:n||a.open,children:({present:e})=>(0,eb.jsx)(eaQ,{...r,ref:t,present:e})})});eaJ.displayName=eaZ;var eaQ=ew.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:a,...i}=e,o=eaK(eaZ,n),[l,s]=ew.useState(r),c=ew.useRef(null),d=(0,cm.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)},[]),cg(()=>{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)(cS.div,{"data-state":ea0(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 ea0(e){return e?"open":"closed"}var ea1=e.i(91e3);let ea2={"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 ea5({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=ea2[n]??(eis.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,ez.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,ez.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)(ea4,{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)(ea9,{activeConversationId:r,onItemSelect:i,onOpenConversation:o,onOpenConversationSettings:m,onConversationDeleted:p,subagentTree:x,activeSubagentPath:v,onOpenSubagent:b}):(0,eb.jsx)(eio,{content:S,activeWorkspace:n,onItemSelect:i}),(0,eb.jsx)(eim,{onItemSelect:i,onAccountSettings:g})]})}function ea4({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 enQ();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)(eiu,{icon:ea$,label:eeN.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)(eif,{}):0===g.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:eeN.projectEmpty}):g.map(c=>(0,eb.jsx)(ea3,{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 ea3({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 erV(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 en6(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 s5(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)(eaG,{open:x,onOpenChange:v,children:[(0,eb.jsxs)("div",{className:(0,ez.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)(eaY,{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)(xS,{className:(0,ez.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)(uI,{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)(eih,{active:!0})]})]}),(0,eb.jsx)(eaJ,{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)(ea6,{icon:(0,eb.jsx)(uI,{className:"size-4"}),label:eeN.projectCanvas,onClick:()=>a?.(e.id,e.canvasId)}),(0,eb.jsx)(ea6,{icon:(0,eb.jsx)(eaT,{className:"size-4"}),label:eeN.projectKanban,onClick:()=>o?.(e.id)}),(0,eb.jsx)(ea6,{icon:(0,eb.jsx)(eeR,{className:"size-4"}),label:eeN.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)(eie,{nodes:t.subagentTree??[],depth:0,ancestors:[],activeIds:i,activeLeafId:o,onOpen:t.onOpenSubagent});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eia,{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:eeN.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:eeN.projectNewConversation})]})]})})})]})}function ea6({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 ea8="__all__",ea7={status:"all",location:ea8,sort:"recent"};function ea9({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(ea7),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===ea8||(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!==ea7.status||f.location!==ea7.location||f.sort!==ea7.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 s5(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)(eie,{nodes:i??[],depth:0,ancestors:[],activeIds:k,activeLeafId:N,onOpen:l});return(0,eb.jsxs)(ew.Fragment,{children:[(0,eb.jsx)(eia,{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)(yI,{children:[(0,eb.jsx)(yA,{asChild:!0,children:(0,eb.jsx)(eiu,{icon:tl,label:eeN.conversationNew,onClick:()=>t({item:{id:"new-agent-conversation"}})})}),(0,eb.jsx)(yB,{className:"min-w-44",children:(0,eb.jsxs)(yV,{onSelect:()=>t({item:{id:"import-claude-session"}}),children:[(0,eb.jsx)(bi,{}),(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)(ein,{filter:f,onChange:h,active:b,locations:m,locationLabel:p})]}),(0,eb.jsx)("div",{className:"space-y-0.5",children:y?(0,eb.jsx)(eif,{}):0===v.length?(0,eb.jsx)("p",{className:"px-3 py-1.5 text-[13px] text-muted-foreground/60",children:b?"没有符合筛选条件的对话":"暂无对话"}):S(v)})]})]})}function eie({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=Hj(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,ez.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,ez.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)(eie,{nodes:e.children??[],depth:t+1,ancestors:s,activeIds:r,activeLeafId:a,onOpen:i})]},e.id)})})}let eit={all:"全部",running:"运行中",idle:"空闲"};function ein({filter:e,onChange:t,active:n,locations:r,locationLabel:a}){let i=e.location===ea8?"全部":a(e.location);return(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",title:"筛选","aria-label":"筛选",className:(0,ez.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)(eeh,{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)(wt,{align:"end",sideOffset:4,className:"min-w-56",children:[(0,eb.jsx)(wa,{children:"筛选与排序"}),(0,eb.jsxs)(we,{children:[(0,eb.jsxs)(wl,{children:[(0,eb.jsx)("span",{className:"flex-1",children:"状态"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:eit[e.status]})]}),(0,eb.jsx)(ws,{children:(0,eb.jsxs)(y4,{value:e.status,onValueChange:n=>t({...e,status:n}),children:[(0,eb.jsx)(wr,{value:"all",children:"全部"}),(0,eb.jsx)(wr,{value:"running",children:"运行中"}),(0,eb.jsx)(wr,{value:"idle",children:"空闲"})]})})]}),(0,eb.jsxs)(we,{children:[(0,eb.jsxs)(wl,{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)(ws,{className:"max-h-72 overflow-y-auto",children:(0,eb.jsxs)(y4,{value:e.location,onValueChange:n=>t({...e,location:n}),children:[(0,eb.jsx)(wr,{value:ea8,children:"全部"}),r.map(e=>(0,eb.jsx)(wr,{value:e,children:(0,eb.jsx)("span",{className:"truncate",children:a(e)})},e))]})})]}),(0,eb.jsx)(wi,{}),(0,eb.jsx)(wa,{children:"排序"}),(0,eb.jsxs)(y4,{value:e.sort,onValueChange:n=>t({...e,sort:n}),children:[(0,eb.jsx)(wr,{value:"recent",children:"最近活动"}),(0,eb.jsx)(wr,{value:"name",children:"名称"})]}),n?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(wi,{}),(0,eb.jsx)(wn,{onSelect:()=>t(ea7),children:(0,eb.jsx)("span",{className:"flex-1",children:"重置筛选"})})]}):null]})]})}function eir({engine:e}){if("vantaloom"===e)return null;let t="claude-code"===e;return(0,eb.jsxs)("span",{title:t?"Claude Code":"reclaude",className:(0,ez.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 eia({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)(eir,{engine:s}),(0,eb.jsx)("span",{className:"truncate",children:e.title})]}):void 0;return(0,eb.jsx)(eii,{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 eii({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)(yV,{onSelect:()=>l(),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(yV,{onSelect:()=>c(),children:[(0,eb.jsx)(VR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(yV,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bb,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]}),g=(0,eb.jsxs)("div",{className:(0,ez.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)(eih,{active:r}),n??(0,eb.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t})]}),h?(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(wt,{align:"end",sideOffset:4,className:"min-w-44",children:[l?(0,eb.jsxs)(wn,{onSelect:()=>l(),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"打开设置界面"})]}):null,c?(0,eb.jsxs)(wn,{onSelect:()=>c(),children:[(0,eb.jsx)(VR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"分支对话"})]}):null,s?(0,eb.jsxs)(wn,{variant:"destructive",onSelect:()=>f(!0),children:[(0,eb.jsx)(bb,{}),(0,eb.jsx)("span",{className:"flex-1",children:d})]}):null]})]}):null]});return(0,eb.jsxs)(eb.Fragment,{children:[h?(0,eb.jsxs)(yI,{children:[(0,eb.jsx)(yA,{asChild:!0,children:g}),(0,eb.jsx)(yB,{className:"min-w-44",children:p})]}):g,s?(0,eb.jsx)(ua,{open:u,onOpenChange:f,children:(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:d}),(0,eb.jsxs)(uC,{children:["确认删除「",t,"」?此操作无法撤销。"]})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{variant:"destructive",onClick:()=>s(),children:"删除"})]})]})}):null]})}function eio({content:e,activeWorkspace:t,onItemSelect:n}){let r=(e?.sections??[]).flatMap(e=>e.items);return(0,eb.jsx)(wK,{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)(eic,{activeWorkspace:t,onItemSelect:n},e.id):(0,eb.jsx)(eil,{id:e.id,icon:e.icon,label:e.label,active:e.id===t,onItemSelect:n},e.id))})})}function eil({id:e,icon:t,label:n,active:r,onItemSelect:a}){return(0,eb.jsxs)("button",{type:"button",onClick:()=>a({item:{id:e}}),className:(0,ez.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)(eih,{active:!0})]})}let eis=[{id:"model",title:"模型设置",icon:(0,eb.jsx)(uT,{}),items:[{id:"preferences-model-routes",label:"模型路由",icon:(0,eb.jsx)(pe,{})},{id:"preferences-agent-config",label:"代理配置",icon:(0,eb.jsx)(uO,{})},{id:"preferences-subagent-config",label:"子代理配置",icon:(0,eb.jsx)(eaB,{})},{id:"preferences-cc-engine-config",label:"CC 引擎",icon:(0,eb.jsx)(uT,{})}]},{id:"prefs",title:"偏好设置",icon:(0,eb.jsx)(eeR,{}),items:[{id:"preferences-system-prompt",label:"系统提示词",icon:(0,eb.jsx)(eaL,{})},{id:"preferences-skills",label:"技能",icon:(0,eb.jsx)(jY,{})},{id:"preferences-memory",label:"记忆",icon:(0,eb.jsx)(ea_,{})},{id:"preferences-layout",label:"布局排版",icon:(0,eb.jsx)(eaT,{})},{id:"preferences-official-extensions",label:"官方扩展",icon:(0,eb.jsx)(UI,{})}]},{id:"system",title:"系统设置",icon:(0,eb.jsx)(G5,{}),items:[{id:"network-topology",label:"组网关系",icon:(0,eb.jsx)(eed,{})},{id:"network-settings",label:"网络设置",icon:(0,eb.jsx)(eed,{})},{id:"search-settings",label:"搜索设置",icon:(0,eb.jsx)(x_,{})},{id:"system-downloads",label:"下载",icon:(0,eb.jsx)(bi,{})},{id:"check-update",label:"检查更新",icon:(0,eb.jsx)(bv,{})},{id:"account",label:"Hub 账户",icon:(0,eb.jsx)(eC,{})},{id:"balance-usage",label:"余额用量",icon:(0,eb.jsx)(eaV,{})},{id:"feedback",label:"问题反馈",icon:(0,eb.jsx)(jD,{})}]}];function eic({activeWorkspace:e,onItemSelect:t}){return(0,eb.jsx)(eb.Fragment,{children:eis.map(n=>(0,eb.jsx)(eid,{title:n.title,icon:n.icon,items:n.items,activeWorkspace:e,onItemSelect:t},n.id))})}function eid({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)(eaG,{open:o,onOpenChange:l,children:[(0,eb.jsx)(eaY,{asChild:!0,children:(0,eb.jsxs)("button",{type:"button",className:(0,ez.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)(xS,{className:(0,ez.cn)("text-muted-foreground transition-transform",o?"rotate-0":"-rotate-90")})]})}),(0,eb.jsx)(eaJ,{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,ez.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)(eih,{active:!0})]},e.id)})})]})}let eiu=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 eif(){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 eih({active:e}){return(0,eb.jsx)("span",{className:(0,ez.cn)("size-1.5 shrink-0 rounded-full",e?"bg-primary":"border border-muted-foreground/50 bg-transparent")})}function eim({onItemSelect:e,onAccountSettings:t}){let{user:n}=ti(),r=n?.name??eek.product,a=(n?.name??"V").slice(0,1).toUpperCase();return(0,eb.jsx)("div",{className:"mt-auto pt-3",children:(0,eb.jsxs)(yY,{children:[(0,eb.jsx)(yJ,{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)(pr,{className:"size-4 shrink-0 -rotate-90 text-muted-foreground"})]})}),(0,eb.jsxs)(wt,{side:"top",align:"start",sideOffset:8,className:"w-[var(--radix-dropdown-menu-trigger-width)] min-w-60",children:[n?.email&&(0,eb.jsx)(wa,{className:"truncate font-normal text-muted-foreground",children:n.email}),(0,eb.jsxs)(wn,{onSelect:()=>e({item:{id:"preferences"}}),children:[(0,eb.jsx)(eeR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"设置"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"Ctrl,"})]}),(0,eb.jsxs)(wn,{disabled:!0,children:[(0,eb.jsx)(eaA,{}),(0,eb.jsx)("span",{className:"flex-1",children:"语言"}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"中文"})]}),(0,eb.jsxs)(wn,{disabled:!0,children:[(0,eb.jsx)(Ug,{}),(0,eb.jsx)("span",{className:"flex-1",children:"获取帮助"})]}),(0,eb.jsx)(wi,{}),(0,eb.jsxs)(wn,{onSelect:()=>{t?t():e({item:{id:"account"}})},children:[(0,eb.jsx)(Gv,{}),(0,eb.jsx)("span",{className:"flex-1",children:"Hub 账户"})]}),(0,eb.jsx)(eig,{}),n&&(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(wi,{}),(0,eb.jsx)(eix,{})]})]})]})})}let eip=["light","dark","jelly"];function eig(){let{resolvedTheme:e,setTheme:t}=(0,hV.useTheme)(),[n,r]=ew.useState(ea1.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(ea1.appearanceThemeStorageKey)??ea1.defaultAppearanceTheme;r(e),(0,ea1.applyAppearanceTheme)({theme:e})},[]);let a=n===ea1.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=eip[(eip.indexOf(a)+1)%eip.length]??"light";function o(e){r(e),window.localStorage.setItem(ea1.appearanceThemeStorageKey,e),(0,ea1.applyAppearanceTheme)({theme:e})}let l="dark"===a?eaD:eaF;return(0,eb.jsxs)(wn,{onSelect:e=>{e.preventDefault(),function(){if("jelly"===i){t("dark"),o(ea1.jellyAppearanceTheme);return}o(ea1.defaultAppearanceTheme),t(i)}()},children:[(0,eb.jsx)(l,{}),(0,eb.jsx)("span",{className:"flex-1",children:eek.theme}),(0,eb.jsx)("span",{className:"text-xs capitalize text-muted-foreground",children:a})]})}function eix(){let{logout:e}=ti();return(0,eb.jsxs)(wn,{variant:"destructive",onSelect:()=>{e().then(()=>{window.location.reload()})},children:[(0,eb.jsx)(eaR,{}),(0,eb.jsx)("span",{className:"flex-1",children:"退出登录"})]})}let eiv=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}),eib=()=>{let e=ew.default.useContext(eiv);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function eiy(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function eiw(){return eij(/^iPhone/)||eij(/^iPad/)||eij(/^Mac/)&&navigator.maxTouchPoints>1}function eij(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 eik="u">typeof window?ew.useLayoutEffect:ew.useEffect;function eiN(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let eiS="u">typeof document&&window.visualViewport;function eiC(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function eiM(e){for(eiC(e)&&(e=e.parentElement);e&&!eiC(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let eiE=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),eiP=0;function eiO(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function eiI(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=eiM(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 eiz(e){return e instanceof HTMLInputElement&&!eiE.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function eiA(...e){return ew.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let eiT=new WeakMap;function eiR(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||eiT.set(e,r)}let eiD=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function ei_(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(", ")[eiD(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[eiD(t)?5:4]):null}function eiL(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let ei$=[.32,.72,0,1],eiF="vaul-dragging";function eiB(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 eiV({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=eiB(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=eiB(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 eiH=()=>()=>{},eiU=null,eiq=ew.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:r,onRelease:a,shouldFade:i,isOpen:o,modal:l,shouldAnimate:s}=eib(),c=eiA(t,n),d=r&&r.length>0;if(!l)return null;let u=ew.default.useCallback(e=>a(e),[a]);return ew.default.createElement(dU,{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})});eiq.displayName="Drawer.Overlay";let eiW=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}=eib(),[y,w]=ew.default.useState(!1),j=eiA(a,i),k=ew.default.useRef(null),N=ew.default.useRef(null),S=ew.default.useRef(!1),C=p&&p.length>0;function M(e){k.current=null,S.current=!1,l(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:r,noBodyStyles:a}=eib(),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?eiL(document.body,{background:"black"}):eiH,eiL(t,{transformOrigin:eiD(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${ei$.join(",")})`}));let n=eiL(t,{borderRadius:"8px",overflow:"hidden",...eiD(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(dG,{"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)}})});eiW.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}=eib(),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 eiK=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[z=!1,A]=eiV({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]=eiV({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)),eiD(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),eiR(r.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(l)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),x&&s!==x.length-1&&void 0!==i&&s!==i&&s<i?eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.join(",")})`,opacity:"0"}):eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.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&&eiR(a.current,{transition:`opacity 0.5s cubic-bezier(${ei$.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=eiD(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]||eiR(r.current,{transform:eiD(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;eik(()=>{if(!t){var e,n,r;let t,a,i,l,s,c,d;return 1==++eiP&&eiw()&&(i=0,l=window.pageXOffset,s=window.pageYOffset,c=eiN((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=eiN(eiO(document,"touchstart",e=>{((a=eiM(e.target))!==document.documentElement||a!==document.body)&&(i=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),eiO(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}),eiO(document,"touchend",e=>{let t=e.target;eiz(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),eiO(document,"focus",e=>{let t=e.target;eiz(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",eiS&&(eiS.height<window.innerHeight?requestAnimationFrame(()=>{eiI(t)}):eiS.addEventListener("resize",()=>eiI(t),{once:!0}))}))},!0),eiO(window,"scroll",()=>{window.scrollTo(0,0)})),o=()=>{c(),d(),window.scrollTo(l,s)}),()=>{0==--eiP&&(null==o||o())}}},[t])}({isDisabled:!z||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(eiy()&&null===eiU&&e&&!i){eiU={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(eiy()&&null!==eiU&&!i){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,eiU),window.requestAnimationFrame(()=>{a&&o!==window.location.href?l(window.location.href):window.scrollTo(t,e)}),eiU=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:z,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?ei_(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(eiF),q.current=!1,_(!1),H.current=new Date),null==v||v(),e||A(!1),setTimeout(()=>{i&&ea(i[0])},500)}function em(){if(!Z.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=ei_(Z.current,w);eiR(Z.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`}),eiR(F.current,{transition:`opacity 0.5s cubic-bezier(${ei$.join(",")})`,opacity:"1"}),l&&t&&t>0&&z&&eiR(e,{borderRadius:"8px",overflow:"hidden",...eiD(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(${ei$.join(",")})`},!0)}return ew.default.useEffect(()=>{window.requestAnimationFrame(()=>{X.current=!0})},[]),ew.default.useEffect(()=>{var e;function t(){if(Z.current&&C&&(eiz(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(()=>(z&&(eiR(document.documentElement,{scrollBehavior:"auto"}),B.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=eiT.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[z]),ew.default.useEffect(()=>{x||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[x]),ew.default.createElement(dD,{defaultOpen:j,onOpenChange:e=>{(u||e)&&(e?R(!0):eh(!0),A(e))},open:z},ew.default.createElement(eiv.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,eiw()&&window.addEventListener("touchend",()=>q.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),K.current=eiD(w)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!D||!Z.current)return;Z.current.classList.remove(eiF),q.current=!1,_(!1),H.current=new Date;let r=ei_(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-(eiD(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-(eiD(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(eiF),q.current=!0,eiR(Z.current,{transition:"none"}),eiR(F.current,{transition:"none"}),i&&el({draggedDistance:n}),a&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;eiR(Z.current,{transform:eiD(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),eiR(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);eiR(c,{borderRadius:`${t}px`,transform:eiD(w)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=s*t;eiR(Z.current,{transform:eiD(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:u,shouldAnimate:X,handleOnly:f,isOpen:z,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;eiR(Z.current,{transform:eiD(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),eiR(Z.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(w)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&Z.current&&(W.current=setTimeout(()=>{let e=ei_(Z.current,w);eiR(Z.current,{transition:"none",transform:eiD(w)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=eiD(w)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&eiR(Z.current,{transition:`transform 0.5s cubic-bezier(${ei$.join(",")})`,transform:eiD(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))},eiG=function(e){let t=eib(),{container:n=t.container,...r}=e;return ew.default.createElement(dV,{container:n,...r})};function eiX({className:e,...t}){return(0,eb.jsx)(eiq,{"data-slot":"drawer-overlay",className:(0,ez.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 eiY({className:e,children:t,...n}){return(0,eb.jsxs)(eiG,{"data-slot":"drawer-portal",children:[(0,eb.jsx)(eiX,{}),(0,eb.jsxs)(eiW,{"data-slot":"drawer-content",className:(0,ez.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 eiZ({className:e,...t}){return(0,eb.jsx)(dQ,{"data-slot":"drawer-title",className:(0,ez.cn)("text-base leading-none font-semibold text-foreground",e),...t})}function eiJ({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)(eiQ,{onMenuClick:()=>k(!0),title:y,trailing:w}),(0,eb.jsx)(eiK,{open:j,onOpenChange:k,direction:"left",children:(0,eb.jsxs)(eiY,{className:"w-[85vw] max-w-xs",children:[(0,eb.jsx)(eiZ,{className:"sr-only",children:"导航"}),(0,eb.jsx)(ea5,{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 eiQ({onMenuClick:e,title:t,trailing:n,className:r}){return(0,eb.jsxs)("header",{className:(0,ez.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)(cl,{})}),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 ei0=(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"}]]),ei1=[{id:"canvas",label:eeN.canvas,icon:(0,eb.jsx)(uI,{})},{id:"agent",label:"智能体",icon:(0,eb.jsx)(uO,{})},{id:"settings",label:eeN.settings,icon:(0,eb.jsx)(eeR,{})}],ei2=[{id:"canvas",title:eeN.canvas,description:"节点画布工作区。",sections:[{id:"canvases",title:eeN.canvas,items:[{id:"open-recent-canvas",label:eeN.canvasRecent,icon:(0,eb.jsx)(uI,{})},{id:"new-canvas",label:eeN.canvasNew,icon:(0,eb.jsx)(lY,{})},{id:"all-canvases",label:eeN.canvasAll,icon:(0,eb.jsx)(uR,{})}]}]},{id:"agent",title:"智能体",description:"Agent 对话工作区。",sections:[{id:"conversations",title:"Agent 对话",items:[{id:"open-recent-conversation",label:eeN.conversationRecent,icon:(0,eb.jsx)(ei0,{})},{id:"new-agent-conversation",label:eeN.conversationNew,icon:(0,eb.jsx)(uO,{})}]}]},{id:"settings",title:eeN.settings,description:"系统、工作组和用量配置。",sections:[{id:"settings",items:[{id:"preferences",label:"设置",icon:(0,eb.jsx)(eeR,{})}]}]}],ei5=(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"}]]),ei4=(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"}]]),ei3=(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"}]]),ei6=(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 ei8(){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)(Bk,{variant:"outline",className:"shrink-0",children:[(0,eb.jsx)(jX,{className:"mr-1 size-3"}),"已验证"]})]}),(0,eb.jsx)(QR,{}),(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)(QR,{}),(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)(bv,{}),i?"刷新中...":"刷新状态"]}):null]}),c?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,eb.jsxs)("div",{className:"min-w-0 flex-1",children:[u?(0,eb.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,eb.jsx)(eA,{value:h,onChange:e=>m(e.target.value),maxLength:64,autoFocus:!0,placeholder:"机器名称",className:"h-8 text-sm",onKeyDown:e=>{"Enter"===e.key&&y(),"Escape"===e.key&&f(!1)}}),(0,eb.jsx)(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)(pt,{})}),(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)(fP.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)(HZ,{className:"size-3.5"})})]}),(0,eb.jsxs)("p",{className:"truncate text-xs text-muted-foreground",children:[c.platform," / ",c.arch]})]}),(0,eb.jsxs)(Bk,{variant:"online"===c.status?"default":"secondary",className:"shrink-0 gap-1",children:["online"===c.status?(0,eb.jsx)(ei3,{className:"size-3"}):(0,eb.jsx)(ei6,{className:"size-3"}),"online"===c.status?"在线":"离线"]})]}),x?(0,eb.jsx)("p",{className:"text-xs text-destructive",children:x}):null,(0,eb.jsx)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(QR,{}),(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)(ei6,{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)(ei7,{}),(0,eb.jsx)(ei9,{}),(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)(ua,{children:[(0,eb.jsx)(ui,{asChild:!0,children:(0,eb.jsxs)(eI.Button,{variant:"destructive",size:"sm",className:"shrink-0",children:[(0,eb.jsx)(ei4,{}),"解除绑定"]})}),(0,eb.jsxs)(uj,{children:[(0,eb.jsxs)(uk,{children:[(0,eb.jsx)(uS,{children:"确认解除设备绑定?"}),(0,eb.jsx)(uC,{children:"此操作将从你的 Hub 账户中移除当前设备,并退出登录。你可以随时重新登录并绑定设备。"})]}),(0,eb.jsxs)(uN,{children:[(0,eb.jsx)(uE,{children:"取消"}),(0,eb.jsx)(uM,{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)(QR,{}),(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)(eaR,{}),"退出登录"]})]})]})]})})}):null}function ei7(){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)(ei5,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"修改密码"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"更改你的 Vantaloom Hub 登录密码。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(eA,{type:"password",placeholder:"当前密码",autoComplete:"current-password",value:e,onChange:e=>t(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"新密码(至少 8 位)",autoComplete:"new-password",value:n,onChange:e=>r(e.target.value)}),(0,eb.jsx)(eA,{type:"password",placeholder:"确认新密码",autoComplete:"new-password",value:a,onChange:e=>i(e.target.value)})]}),s?(0,eb.jsx)("p",{className:"ok"===s.kind?"text-xs text-primary":"text-xs text-destructive",children:s.text}):null,(0,eb.jsx)("div",{className:"flex justify-end",children:(0,eb.jsx)(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 ei9(){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 jk({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 jj();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)(uP,{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)(QT,{className:"text-sm",children:"允许错误诊断上报"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭时应用不会进行任何遥测网络请求。"})]}),(0,eb.jsx)(bt,{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 eoe=["PageUp","PageDown"],eot=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],eon={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},eor="Slider",[eoa,eoi,eoo]=h6(eor),[eol,eos]=ch(eor,[eoo]),[eoc,eod]=eol(eor),eou=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]=cw({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=po(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)(eoc,{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)(eoa.Provider,{scope:e.__scopeSlider,children:(0,eb.jsx)(eoa.Slot,{scope:e.__scopeSlider,children:(0,eb.jsx)(v?eom:eop,{"aria-disabled":l,"data-disabled":l?"":void 0,...p,ref:t,onPointerDown:cp(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=eoe.includes(e.key)||e.shiftKey&&eot.includes(e.key),r=x.current;j(b[r]+i*(n?10:1)*t,r,{commit:!0})}}})})})})});eou.displayName=eor;var[eof,eoh]=eol(eor,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eom=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,cm.useComposedRefs)(t,e=>f(e)),m=ew.useRef(void 0),p=mt(a),g="ltr"===p,x=g&&!i||!g&&i;function v(e){let t=m.current||u.getBoundingClientRect(),a=eoC([0,t.width],x?[n,r]:[r,n]);return m.current=t,a(e-t.left)}return(0,eb.jsx)(eof,{scope:e.__scopeSlider,startEdge:x?"left":"right",endEdge:x?"right":"left",direction:x?1:-1,size:"width",children:(0,eb.jsx)(eog,{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=eon[x?"from-left":"from-right"].includes(e.key);c?.({event:e,direction:t?-1:1})}})})}),eop=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,cm.useComposedRefs)(t,d),f=ew.useRef(void 0),h=!a;function m(e){let t=f.current||d.current.getBoundingClientRect(),a=eoC([0,t.height],h?[r,n]:[n,r]);return f.current=t,a(e-t.top)}return(0,eb.jsx)(eof,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,eb.jsx)(eog,{"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=eon[h?"from-bottom":"from-top"].includes(e.key);s?.({event:e,direction:t?-1:1})}})})}),eog=ew.forwardRef((e,t)=>{let{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:l,onStepKeyDown:s,...c}=e,d=eod(eor,n);return(0,eb.jsx)(cS.span,{...c,ref:t,onKeyDown:cp(e.onKeyDown,e=>{"Home"===e.key?(o(e),e.preventDefault()):"End"===e.key?(l(e),e.preventDefault()):eoe.concat(eot).includes(e.key)&&(s(e),e.preventDefault())}),onPointerDown:cp(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),d.thumbs.has(t)?t.focus():r(e)}),onPointerMove:cp(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:cp(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),i(e))})})}),eox="SliderTrack",eov=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eod(eox,n);return(0,eb.jsx)(cS.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:t})});eov.displayName=eox;var eob="SliderRange",eoy=ew.forwardRef((e,t)=>{let{__scopeSlider:n,...r}=e,a=eod(eob,n),i=eoh(eob,n),o=ew.useRef(null),l=(0,cm.useComposedRefs)(t,o),s=a.values.length,c=a.values.map(e=>eoS(e,a.min,a.max)),d=s>1?Math.min(...c):0,u=100-Math.max(...c);return(0,eb.jsx)(cS.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:l,style:{...e.style,[i.startEdge]:d+"%",[i.endEdge]:u+"%"}})});eoy.displayName=eob;var eow="SliderThumb",eoj=ew.forwardRef((e,t)=>{let n=eoi(e.__scopeSlider),[r,a]=ew.useState(null),i=(0,cm.useComposedRefs)(t,e=>a(e)),o=ew.useMemo(()=>r?n().findIndex(e=>e.ref.current===r):-1,[n,r]);return(0,eb.jsx)(eok,{...e,ref:i,index:o})}),eok=ew.forwardRef((e,t)=>{var n,r,a,i,o;let l,s,{__scopeSlider:c,index:d,name:u,...f}=e,h=eod(eow,c),m=eoh(eow,c),[p,g]=ew.useState(null),x=(0,cm.useComposedRefs)(t,e=>g(e)),v=!p||h.form||!!p.closest("form"),b=gm(p),y=h.values[d],w=void 0===y?0:eoS(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=eoC([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)(eoa.ItemSlot,{scope:e.__scopeSlider,children:(0,eb.jsx)(cS.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:cp(e.onFocus,()=>{h.valueIndexToChangeRef.current=d})})}),v&&(0,eb.jsx)(eoN,{name:u??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:y},d)]})});eoj.displayName=eow;var eoN=ew.forwardRef(({__scopeSlider:e,value:t,...n},r)=>{let a=ew.useRef(null),i=(0,cm.useComposedRefs)(a,r),o=gA(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)(cS.input,{style:{display:"none"},...n,ref:i,defaultValue:t})});function eoS(e,t,n){return po(100/(n-t)*(e-t),[0,100])}function eoC(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 eoM(e){return Array.isArray(e)?e:"number"==typeof e?[e]:void 0}function eoE({className:e,defaultValue:t,value:n,min:r=0,max:a=100,...i}){let o=ew.useMemo(()=>eoM(n)??eoM(t)??[r,a],[t,a,r,n]);return(0,eb.jsxs)(eou,{"data-slot":"slider",defaultValue:eoM(t),value:eoM(n),min:r,max:a,className:(0,ez.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)(eov,{"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)(eoy,{"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)(eoj,{"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))]})}eoN.displayName="RadioBubbleInput";let eoP=[1e4,3e4,12e4,3e5,6e5];function eoO(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??[],loopMaxIterations:e.behavior?.loopMaxIterations??25,loopHookWait:e.behavior?.loopHookWait??"defer",loopHookWaitTimeoutSec:e.behavior?.loopHookWaitTimeoutSec??0}}}function eoI(e){return(e&&e.length?e:eoP).map(e=>Math.round(e/1e3)).join(", ")}function eoz(){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 jk({compression:e.compression,summary:e.summary,approval:e.approval,behavior:e.behavior});t(eoO(n)),h(eoI(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([jj(),x0()]);t(eoO(e)),h(eoI(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)(Gw,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"自动压缩阈值"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.compression.autoThresholdPercent,"%"]})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"压缩模型"}),(0,eb.jsx)(eoA,{models:n,value:e.compression.modelRef,onValueChange:e=>m("compression",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于执行上下文压缩的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4","data-tour":"agent-config-summary",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"对话摘要"}),(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsxs)("div",{className:"min-w-0 space-y-0.5",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"对话标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"每轮对话结束后自动更新对话标题。"})]}),(0,eb.jsx)(bt,{checked:e.summary.enableTitleSummary,onCheckedChange:e=>m("summary",{enableTitleSummary:e})})]}),(0,eb.jsx)(QR,{}),(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)(QT,{className:"text-sm",children:"轮次标题摘要"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为每轮 agent 操作生成摘要标题。"})]}),(0,eb.jsx)(bt,{checked:e.summary.enableRoundSummary,onCheckedChange:e=>m("summary",{enableRoundSummary:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(eoA,{models:n,value:e.summary.modelRef,onValueChange:e=>m("summary",{modelRef:e}),placeholder:"使用主模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用于生成对话摘要的模型。留空则使用当前对话主模型。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"自动重试与工具调用上限"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"控制本机(vantaloom)agent 单次运行的工具调用上限,以及请求失败后的自动重试。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"最大工具调用次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.maxToolCalls,onChange:e=>m("behavior",{maxToolCalls:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"单次运行累计调用工具达到该次数后强制暂停(可点击“继续”恢复)。设为 0 表示不限次(默认)。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"自动重试次数"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.retryCount,onChange:e=>m("behavior",{retryCount:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"模型/服务商请求失败时自动重试的次数(仅在尚未产出内容时重试,避免重复输出)。设为 0 表示不重试。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"重试间隔梯度(秒)"}),(0,eb.jsx)(eA,{value:f,onChange:e=>{let t=e.currentTarget.value;h(t),m("behavior",{retryDelaysMs:t.split(/[,,\s]+/).map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e)})},placeholder:"10, 30, 120, 300, 600"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"用逗号分隔每次重试的等待秒数(指数级递增),例如 10, 30, 120, 300, 600。超出列表长度时使用最后一项。留空使用内置默认梯度。"})]})]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",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)(QT,{className:"text-sm",children:"最大循环次数"}),(0,eb.jsx)(eA,{type:"number",min:1,value:e.behavior.loopMaxIterations,onChange:e=>m("behavior",{loopMaxIterations:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连续自动续跑达到该次数后强制暂停以避免无限计费(发送新消息可继续)。设为 0 表示使用内置默认值(25)。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"钩子处理"}),(0,eb.jsxs)(gG,{value:e.behavior.loopHookWait??"defer",onValueChange:e=>m("behavior",{loopHookWait:"wait"===e?"wait":"defer"}),children:[(0,eb.jsx)(xM,{children:(0,eb.jsx)(gJ,{})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"defer",children:"有钩子运行时暂停"}),(0,eb.jsx)(xI,{value:"wait",children:"等待钩子完成后继续"})]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"当存在会自动唤醒本对话的钩子(如进程退出、定时器)时:选择“暂停”则交由钩子驱动;选择“等待”则等钩子完成后再继续循环。"})]}),"wait"===e.behavior.loopHookWait?(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"等待超时(秒,0 = 直到无钩子)"}),(0,eb.jsx)(eA,{type:"number",min:0,value:e.behavior.loopHookWaitTimeoutSec??0,onChange:e=>m("behavior",{loopHookWaitTimeoutSec:Math.max(0,Number.parseInt(e.currentTarget.value,10)||0)})}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在“等待”模式下,最多等待多少秒后无论钩子是否完成都继续。设为 0 表示一直等到没有钩子在运行(仍受 30 分钟的硬性上限约束)。"})]}):null]}),(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)(QT,{className:"text-sm",children:"审批模型"}),(0,eb.jsx)(eoA,{models:n,value:e.approval.modelRef,onValueChange:e=>m("approval",{modelRef:e}),placeholder:"未配置(全部放行)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空表示 Auto 模式下不进行 AI 审批,所有非危险命令自动放行。"})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"审批提示词"}),(0,eb.jsx)(wc,{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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:s||"无法加载代理配置"})]})}function eoA({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.label},e.id))]})]})}let eoT=(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 eoR="Accordion",eoD=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[eo_,eoL,eo$]=h6(eoR),[eoF,eoB]=ch(eoR,[eo$,eaq]),eoV=eaq(),eoH=ew.default.forwardRef((e,t)=>{let{type:n,...r}=e;return(0,eb.jsx)(eo_.Provider,{scope:e.__scopeAccordion,children:"multiple"===n?(0,eb.jsx)(eoX,{...r,ref:t}):(0,eb.jsx)(eoG,{...r,ref:t})})});eoH.displayName=eoR;var[eoU,eoq]=eoF(eoR),[eoW,eoK]=eoF(eoR,{collapsible:!1}),eoG=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},collapsible:i=!1,...o}=e,[l,s]=cw({prop:n,defaultProp:r??"",onChange:a,caller:eoR});return(0,eb.jsx)(eoU,{scope:e.__scopeAccordion,value:ew.default.useMemo(()=>l?[l]:[],[l]),onItemOpen:s,onItemClose:ew.default.useCallback(()=>i&&s(""),[i,s]),children:(0,eb.jsx)(eoW,{scope:e.__scopeAccordion,collapsible:i,children:(0,eb.jsx)(eoJ,{...o,ref:t})})})}),eoX=ew.default.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:a=()=>{},...i}=e,[o,l]=cw({prop:n,defaultProp:r??[],onChange:a,caller:eoR}),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)(eoU,{scope:e.__scopeAccordion,value:o,onItemOpen:s,onItemClose:c,children:(0,eb.jsx)(eoW,{scope:e.__scopeAccordion,collapsible:!0,children:(0,eb.jsx)(eoJ,{...i,ref:t})})})}),[eoY,eoZ]=eoF(eoR),eoJ=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:a,orientation:i="vertical",...o}=e,l=ew.default.useRef(null),s=(0,cm.useComposedRefs)(l,t),c=eoL(n),d="ltr"===mt(a),u=cp(e.onKeyDown,e=>{if(!eoD.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)(eoY,{scope:n,disabled:r,direction:a,orientation:i,children:(0,eb.jsx)(eo_.Slot,{scope:n,children:(0,eb.jsx)(cS.div,{...o,"data-orientation":i,ref:s,onKeyDown:r?void 0:u})})})}),eoQ="AccordionItem",[eo0,eo1]=eoF(eoQ),eo2=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...a}=e,i=eoZ(eoQ,n),o=eoq(eoQ,n),l=eoV(n),s=cb(),c=r&&o.value.includes(r)||!1,d=i.disabled||e.disabled;return(0,eb.jsx)(eo0,{scope:n,open:c,disabled:d,triggerId:s,children:(0,eb.jsx)(eaG,{"data-orientation":i.orientation,"data-state":eo9(c),...l,...a,ref:t,disabled:d,open:c,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});eo2.displayName=eoQ;var eo5="AccordionHeader",eo4=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo5,n);return(0,eb.jsx)(cS.h3,{"data-orientation":a.orientation,"data-state":eo9(i.open),"data-disabled":i.disabled?"":void 0,...r,ref:t})});eo4.displayName=eo5;var eo3="AccordionTrigger",eo6=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo3,n),o=eoK(eo3,n),l=eoV(n);return(0,eb.jsx)(eo_.ItemSlot,{scope:n,children:(0,eb.jsx)(eaY,{"aria-disabled":i.open&&!o.collapsible||void 0,"data-orientation":a.orientation,id:i.triggerId,...l,...r,ref:t})})});eo6.displayName=eo3;var eo8="AccordionContent",eo7=ew.default.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,a=eoZ(eoR,n),i=eo1(eo8,n),o=eoV(n);return(0,eb.jsx)(eaJ,{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 eo9(e){return e?"open":"closed"}function ele({...e}){return(0,eb.jsx)(eoH,{"data-slot":"accordion",...e})}function elt({className:e,...t}){return(0,eb.jsx)(eo2,{"data-slot":"accordion-item",className:(0,ez.cn)("border-b last:border-b-0",e),...t})}function eln({className:e,children:t,...n}){return(0,eb.jsx)(eo4,{className:"flex",children:(0,eb.jsxs)(eo6,{"data-slot":"accordion-trigger",className:(0,ez.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)(xS,{className:"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"})]})})}function elr({className:e,children:t,...n}){return(0,eb.jsx)(eo7,{"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,ez.cn)("pb-4 pt-0 text-muted-foreground",e),children:t})})}eo7.displayName=eo8;let ela={vantaloom:"Vantaloom","claude-code":"Claude Code",reclaude:"reclaude"};function eli(e){return{...e.claudeCode??{}}}function elo(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 ell(){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 jS()).engines??[];r(e),t(t=>t?elo(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([jj(),jN(),x0()]),o=n.engines??[];t(elo(eli(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]??"",b=!!(n.find(e=>"reclaude"===e.engine)?.available||e?.reclaudeExecutable);async function y(){if(e&&!s){c(!0),h("");try{let n=await jk({claudeCode:e});t(eli(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 y(),disabled:s,children:[(0,eb.jsx)(Gw,{className:"size-4"}),s?"保存中":"保存"]})]}),f?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(bi,{className:"size-4"}),d?"安装中…":"下载/安装 SDK 桥"]})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground/80",children:"Claude Code / reclaude 通过内置的 Claude SDK 桥(@anthropic-ai/claude-agent-sdk)运行。 运行时通常已自带它;若显示缺失,点击上方按钮即可在后台静默下载安装,无需手填路径即可使用。"}),(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:ela[e.engine]??e.engine}),(0,eb.jsxs)("span",{className:(0,ez.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)(eoT,{}),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)(ele,{type:"multiple",className:"w-full",children:[(0,eb.jsxs)(elt,{value:"adapter",children:[(0,eb.jsx)(eln,{children:"SDK 桥(高级)"}),(0,eb.jsxs)(elr,{className:"grid gap-4 text-foreground",children:[(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Node 可执行文件"}),(0,eb.jsx)(eA,{value:e.adapterCommand??"",onChange:e=>x({adapterCommand:e.currentTarget.value}),placeholder:"node"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"运行 SDK 桥的 Node 可执行文件。留空则自动发现(或使用 node)。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"SDK 桥脚本路径 (…/adapters/claude-sdk-bridge/index.mjs)"}),(0,eb.jsx)(eA,{value:v,onChange:e=>{let t=e.currentTarget.value;x({adapterArgs:t?[t]:[]})},placeholder:"…/adapters/claude-sdk-bridge/index.mjs"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"留空则自动发现(随运行时安装,或环境变量 VANTALOOM_CC_SDK_BRIDGE)。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Git Bash 路径"}),(0,eb.jsx)(eA,{value:e.gitBashPath??"",onChange:e=>x({gitBashPath:e.currentTarget.value}),placeholder:"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"Windows 专用,留空自动发现。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"reclaude 可执行文件"}),(0,eb.jsx)(eA,{value:e.reclaudeExecutable??"",onChange:e=>x({reclaudeExecutable:e.currentTarget.value}),placeholder:"reclaude"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"reclaude 可执行文件路径;engine=reclaude 时 SDK 桥直接以它作为 claude 启动。 自动发现到 reclaude 时会自动填入,留空则自动发现。"})]})]})]}),(0,eb.jsxs)(elt,{value:"auth",children:[(0,eb.jsx)(eln,{children:"Claude Code 自定义接入"}),(0,eb.jsxs)(elr,{className:"grid gap-4 text-foreground",children:[b?(0,eb.jsxs)(Q2,{children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"已配置 reclaude,自定义接入已停用"}),(0,eb.jsx)(Q4,{children:"reclaude 已托管账号并代理网络,Claude Code 会经由 reclaude 网关访问, 无需再填写 Base URL / API Key / OAuth Token。如需使用自定义接入,请先移除 reclaude 配置。"})]}):null,(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Base URL"}),(0,eb.jsx)(eA,{autoComplete:"off",disabled:b,value:e.baseUrl??"",onChange:e=>x({baseUrl:e.currentTarget.value}),placeholder:"https://api.anthropic.com(留空使用官方)"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"claude-code 引擎用:自定义 Anthropic 兼容端点(ANTHROPIC_BASE_URL)。 留空使用官方接口。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",disabled:b,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 引擎用(ANTHROPIC_API_KEY);配合上方 Base URL 接入中转/自建网关。 留空可使用 claude /login 登录。"})]}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"OAuth Token"}),(0,eb.jsx)(eA,{type:"password",autoComplete:"off",disabled:b,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)(elt,{value:"summary",children:[(0,eb.jsx)(eln,{children:"摘要模型"}),(0,eb.jsx)(elr,{className:"grid gap-4 text-foreground",children:(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"摘要模型"}),(0,eb.jsx)(els,{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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:f||"无法加载引擎配置"})]})}function els({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.label},e.id))]})]})}let elc=[{id:"card",label:"卡片布局",description:"圆角卡片自由排布,右上角下拉菜单按需添加单窗口。",icon:(0,eb.jsx)(eaT,{})},{id:"pane",label:"分屏布局",description:"传统多窗格 + 顶部分屏预设,可拖拽分割线调整。",icon:(0,eb.jsx)(UM,{})},{id:"control-room",label:"导播台视角",description:"隐藏窗格,右侧以监视器墙并排查看主代理与各子代理。",icon:(0,eb.jsx)(eO,{})}],eld=[{id:"left",label:"Agent 在左",icon:(0,eb.jsx)(cl,{})},{id:"right",label:"Agent 在右",icon:(0,eb.jsx)(cc,{})}];function elu(){let[e,t]=ew.useState("pane"),[n,r]=ew.useState("left");return ew.useEffect(()=>{let e=Qp();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:elc.map(n=>{let r=e===n.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var e;t(e=n.id),Qg({mode:e})},className:(0,ez.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,ez.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:eld.map(e=>{let t=n===e.id;return(0,eb.jsxs)("button",{type:"button",onClick:()=>{var t;r(t=e.id),Qg({agentSide:t})},className:(0,ez.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 elf(e){return{enable:e.memory?.enable??!0,injectBudgetTokens:e.memory?.injectBudgetTokens||2e3,autoCapture:e.memory?.autoCapture??!0}}function elh(){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 jk({memory:e});t(elf(n)),c(!1)}catch(e){l(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{!async function(){try{let e=await jj();t(elf(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)(Gw,{className:"size-4"}),a?"保存中":"保存"]}):null]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用记忆系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,每次运行会按相关性把记忆正文自动注入系统提示词(类似 CLAUDE.md 自动加载)。"})]}),(0,eb.jsx)(bt,{checked:e.enable,onCheckedChange:e=>d({enable:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"记忆注入 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.injectBudgetTokens})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(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)(QT,{className:"text-sm",children:"自动捕获记忆"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"在压缩边界 / 计划检查点复用已有摘要,低频派生并去重写入对话记忆(不额外发模型请求)。"})]}),(0,eb.jsx)(bt,{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)(QY,{scopes:["global"]})]})]}):(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载记忆配置"})]})}let elm=(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"}]]),elp=[{value:"openai-v1",label:"OpenAI v1"},{value:"anthropic",label:"Anthropic"},{value:"openai-responses",label:"OpenAI Responses"}];function elg(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 elx(){let[e,t]=ew.useState([]),[n,r]=ew.useState(!0),[a,i]=ew.useState(""),o=ew.useCallback(async()=>{i("");try{let e=await x0();t(e.routes.map(elg))}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 x2({id:n.id,providerName:n.providerName,protocol:n.protocol,endpointUrl:n.endpointUrl,apiKey:n.apiKey,models:n.models,selectedModelIds:n.selectedModelIds});l(t,()=>elg(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 x5(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 x0();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):[elg(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{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)(elb,{draft:e,onDraftChange:e=>l(t,()=>e),onSave:()=>{s(t)},onDelete:()=>{c(t)}},e.id??`draft-${t}`))})]})}function elv({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)(pt,{className:"size-3.5 text-emerald-500"}):(0,eb.jsx)(lV,{className:"size-3.5"})})}function elb({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 x1({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=elp.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)(HZ,{className:"size-4"}),"编辑"]})]})}return(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-3","data-tour":"model-route-form",children:[(0,eb.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1fr)_11rem]",children:[(0,eb.jsx)(eA,{value:e.providerName,placeholder:"提供商名称",onChange:e=>c({providerName:e.currentTarget.value})}),(0,eb.jsxs)(gG,{value:e.protocol,onValueChange:e=>c({protocol:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:elp.map(e=>(0,eb.jsx)(xI,{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)(eA,{value:e.endpointUrl,placeholder:"API 端点 URL,例如 https://api.openai.com/v1",className:"pr-8",onChange:e=>c({endpointUrl:e.currentTarget.value})}),(0,eb.jsx)(elv,{value:e.endpointUrl,title:"复制端点 URL"})]}),(0,eb.jsxs)("div",{className:"relative",children:[(0,eb.jsx)(eA,{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)(elv,{value:e.apiKey,title:"复制 API Key"})]})]}),(0,eb.jsx)(QR,{}),(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)(pe,{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)(elm,{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,ez.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)(xQ,{checked:n,onCheckedChange:n=>{var r;return r=t.id,void c({selectedModelIds:!0===n?[...e.selectedModelIds,r]:e.selectedModelIds.filter(e=>e!==r)})}}),(0,eb.jsx)("span",{className:"truncate",children:t.displayName||t.id})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-1",children:[(0,eb.jsx)(eA,{type:"number",className:"h-6 w-16 px-1.5 text-center text-xs tabular-nums",value:t.contextLength||200,min:1,max:1e4,onChange:n=>{var r,a;return r=t.id,a=Number.parseInt(n.currentTarget.value,10)||0,void c({models:e.models.map(e=>e.id===r?{...e,contextLength:a>0?a:void 0}:e)})}}),(0,eb.jsx)("span",{className:"text-xs text-muted-foreground",children:"k"})]})]},t.id)})}):(0,eb.jsx)("div",{className:"rounded-md border border-dashed px-3 py-4 text-sm text-muted-foreground",children:"填写端点和密钥后会自动拉取模型。"})]}),e.error?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"模型路由错误"}),(0,eb.jsx)(Q4,{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)(bb,{className:"size-4"}),"删除"]}),(0,eb.jsx)(eI.Button,{type:"button",onClick:n,disabled:!s,children:e.saving?"保存中":"保存"})]})]})}function ely(e){return{enable:e.skills?.enable??!0,listingBudgetTokens:e.skills?.listingBudgetTokens||1500,sources:e.skills?.sources?[...e.skills.sources]:[]}}function elw(){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 jk({skills:e});t(ely(n)),r(await QV()),u(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{l(!1)}}}if(ew.useEffect(()=>{!async function(){try{let[e,n]=await Promise.all([jj(),QV()]);t(ely(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{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)(Gw,{className:"size-4"}),o?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用技能系统"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,agent 系统提示词会按相关性动态列出可用技能(仅名称+描述),并可懒加载技能正文。"})]}),(0,eb.jsx)(bt,{checked:e.enable,onCheckedChange:e=>g({enable:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"技能清单 token 预算"}),(0,eb.jsx)("span",{className:"text-sm tabular-nums text-muted-foreground",children:e.listingBudgetTokens})]}),(0,eb.jsx)(eoE,{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)(Bk,{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)(fP.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)(QT,{className:"text-xs text-muted-foreground",children:"标签"}),(0,eb.jsx)(eA,{value:f,onChange:e=>h(e.currentTarget.value),placeholder:"my-source",className:"h-9"})]}),(0,eb.jsxs)("div",{className:"grid min-w-[10rem] flex-[2] gap-1",children:[(0,eb.jsx)(QT,{className:"text-xs text-muted-foreground",children:"URL"}),(0,eb.jsx)(eA,{value:m,onChange:e=>p(e.currentTarget.value),placeholder:"https://raw.githubusercontent.com/...",className:"h-9"})]}),(0,eb.jsxs)(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)(QQ,{})]})]})}async function elj(){return elN("/api/local/subagent-config")}async function elk(e){return elN("/api/local/subagent-config",{method:"PUT",body:JSON.stringify(e)})}async function elN(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)(VT,{className:"size-4"}),tint:"text-sky-600 dark:text-sky-400",description:"只读的代码库探索/调研专家。彻底阅读、搜索代码库,返回带文件路径+行号引用的完整结论,替主 agent 节省上下文。",tools:"仅阅读(vantaloom_read)"},workflow:{title:"工作流子代理",icon:(0,eb.jsx)(uV,{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)(uB,{className:"size-4"}),tint:"text-pink-600 dark:text-pink-400",description:"专门驱动交互式终端(未来含浏览器)。执行大量终端操作并把结果回报给主 agent。",tools:"阅读 / 终端(vantaloom_read · vantaloom_shell)"}};function elM(){let[e,t]=ew.useState(null),{models:n,loading:r}=x6(),[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 elk({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 elj();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)(Gw,{className:"size-4"}),o?"保存中":"保存"]})]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{children:s})]}):null,["explore","workflow","operator"].map(a=>(0,eb.jsx)(elE,{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)(elP,{value:e.custom,models:n,modelsLoading:r,onChange:function(e){t(t=>t?{...t,custom:{...t.custom,...e}}:t),u(!0)}})]}):(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:s||"无法加载子代理配置"})]})}function elE({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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"使用模型"}),(0,eb.jsx)(elO,{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)(QT,{className:"text-sm",children:"允许上级指定模型"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"开启后,上级 agent 可在派发时动态指定该子代理使用的模型。"})]}),(0,eb.jsx)(bt,{checked:t.allowCallerModel,onCheckedChange:e=>a({allowCallerModel:e})})]}),(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{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)(wc,{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 elP({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)(uO,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"可用模型池"}),(0,eb.jsx)(be,{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 elO({models:e,value:t,onValueChange:n,placeholder:r}){return(0,eb.jsxs)(gG,{value:t||"__none__",onValueChange:e=>n("__none__"===e?"":e),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{placeholder:r})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"__none__",children:r}),e.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))]})]})}function elI(){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 jk({systemPrompt:{userPrompt:e}}),l(!1)}catch(e){c(e instanceof Error?e.message:"保存失败")}finally{i(!1)}}}return(ew.useEffect(()=>{(async()=>{try{let e=await jj();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)(Gw,{className:"size-4"}),a?"保存中":"保存"]}):null]}),s?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{children:s})]}):null,(0,eb.jsx)(wc,{value:e,onChange:e=>{t(e.currentTarget.value),l(!0)},placeholder:"例如:始终用中文回复;提交前先跑测试;优先复用现有代码……",rows:8,className:"resize-y text-sm"})]})}function elz({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)(eoz,{}):"subagent-config"===e?(0,eb.jsx)(elM,{}):"cc-engine-config"===e?(0,eb.jsx)(ell,{}):"system-prompt"===e?(0,eb.jsx)(elI,{}):"skills"===e?(0,eb.jsx)(elw,{}):"memory"===e?(0,eb.jsx)(elh,{}):"layout"===e?(0,eb.jsx)(elu,{}):(0,eb.jsx)(elx,{})})})}let elA=(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 elT(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 elR(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 elD(){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(elT(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 elR(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(elT(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)(bv,{className:(0,ez.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)(elA,{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 el_=(0,ek.default)("gift",[["rect",{x:"3",y:"8",width:"18",height:"4",rx:"1",key:"bkv52"}],["path",{d:"M12 8v13",key:"1c76mn"}],["path",{d:"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7",key:"6wjy6b"}],["path",{d:"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",key:"1ihvrl"}]]),elL=(0,ek.default)("trending-up",[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]]),el$=[{value:"24h",label:"近 24 小时"},{value:"7d",label:"近 7 天"},{value:"30d",label:"近 30 天"}];function elF(){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)(eaV,{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)(bv,{}),"刷新"]})]}),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)(el_,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"兑换码充值"})]}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"输入兑换码,金额将立即计入账户余额。"}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(eA,{value:x,onChange:e=>v(e.target.value),placeholder:"请输入兑换码",className:"font-mono",onKeyDown:e=>{"Enter"===e.key&&C()}}),(0,eb.jsxs)(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,ez.cn)("text-xs","ok"===w.kind?"text-primary":"text-destructive"),children:w.text}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsx)(elL,{className:"size-4 text-muted-foreground"}),(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"用量趋势"})]}),(0,eb.jsxs)("div",{className:"flex items-center gap-2",children:[(0,eb.jsxs)(gG,{value:c,onValueChange:d,children:[(0,eb.jsx)(xM,{size:"sm",className:"w-44",children:(0,eb.jsx)(gJ,{placeholder:"全部模型"})}),(0,eb.jsxs)(xO,{children:[(0,eb.jsx)(xI,{value:"all",children:"全部模型"}),u.map(e=>(0,eb.jsx)(xI,{value:e.id,children:e.displayName||e.id},e.id))]})]}),(0,eb.jsxs)(gG,{value:l,onValueChange:s,children:[(0,eb.jsx)(xM,{size:"sm",className:"w-32",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el$.map(e=>(0,eb.jsx)(xI,{value:e.value,children:e.label},e.value))})]})]})]}),(0,eb.jsxs)("div",{className:"grid grid-cols-3 gap-3",children:[(0,eb.jsx)(elB,{label:"花费",value:e2(N.costMicro,4)}),(0,eb.jsx)(elB,{label:"请求数",value:N.requests.toLocaleString("zh-CN")}),(0,eb.jsx)(elB,{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)(CO,{width:"100%",height:"100%",children:(0,eb.jsxs)(Zx,{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)(ZJ,{strokeDasharray:"3 3",stroke:"var(--color-border)",vertical:!1}),(0,eb.jsx)(Ja,{dataKey:"label",tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1}),(0,eb.jsx)(Jp,{tick:{fontSize:11},stroke:"var(--color-muted-foreground)",tickLine:!1,axisLine:!1,width:48,tickFormatter:e=>`$${e.toFixed(2)}`}),(0,eb.jsx)(B3,{contentStyle:{borderRadius:8,border:"1px solid var(--color-border)",background:"var(--color-popover)",fontSize:12},formatter:e=>[`$${Number(e).toFixed(4)}`,"花费"]}),(0,eb.jsx)(Zu,{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)(eaV,{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 elB({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 elV=(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"}]]),elH=[{value:"bug",label:"功能异常"},{value:"feature",label:"功能建议"},{value:"billing",label:"计费与余额"},{value:"other",label:"其他"}],elU=Object.fromEntries(elH.map(e=>[e.value,e.label])),elq={pending:{label:"待审批",variant:"secondary"},preparing:{label:"准备完成",variant:"outline"},done:{label:"已完成",variant:"default"},noplan:{label:"暂时无计划",variant:"secondary"}};function elW(){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)(eA,{value:t,onChange:e=>n(e.target.value),maxLength:120,placeholder:"简要描述问题"})]}),(0,eb.jsxs)("div",{className:"grid gap-1.5",children:[(0,eb.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:"类型"}),(0,eb.jsxs)(gG,{value:r,onValueChange:a,children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:elH.map(e=>(0,eb.jsx)(xI,{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)(wc,{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,ez.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)(elV,{}),"添加图片"]}),(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)(fP.XIcon,{className:"size-3"})})]},e.id))}):null]}),u?(0,eb.jsx)("p",{className:(0,ez.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)(er9,{}),"提交反馈"]})})]}),(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=elq[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)(Bk,{variant:"outline",children:elU[e.type]??e.type}),(0,eb.jsx)(Bk,{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)(elG,{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)(dD,{open:null!==y,onOpenChange:e=>{e||w(null)},children:(0,eb.jsx)(fI,{className:"max-w-3xl",children:y?(0,eb.jsx)(elX,{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)(jD,{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 elK(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 elG({issueId:e,imageId:t}){let n=elK(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 elX({issueId:e,imageId:t,className:n}){let r=elK(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 elY={totals:{machines:0,online:0,runtime:0,tokens:0},machines:[],topology:{nodes:[],links:[]},pathTotals:{direct:0,p2p:0,relay:0,broken:0},latency:[],candidates:[]},elZ={metrics:{online:0,health:0,latency:"local",events:0},machines:[],trend:[],networkLinks:[],events:[],serviceHealth:[]};function elJ(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 elQ(){let e=elJ("/api/local/machines/fleet",elY),{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)(enb,{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 el0=[{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 el1(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 el2(){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 jk({network:e});t(el1(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 jj();t(el1(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载网络设置"})]});let f=el0.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)(Gw,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用 uTLS 指纹伪装"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"使用 Chrome 的 TLS ClientHello 指纹(JA3/JA4),绕过基于指纹的连接重置。建议保持开启。"})]}),(0,eb.jsx)(bt,{checked:e.enableUTLS,onCheckedChange:e=>d({enableUTLS:e})})]}),e.enableUTLS?null:(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(hB,{}),(0,eb.jsx)(Q5,{children:"已关闭 uTLS 指纹伪装"}),(0,eb.jsx)(Q4,{children:"关闭后部分 Cloudflare 渠道可能连接被重置(TCP reset / 握手失败)。仅在 uTLS 反而导致连接异常时关闭。"})]}),(0,eb.jsx)(QR,{}),(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)(QT,{className:"text-sm",children:"启用浏览器请求头"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为出站请求注入 Chrome 的 User-Agent / sec-ch-ua 等请求头,进一步降低被识别为机器人的概率。"})]}),(0,eb.jsx)(bt,{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)(QT,{className:"text-sm",children:"代理模式"}),(0,eb.jsxs)(gG,{value:e.proxyMode,onValueChange:e=>d({proxyMode:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el0.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"自定义代理地址"}),(0,eb.jsx)(eA,{value:e.customProxyURL??"",onChange:e=>d({customProxyURL:e.currentTarget.value}),placeholder:"http://127.0.0.1:7890",spellCheck:!1,autoComplete:"off"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"仅支持 http / https 代理。若填写包含账号密码(user:pass),日志中会被脱敏处理。"}),h&&h!==e.customProxyURL?(0,eb.jsxs)("p",{className:"text-xs text-muted-foreground",children:["脱敏预览:",h]}):null]})]}):null]}),(0,eb.jsxs)("section",{className:"grid gap-3 rounded-lg border bg-card p-4",children:[(0,eb.jsx)("h4",{className:"text-sm font-semibold",children:"重试与降级"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"请求因网络抖动(连接重置 / 网关 5xx)失败时的自动恢复策略。"}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsxs)("div",{className:"flex items-center justify-between",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"重试次数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.retryCount," 次"]})]}),(0,eb.jsx)(eoE,{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)(QR,{}),(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)(QT,{className:"text-sm",children:"启用降级回退"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"连接失败时自动逐级降级:uTLS → 直连 → 标准 TLS,绕开坏代理 / 回环 / 指纹被重置等问题。关闭后将严格按当前模式连接(便于排查真实错误)。"})]}),(0,eb.jsx)(bt,{checked:e.enableFallback,onCheckedChange:e=>d({enableFallback:e})})]})]})]})}function el5(){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)(el2,{})})})]})}let el4=[{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。"}],el3=[{value:"bing",label:"Bing(默认,较稳定)"},{value:"duckduckgo",label:"DuckDuckGo"}],el6=[{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 el8(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 el7(){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 jk({search:e});t(el8(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 jj();t(el8(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)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"读取失败"}),(0,eb.jsx)(Q4,{children:o||"无法加载搜索设置"})]});let f=el4.find(t=>t.value===(e.provider??"")),h=el6.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)(Gw,{className:"size-4"}),a?"保存中":"保存"]})]}),o?(0,eb.jsxs)(Q2,{variant:"destructive",children:[(0,eb.jsx)(eE,{}),(0,eb.jsx)(Q5,{children:"错误"}),(0,eb.jsx)(Q4,{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)(QT,{className:"text-sm",children:"启用联网搜索工具"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"为智能体提供 联网搜索 + 网页阅读 能力(vantaloom_search),无需启动浏览器。即使不配置任何 Key,也能用下方的搜索引擎兜底 + Jina 阅读开箱即用。"})]}),(0,eb.jsx)(bt,{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)(QT,{className:"text-sm",children:"搜索渠道"}),(0,eb.jsxs)(gG,{value:e.provider?e.provider:"none",onValueChange:e=>d({provider:"none"===e?"":e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el4.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"API Key"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"自定义接口地址(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"启用搜索引擎兜底"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"关闭后,未配置 AI 渠道时将无法搜索。建议保持开启。"})]}),(0,eb.jsx)(bt,{checked:e.enableEngineFallback,onCheckedChange:e=>d({enableEngineFallback:e})})]}),e.enableEngineFallback?(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"兜底搜索引擎"}),(0,eb.jsxs)(gG,{value:e.engine??"bing",onValueChange:e=>d({engine:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el3.map(e=>(0,eb.jsx)(xI,{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)(QT,{className:"text-sm",children:"默认阅读引擎"}),(0,eb.jsxs)(gG,{value:e.defaultReader??"auto",onValueChange:e=>d({defaultReader:e}),children:[(0,eb.jsx)(xM,{className:"w-full",children:(0,eb.jsx)(gJ,{})}),(0,eb.jsx)(xO,{children:el6.map(e=>(0,eb.jsx)(xI,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"Jina Reader API Key(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"Firecrawl API Key"}),(0,eb.jsx)(eA,{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)(QR,{}),(0,eb.jsxs)("div",{className:"grid gap-2",children:[(0,eb.jsx)(QT,{className:"text-sm",children:"GitHub Token(可选)"}),(0,eb.jsx)(eA,{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)(QT,{className:"text-sm",children:"默认返回结果数"}),(0,eb.jsxs)("span",{className:"text-sm tabular-nums text-muted-foreground",children:[e.maxResults||8," 条"]})]}),(0,eb.jsx)(eoE,{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 el9(){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)(el7,{})})})]})}let ese="local",est=[{id:"cloakbrowser",label:"CloakBrowser 默认",description:"源码级反爬的真 Chromium,最适合 agent 在真实站点稳定工作。"},{id:"chrome-for-testing",label:"Chrome for Testing",description:"Google 官方纯净自动化 Chromium,更轻量、自动化友好。"}];function esn(){let{machines:e}=xD(),t=ew.useMemo(()=>{let t=[],n=!1;for(let r of e)if(r.isLocal)n=!0,t.unshift({id:ese,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:ese,name:"本机",online:!0,reachable:!0,isLocal:!0}),t},[e]),[n,r]=ew.useState(ese);return ew.useEffect(()=>{t.some(e=>e.id===n)||r(t[0]?.id??ese)},[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)(mN,{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)(mA,{className:"h-8 w-max min-w-full",children:t.map(e=>(0,eb.jsxs)(mT,{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,ez.cn)("size-1.5 rounded-full",e.online?"bg-emerald-500":"bg-muted-foreground/40"),"aria-label":e.online?"在线":"离线"})]},e.id))})}),(0,eb.jsx)(esr,{machine:t.find(e=>e.id===n)??t[0]},n)]})]})})})}function esr({machine:e}){var t;let n=(t=e?.id??ese)===ese?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 G3(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?esa: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)(VH,{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)(bv,{className:"size-3.5"}),"重试"]})})]}):p?(0,eb.jsx)(esi,{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 esa={id:"browser",name:"Vantaloom 浏览器",installed:!1,enabled:!1,running:!1,variant:"cloakbrowser",version:"",available:["cloakbrowser","chrome-for-testing"]};function esi({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 Xe(e,t),n();let r=Date.now()+3e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,1500));try{let n=(await G3(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)(Bk,{variant:"default",children:"运行中"}):p?(0,eb.jsx)(Bk,{variant:"secondary",className:"bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"启动中"}):(0,eb.jsx)(Bk,{variant:"secondary",className:"bg-muted text-muted-foreground",children:"已停止"}):(0,eb.jsx)(Bk,{variant:"outline",children:"未安装"}),v=est.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)(UI,{})}),(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,ez.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,est.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)(VH,{className:"size-3.5"}):t.running?(0,eb.jsx)(jZ,{className:"size-3.5"}):(0,eb.jsx)(VD,{className:"size-3.5"}),g?"停止中…":p?"启动中…":t.running?"停止浏览器":"启动浏览器"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"outline",disabled:null!==i,onClick:()=>f("update",()=>G7(e),!0),children:["update"===i?(0,eb.jsx)(VH,{className:"size-3.5"}):(0,eb.jsx)(bv,{className:"size-3.5"}),"update"===i?"正在更新…":"更新"]}),(0,eb.jsxs)(eI.Button,{size:"sm",variant:"destructive",disabled:null!==i,onClick:()=>f("uninstall",()=>G9(e)),children:["uninstall"===i?(0,eb.jsx)(VH,{className:"size-3.5"}):(0,eb.jsx)(bb,{className:"size-3.5"}),"卸载"]})]}):(0,eb.jsxs)(eI.Button,{size:"sm",disabled:null!==i,onClick:()=>f("install",()=>G8(e,c),!0),children:[u?(0,eb.jsx)(VH,{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)(bt,{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 eso=(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 esl(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 ess({status:e}){switch(e){case"active":return(0,eb.jsx)(Bk,{variant:"default",children:"下载中"});case"complete":return(0,eb.jsx)(Bk,{className:"border-transparent bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",children:"已完成"});case"error":return(0,eb.jsx)(Bk,{variant:"destructive",children:"失败"});case"paused":return(0,eb.jsx)(Bk,{variant:"secondary",children:"已暂停"});case"canceled":return(0,eb.jsx)(Bk,{variant:"outline",children:"已取消"});default:return(0,eb.jsx)(Bk,{variant:"outline",children:"等待中"})}}let esc=["complete","error","canceled"];function esd({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,ez.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,ez.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 esu({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?"":`${esl(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=esc.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)(ess,{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)(VH,{className:"size-3.5"}),f&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"暂停","aria-label":"暂停",onClick:()=>l(()=>m8(e.id,"pause")),children:(0,eb.jsx)(eso,{className:"size-3.5"})}),h&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"继续","aria-label":"继续",onClick:()=>l(()=>m8(e.id,"resume")),children:(0,eb.jsx)(VD,{className:"size-3.5"})}),m&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"重试","aria-label":"重试",onClick:()=>l(()=>m8(e.id,"retry")),children:(0,eb.jsx)(bv,{className:"size-3.5"})}),p&&(0,eb.jsx)(eI.Button,{size:"icon",variant:"ghost",className:"size-7",disabled:i,title:"取消","aria-label":"取消",onClick:()=>l(()=>m8(e.id,"cancel")),children:(0,eb.jsx)(fP.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(()=>m8(e.id,"remove")),children:(0,eb.jsx)(bb,{className:"size-3.5"})})]})]}),(0,eb.jsx)(esd,{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=esl(n),r<0?a:`${a} / ${esl(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 esf(){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 m4({signal:a.signal});if(n)return;t(e.downloads),r("ready")}catch(e){if(n||a.signal.aborted)return;if(e instanceof m5)return void r("unavailable")}try{await m3(i,{signal:a.signal}),n||l()}catch(e){if(n||a.signal.aborted)return;if(e instanceof m5)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)(VH,{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)(bv,{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)(esu,{download:e},e.id))})}function esh({label:e,description:t,value:n,min:r,max:a,onChange:i,disabled:o}){return(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:e}),t&&(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:t}),(0,eb.jsx)(eA,{type:"number",inputMode:"numeric",min:r,max:a,value:Number.isFinite(n)?n:0,disabled:o,onChange:e=>{let t=Number(e.target.value);if(Number.isNaN(t))return;let n=t;void 0!==r&&(n=Math.max(r,n)),void 0!==a&&(n=Math.min(a,n)),i(n)},className:"max-w-[12rem]"})]})}function esm(){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 m7({signal:n.signal});if(e)return;t(a),r("ready")}catch(t){if(e||n.signal.aborted)return;r(t instanceof m5?"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 m9(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)(VH,{className:"size-4"}),"正在加载下载设置…"]}):"unavailable"!==n&&"error"!==n&&e?(0,eb.jsxs)("section",{className:"grid gap-4 rounded-lg border bg-card p-4",children:[(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"下载目录"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载文件的默认保存位置。"}),(0,eb.jsx)(eA,{type:"text",value:e.downloadDir,disabled:a,placeholder:"例如 D:\\\\Downloads",onChange:e=>h("downloadDir",e.target.value)})]}),(0,eb.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,eb.jsx)(esh,{label:"最大同时下载数",description:"同时进行的任务数量上限。",value:e.maxConcurrentDownloads,min:1,max:32,disabled:a,onChange:e=>h("maxConcurrentDownloads",e)}),(0,eb.jsx)(esh,{label:"单任务最大连接数",description:"单个任务的并发分段连接数(1–16)。",value:e.maxConnectionsPerTask,min:1,max:16,disabled:a,onChange:e=>h("maxConnectionsPerTask",e)}),(0,eb.jsx)(esh,{label:"失败重试次数",description:"任务失败后的自动重试上限。",value:e.maxRetries,min:0,max:20,disabled:a,onChange:e=>h("maxRetries",e)})]}),(0,eb.jsxs)("label",{className:"grid gap-1.5",children:[(0,eb.jsx)("span",{className:"text-xs font-medium text-foreground",children:"代理"}),(0,eb.jsx)("span",{className:"text-[11px] text-muted-foreground",children:"下载使用的代理地址,留空则不使用代理。"}),(0,eb.jsx)(eA,{type:"text",value:e.proxy,disabled:a,placeholder:"例如 http://127.0.0.1:7890(留空=不使用)",onChange:e=>h("proxy",e.target.value)})]}),(0,eb.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-lg border bg-background p-3",children:[(0,eb.jsxs)("div",{className:"min-w-0",children:[(0,eb.jsx)("p",{className:"text-sm font-medium text-foreground",children:"校验文件哈希"}),(0,eb.jsx)("p",{className:"text-xs text-muted-foreground",children:"下载完成后校验文件哈希以确保完整性。"})]}),(0,eb.jsx)(bt,{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)(VH,{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)(bv,{className:"size-3.5"}),"重试"]})})]})}function esp(){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)(bi,{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)(esf,{})]}),(0,eb.jsxs)("div",{className:"grid gap-3",children:[(0,eb.jsx)("h4",{className:"text-sm font-medium text-foreground",children:"全局设置"}),(0,eb.jsx)(esm,{})]})]})})})}let esg=["light","dark","jelly"],esx={light:{label:"Light",icon:eaF,className:"text-sidebar-foreground/60"},dark:{label:"Dark",icon:eaD,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 esv(){let{resolvedTheme:e,setTheme:t}=(0,hV.useTheme)(),[n,r]=ew.useState(ea1.defaultAppearanceTheme);ew.useEffect(()=>{let e=window.localStorage.getItem(ea1.appearanceThemeStorageKey)??ea1.defaultAppearanceTheme;r(e),(0,ea1.applyAppearanceTheme)({theme:e})},[]);let a=n===ea1.jellyAppearanceTheme?"jelly":"dark"===e?"dark":"light",i=esg.indexOf(a),o=esg[(i+1)%esg.length]??"light",{icon:l,label:s,className:c}=esx[a];function d(e){r(e),window.localStorage.setItem(ea1.appearanceThemeStorageKey,e),(0,ea1.applyAppearanceTheme)({theme:e})}return(0,eb.jsx)(eI.Button,{type:"button",variant:"ghost",size:"icon-sm",className:(0,ez.cn)("size-10 hover:bg-muted hover:text-sidebar-foreground",c),"aria-label":`${eek.theme}: ${s}`,title:`${eek.theme}: ${s}`,onClick:function(){if("jelly"===o){t("dark"),d(ea1.jellyAppearanceTheme);return}d(ea1.defaultAppearanceTheme),t(o)},children:(0,eb.jsx)(l,{})})}let esb=(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 esy=[{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}],esw=[{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}],esj=[{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"}],esk=[["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","失败"]],esN={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,ez.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?eew({image:r,opacity:.74,blur:"8px"}):void 0,children:(0,eb.jsx)(eeY,{label:e,value:t,minSize:n})})}function esC(e,t,n=""){return{title:e,dataSource:t,refreshRate:"10s",note:n}}let esM={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]}]},esE=[{id:"metric-runs",title:"运行中",description:"当前正在执行的运行数量。",icon:(0,eb.jsx)(uV,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("运行中","运行队列"),render:e=>esS(e.title,"07",44,eex)},{id:"metric-queued",title:"排队",description:"等待调度的任务数量。",icon:(0,eb.jsx)(uP,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("排队","调度器"),render:e=>esS(e.title,"04",44,eev)},{id:"metric-blocked",title:"待确认",description:"等待人工确认的任务数量。",icon:(0,eb.jsx)(en9,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("待确认","确认队列"),render:e=>esS(e.title,"03",44,eeb)},{id:"metric-workers",title:"Worker",description:"当前可调度 worker 数量。",icon:(0,eb.jsx)(G5,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("Worker","Agent worker"),render:e=>esS(e.title,"14",44,eey)},{id:"queue",title:"任务队列",description:"运行队列 Roadmap。",icon:(0,eb.jsx)(uL,{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)(eej,{title:e.title}),(0,eb.jsx)(enk,{items:esy})]})},{id:"workers",title:"Agent worker",description:"各 worker 的负载和容量。",icon:(0,eb.jsx)(G5,{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)(eej,{title:e.title}),(0,eb.jsx)(enS,{workers:esw})]})},{id:"log",title:"最近执行",description:"最近执行记录 Roadmap。",icon:(0,eb.jsx)(ee0,{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)(eej,{title:e.title}),(0,eb.jsx)(enj,{items:esk})]})},{id:"confirmations",title:"待确认",description:"等待人工确认的事项。",icon:(0,eb.jsx)(etW,{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)(eej,{title:e.title}),(0,eb.jsx)(enw,{items:esj})]})}],esP=[{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 esO(e=esM){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,eex)},{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,eev)},{id:"metric-latency",title:"平均延迟",description:"机器连接平均延迟。",icon:(0,eb.jsx)(ee3,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("平均延迟","网络遥测"),render:t=>esS(t.title,e.metrics.latency,44,eeb)},{id:"metric-events",title:"事件",description:"最近事件数量。",icon:(0,eb.jsx)(etW,{className:"size-4"}),defaultSize:{w:3,h:2},defaultConfig:esC("事件","事件流"),render:t=>esS(t.title,String(e.metrics.events),44,eey)},{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:eew({image:"/themes/jelly/card1.png",opacity:.88,blur:"10px"}),children:[(0,eb.jsx)(eej,{title:t.title}),(0,eb.jsx)(enP,{machines:e.machines})]})},{id:"trend",title:"资源趋势",description:"CPU、内存和网络趋势。",icon:(0,eb.jsx)(esb,{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)(eej,{title:t.title}),(0,eb.jsx)(enT,{config:esN,data:e.trend})]})},{id:"network",title:"网络连接",description:"机器之间连接状态。",icon:(0,eb.jsx)(eed,{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)(eej,{title:t.title}),(0,eb.jsx)(enA,{links:e.networkLinks})]})},{id:"events",title:"事件流",description:"最近遥测事件。",icon:(0,eb.jsx)(etW,{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)(eej,{title:t.title}),(0,eb.jsx)(enE,{events:e.events})]})},{id:"services",title:"服务健康",description:"服务 30 分钟粒度健康条。",icon:(0,eb.jsx)(G5,{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)(eej,{title:t.title}),(0,eb.jsx)(enR,{services:e.serviceHealth})]})}]}esO();let esI=[{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}],esz={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 esA({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){return(0,eb.jsx)(eeW,{boardId:"runtime-operations",definitions:esE,initialLayouts:esP,clipboardItems:e,actionLabel:"运行页面卡片操作",paletteGroupTitle:"运行页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esT({clipboardItems:e=[],onClipboardItemsChange:t,onOverlayOpenChange:n}){let r=elJ("/api/local/machines/telemetry",elZ),a=ew.useMemo(()=>esO(r),[r]);return(0,eb.jsx)(eeW,{boardId:"telemetry",definitions:a,initialLayouts:esI,clipboardItems:e,actionLabel:"遥测页面卡片操作",paletteGroupTitle:"遥测页面卡片",onClipboardItemsChange:t,onOverlayOpenChange:n})}function esR({className:e,title:t="Vantaloom"}){return(0,eb.jsxs)("svg",{viewBox:"180 350 1130 260",fill:"currentColor",role:"img","aria-label":t,className:(0,ez.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 esD(e){return()=>new Promise(t=>{e(),window.setTimeout(t,60)})}function es_(e){return"u"<typeof document?null:document.querySelector(e)}function esL(){return null!=es_('[role="menu"]')}function es$(){return null!=es_('[data-tour="init-wizard"]')}function esF(){let e=es_('[data-tour="init-wizard"] [aria-current="step"]'),t=e?.getAttribute("aria-label")?.match(/第\s*(\d+)/);return t?Number(t[1]):0}!function(e=esz){esC("机器","机器组"),esC("在线","机器心跳"),esC("Runtime","Agent runtime"),esC("Token","机器注册"),esC("机器组","机器组"),esC("拓扑图","网络拓扑"),esC("直连","网络拓扑"),esC("P2P","网络拓扑"),esC("Relay","网络拓扑"),esC("中断","网络拓扑"),esC("延迟","网络遥测"),esC("候选路径","网络候选路径")}(),esC("日志与审计","审计事件"),esC("筛选","审计筛选"),esC("拒绝事件","审计事件"),esC("事件趋势","审计事件");var esB=e.i(64990);function esV(){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 sA(y,w);t||(p(r),e=window.setTimeout(n,!function e(t){return t.some(t=>t.running||e(t.children??[]))}(r)?6e3:2e3))};return n(),()=>{t=!0,e&&window.clearTimeout(e)}},[y,w,a]);let[j,k]=ew.useState(),[N,S]=ew.useState(!1),[C,M]=ew.useState(!1),[E,P]=ew.useState([]),[O,I]=ew.useState([]),[z,A]=ew.useState({}),[T,R]=ew.useState(),[D,_]=ew.useState(uY),[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,_(uY),$([]),i("new-canvas");try{let e=await eer({title:"新画布",nodes:uY,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 eei(e,t);let n=await een(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 en0(e)).canvasId}catch{}if(!n)try{n=(await eer({title:"工程画布",nodes:uY,edges:[]})).canvas.id,await en2(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 en8(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(()=>{eea(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,esB.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:esD(()=>e.goHome()),target:()=>es_('[role="menu"]')??es_('[data-tour="account-button"]'),gate:esL,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:esD(()=>e.select("preferences-model-routes")),target:()=>es_('[data-tour="model-route-form"]')??es_('[data-tour="add-model-route"]'),gate:()=>null!=es_('[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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>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:esD(()=>e.goHome()),target:'[data-tour="home-new-conversation"]',gate:es$,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:()=>!es$()||esF()>=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:()=>!es$()||esF()>=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:()=>!es$()||esF()>=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:()=>!es$(),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!=es_('[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!=es_('[placeholder="搜索组件..."]')||null!=es_('[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!=es_('[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!=es_('[placeholder="搜索组件..."]')||null!=es_('[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!=es_('[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)(eiJ,{navItems:ei1,contents:ei2,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 对话":eek.product,trailing:eg&&s?(0,eb.jsx)(jL,{view:g,onViewChange:x,paneCount:v}):(0,eb.jsx)(esv,{})}):(0,eb.jsxs)(eb.Fragment,{children:[(0,eb.jsx)("div",{className:(0,ez.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)(ea5,{navItems:ei1,contents:ei2,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,ez.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,ez.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)(esA,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"telemetry"===a?(0,eb.jsx)(esT,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):"preferences-model-routes"===a?(0,eb.jsx)(elz,{section:"model-routes"}):"preferences-agent-config"===a?(0,eb.jsx)(elz,{section:"agent-config"}):"preferences-subagent-config"===a?(0,eb.jsx)(elz,{section:"subagent-config"}):"preferences-cc-engine-config"===a?(0,eb.jsx)(elz,{section:"cc-engine-config"}):"preferences-system-prompt"===a?(0,eb.jsx)(elz,{section:"system-prompt"}):"preferences-skills"===a?(0,eb.jsx)(elz,{section:"skills"}):"preferences-memory"===a?(0,eb.jsx)(elz,{section:"memory"}):"preferences-layout"===a?(0,eb.jsx)(elz,{section:"layout"}):"preferences-official-extensions"===a?(0,eb.jsx)(esn,{}):"network-topology"===a?(0,eb.jsx)(elQ,{}):"network-settings"===a?(0,eb.jsx)(el5,{}):"search-settings"===a?(0,eb.jsx)(el9,{}):"system-downloads"===a?(0,eb.jsx)(esp,{}):"preferences"===a?(0,eb.jsx)(elz,{}):"check-update"===a?(0,eb.jsx)(elD,{}):"balance-usage"===a?(0,eb.jsx)(elF,{}):"feedback"===a?(0,eb.jsx)(elW,{}):"account"===a?(0,eb.jsx)(ei8,{}):e||"new-canvas"!==a?e||"all-canvases"!==a?"new-project"===a?(0,eb.jsx)(erl,{onCreated:e=>{er(e)},onCancel:()=>i("home")}):"project-overview"===a&&W?(0,eb.jsx)(eay,{projectId:W,onOpenSettings:ei}):"project-settings"===a&&W?(0,eb.jsx)(erb,{projectId:W}):"kanban"===a&&W?(0,eb.jsx)(eah,{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)(QP,{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)(esU,{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)(esH,{onNewConversation:Q,onStartTour:ef}):(0,eb.jsx)(enq,{clipboardItems:E,onClipboardItemsChange:P,onOverlayOpenChange:M}):(0,eb.jsx)(enJ,{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,ez.cn)("absolute inset-0 z-30",e&&"pt-[calc(3rem+env(safe-area-inset-top))]"),children:(0,eb.jsx)(Q7,{conversationId:j.id,ownerMachineId:j.owner,open:!0,onOpenChange:e=>{e||k(void 0)},onEnterConversation:(e,t)=>{J(e,t)}})}):null,(0,eb.jsx)(eee,{open:N,onOpenChange:S,onEnterConversation:(e,t)=>{J(e,t)}}),(0,eb.jsx)(eaz,{hidden:!!j||(eg?o:C),items:E,trashItems:O,draggingId:T,onDraggingChange:R,onItemsChange:P,onTrashItemsChange:I,onTrashClipboardItemsChange:A,trashClipboardItems:z})]})]})}function esH({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)(esR,{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 esU({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)(ea9,{activeConversationId:e,onItemSelect:t,onOpenConversation:n,onOpenConversationSettings:r,onConversationDeleted:a})})}function esq(){let{ready:e,user:t,logout:n}=ti();return e?t?(0,eb.jsx)(esV,{}):(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 esW(){return(0,eb.jsx)(ta,{children:(0,eb.jsx)(esq,{})})}e.s(["default",()=>esW],66204)}]);
|