tide-commander 1.185.0 → 1.187.0
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/CHANGELOG.md +11 -0
- package/dist/assets/{AudioPlayer-TfKZdQdw.js → AudioPlayer--6zn2PLj.js} +1 -1
- package/dist/assets/{BossLogsModal-CgKG5C3w.js → BossLogsModal-DuEDtBsn.js} +1 -1
- package/dist/assets/{BossSpawnModal-BnaEFEkJ.js → BossSpawnModal-C42bg47S.js} +1 -1
- package/dist/assets/{ControlsModal-AvbuOJ9Y.js → ControlsModal-C7a85gRZ.js} +1 -1
- package/dist/assets/{DockerLogsModal-DrTRT2MT.js → DockerLogsModal-Dq8vktNF.js} +1 -1
- package/dist/assets/{EmbeddedEditor-DMupDd8L.js → EmbeddedEditor-UkAMfMgB.js} +1 -1
- package/dist/assets/{FcStdViewer-CEcufXLO.js → FcStdViewer-CBecmpnm.js} +1 -1
- package/dist/assets/{GcodeViewer-BXQEHh0Y.js → GcodeViewer-dNB7GjDi.js} +1 -1
- package/dist/assets/{GlbViewer-6fiqpbSa.js → GlbViewer-P8pY1nXI.js} +1 -1
- package/dist/assets/{GmailOAuthSetup-BuwjdMiu.js → GmailOAuthSetup-CO4cE4HC.js} +1 -1
- package/dist/assets/{GoogleOAuthSetup-ClbRVt1w.js → GoogleOAuthSetup-DqZRvAWZ.js} +1 -1
- package/dist/assets/{IframeModal-DqeSTsXq.js → IframeModal-BAE1diTR.js} +1 -1
- package/dist/assets/{IntegrationsPanel-C-jmJexi.js → IntegrationsPanel-JYiardWX.js} +2 -2
- package/dist/assets/{LogViewerModal-B1OUt_oS.js → LogViewerModal-Cxw1OdRy.js} +1 -1
- package/dist/assets/{MonitoringModal-CafOFiTh.js → MonitoringModal-B06nNJ53.js} +1 -1
- package/dist/assets/{PM2LogsModal-D2oQ8yqk.js → PM2LogsModal-ml8qCTPs.js} +1 -1
- package/dist/assets/{RestoreArchivedAreaModal-D_BzfRNl.js → RestoreArchivedAreaModal-DC5Qr0Ns.js} +1 -1
- package/dist/assets/{Scene2DCanvas-Dzfxr9V5.js → Scene2DCanvas-CDFUmNXC.js} +1 -1
- package/dist/assets/{SceneManager-BwMwAay2.js → SceneManager-B4zndMJu.js} +1 -1
- package/dist/assets/{SkillsPanel-DyZK8UQP.js → SkillsPanel-b3wlh7k7.js} +1 -1
- package/dist/assets/{SlackMultiInstanceSetup-CWUCBxMA.js → SlackMultiInstanceSetup-BAWBLhR0.js} +1 -1
- package/dist/assets/{SpawnModal-Ccif5JAe.js → SpawnModal-BGuxmvDO.js} +1 -1
- package/dist/assets/{StatisticsModal-vpgsOAT6.js → StatisticsModal-uAw_HuEa.js} +1 -1
- package/dist/assets/{StlViewer-BxxTbq-w.js → StlViewer-D2hkwZih.js} +1 -1
- package/dist/assets/{SubordinateAssignmentModal-DtE_BZez.js → SubordinateAssignmentModal-Bp1cpD8r.js} +1 -1
- package/dist/assets/{ThreeAreaSelector-Bvv5Ircz.js → ThreeAreaSelector-DaUzJNZq.js} +1 -1
- package/dist/assets/{ThreeViewShortcuts-CDlyAOOo.js → ThreeViewShortcuts-rDWZqQ6n.js} +1 -1
- package/dist/assets/{TriggerManagerPanel-C3Ay2hMn.js → TriggerManagerPanel-nz5uiucE.js} +1 -1
- package/dist/assets/{VideoPlayer-_XnlmxSU.js → VideoPlayer-C08-3nBz.js} +1 -1
- package/dist/assets/{WorkflowEditorPanel-AkJ0BxQS.js → WorkflowEditorPanel-D5ZZU8lA.js} +1 -1
- package/dist/assets/{abnfDiagram-VRR7QNED-CxCVIsdN.js → abnfDiagram-VRR7QNED-C5u8J6Zc.js} +1 -1
- package/dist/assets/{arc-BFTKfTKo.js → arc-IRiFhDDl.js} +1 -1
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-D2RTnPfl.js → architectureDiagram-ZJ3FMSHR-C19i35Jx.js} +1 -1
- package/dist/assets/{area-logos-DcI1D4Jw.js → area-logos-B-JGhGzv.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-63NzytPf.js → blockDiagram-677ZJIJ3-BZvGOjKN.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-Ct6Fnp-A.js → c4Diagram-LMCZKHZV-DTK8wF_R.js} +1 -1
- package/dist/assets/channel-DOkve-II.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-DWfz0K87.js → chunk-2Q5K7J3B-CUPJvuW7.js} +1 -1
- package/dist/assets/{chunk-32BRIVSS-Q4lVzeAL.js → chunk-32BRIVSS-PtJeehgP.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-Cdh4qUQO.js → chunk-5VM5RSS4-CMU-KQIj.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-CwEOE5WL.js → chunk-EX3LRPZG-sWJPMNbO.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-C4pOoqX4.js → chunk-JWPE2WC7-B-95shpn.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-YuJPjTGW.js → chunk-MOJQB5TN-kzkcylOR.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-D8R2rVlu.js → chunk-RYQCIY6F-jwfwr9R7.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DktEESWJ.js → chunk-V7JOEXUC-CDXTCYFC.js} +1 -1
- package/dist/assets/{chunk-VR4S4FIN--eHC87JB.js → chunk-VR4S4FIN-CKxl5CVL.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-DLCg-eIA.js → chunk-XXDRQBXY-BWd1ZfAI.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-DvQFTaDY.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-DvQFTaDY.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CF5-b77a.js → cose-bilkent-JH36ORCC-BS46WCmG.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-CzjbwIY5.js → cynefin-VYW2F7L2-C9n8GhMW.js} +1 -1
- package/dist/assets/{cynefinDiagram-TSTJHNR4-DFpmwdSb.js → cynefinDiagram-TSTJHNR4-C59mcNU0.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-Cop8OyQf.js → dagre-VKFMJZFB-0wcG93Us.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-BY2J7jd4.js → diagram-FQU43EPY-Deiol_Qr.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-CuQ8wthE.js → diagram-G47NLZAW-D5rTzKp9.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-DbQQioTi.js → diagram-NH7WQ7WH-C7iek-dz.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-CQJWT3JI.js → diagram-OA4YK3LP-DbxVAZAu.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-FAUM8xdM.js → diagram-WEI45ONY-B6YAQFIe.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-DokJuDfN.js → ebnfDiagram-CCIWWBDH-D-aT2mwH.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-DJT-w4mK.js → erDiagram-Q63AITRT-CPUU7Zy4.js} +1 -1
- package/dist/assets/{flowDiagram-23GEKE2U-BBePs1z6.js → flowDiagram-23GEKE2U-Bd73LfJ6.js} +1 -1
- package/dist/assets/{ganttDiagram-NO4QXBWP-DFB2LkPp.js → ganttDiagram-NO4QXBWP-DIuaW79V.js} +1 -1
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-f23w1FRE.js → gitGraphDiagram-IHSO6WYX-xD1VFVGS.js} +1 -1
- package/dist/assets/{index-O6O1FoDY.js → index-2JaObqOn.js} +1 -1
- package/dist/assets/{index-Bft_2nWI.js → index-2qWclayP.js} +1 -1
- package/dist/assets/{index-yAoKz7VY.js → index-B6RQcB61.js} +1 -1
- package/dist/assets/index-BaYL3Eco.js +1 -0
- package/dist/assets/{index-DMx7tGNO.js → index-Bw92mJkH.js} +1 -1
- package/dist/assets/{index-DLmbhhuf.js → index-C8MrcgUo.js} +1 -1
- package/dist/assets/{index-BDDaoYcZ.js → index-CYdetr8X.js} +1 -1
- package/dist/assets/{index-BR-6QayQ.js → index-uAoMKZOA.js} +2 -2
- package/dist/assets/{index-mrMKBf3b.js → index-uRGTcmeS.js} +3 -3
- package/dist/assets/{infoDiagram-FWYZ7A6U-DNmEWboW.js → infoDiagram-FWYZ7A6U-Caq21N5I.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-BW5HmWUv.js → ishikawaDiagram-FXEZZL3T-B75pgois.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-CUu6A6f6.js → journeyDiagram-5HDEW3XC-CHnLU6xO.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-4W43zOke.js → kanban-definition-HUTT4EX6-BBYqmFbR.js} +1 -1
- package/dist/assets/{linear-DkURuoBE.js → linear-GW12WLBI.js} +1 -1
- package/dist/assets/{main-DGmjsdfM.js → main-BHmBlXv1.js} +117 -117
- package/dist/assets/{main-Cz0qHoVq.css → main-Dl43NBRA.css} +1 -1
- package/dist/assets/{mermaid.core-B_tMX15A.js → mermaid.core-Dm49cxsh.js} +4 -4
- package/dist/assets/{mindmap-definition-LN4V7U3C-DDmy4J_Z.js → mindmap-definition-LN4V7U3C-CT9QTbdH.js} +1 -1
- package/dist/assets/{pegDiagram-2B236MQR-Hr8MrSIW.js → pegDiagram-2B236MQR-CHGpO6Z1.js} +1 -1
- package/dist/assets/{pieDiagram-ENE6RG2P-FpqyAiik.js → pieDiagram-ENE6RG2P-B51_Vz66.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-4XNAw-pD.js → quadrantDiagram-ABIIQ3AL-DSOOd6hq.js} +1 -1
- package/dist/assets/{railroadDiagram-RFXS5EU6-Skfx7IMr.js → railroadDiagram-RFXS5EU6-DhjCz-0M.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-Bv2Poa9i.js → requirementDiagram-TGXJPOKE-BHUr1JjM.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-Azi8ZQHU.js → sankeyDiagram-HTMAVEWB-B4uZP0-p.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-UJ725aLp.js → sequenceDiagram-DBY2YBRQ-B4qvrxpO.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-D6Yk1U74.js → sizeCapture-X5ZJPWSS-oLTzgE2o.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-LGWy8-A7.js → stateDiagram-2N3HPSRC-C7J2si0w.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-yACyJfnp.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-k2Wu0JQN.js → swimlanes-5IMT3BWC-C1ba3tLP.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-Ckwxykq4.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-LduMJ6KS.js → timeline-definition-FHXFAJF6-Bs4l6YB2.js} +1 -1
- package/dist/assets/{vennDiagram-L72KCM5P-CjtozwKU.js → vennDiagram-L72KCM5P-C9YWK-tB.js} +1 -1
- package/dist/assets/{wardleyDiagram-EHGQE667-CiIkpaMm.js → wardleyDiagram-EHGQE667-B3jalDfp.js} +1 -1
- package/dist/assets/{web-BP-BguIQ.js → web-BaMZNtgs.js} +1 -1
- package/dist/assets/{web-DSnzrj-T.js → web-DbouEJev.js} +1 -1
- package/dist/assets/{web-C2LqVInh.js → web-Q8O8lwSx.js} +1 -1
- package/dist/assets/{xychartDiagram-FW5EYKEG-DRk48Gz1.js → xychartDiagram-FW5EYKEG-B6sxgjnh.js} +1 -1
- package/dist/build-info.json +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/channel-U6rGMshr.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-DCeRaOmK.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-DCeRaOmK.js +0 -1
- package/dist/assets/index-D1vhQn4i.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BgZKmDDt.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-O-DAJl2i.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
import{U as ts,u as rs,aa as _s,ab as vs,ac as Is,j as s,I as U,n as Es,ad as $s,ae as Ds,af as Ms,ag as Ls,r as o,ah as Ss,z as Xs,f as Ps,a0 as Ys,ai as Rs,aj as Gs,ak as Us,al as Fs,am as Hs,an as Zs,s as M,ao as Bs,ap as G}from"./main-DGmjsdfM.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-CBPuP1jE.js";const bs=ts.memo(({agent:a,isSelected:z,isKeyboardFocused:F=!1,onSelect:L,onDoubleClick:r,onChat:g,onFocus:h,onKill:p,onDragStart:S})=>{const{t:x}=rs(["dashboard","common"]),X=_s().has(a.id),N=vs(a.status),H=Is(a),j=Ls(H),I=a.taskLabel?s.jsxs(s.Fragment,{children:[s.jsx(U,{name:"task",size:12})," ",a.taskLabel]}):a.currentTask||a.lastAssignedTask,m=a.status==="idle"&&a.lastActivity>0,[,Z]=ts.useState(0);return ts.useEffect(()=>{if(!m)return;const b=window.setInterval(()=>Z(q=>q+1),15e3);return()=>window.clearInterval(b)},[m]),s.jsxs("div",{className:`dash-card dash-card--${N} ${z?"dash-card--selected":""} ${F?"dash-card--keyboard-focused":""}`,"data-agent-id":a.id,onClick:()=>L(a.id),onDoubleClick:b=>{b.stopPropagation(),r(a.id)},onDragStart:b=>{S==null||S(a),b.dataTransfer.effectAllowed="move"},draggable:!0,title:x("cards.doubleClickHint"),children:[s.jsxs("div",{className:"dash-card__row1",children:[s.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${N}`}),s.jsx("span",{className:"dash-card__name",children:a.name}),s.jsxs("span",{className:"dash-card__class",children:[s.jsx(Es,{agent:a,size:14})," ",a.class]}),s.jsxs("span",{className:`dash-card__provider dash-card__provider--${a.provider}`,children:[s.jsx(U,{name:a.provider==="codex"||a.provider==="opencode"||a.provider==="grok"||a.provider==="pi"?"status-pending":"robot",size:11,weight:a.provider==="codex"||a.provider==="opencode"||a.provider==="grok"||a.provider==="pi"?"fill":"regular",color:a.provider==="codex"?"#a16207":a.provider==="opencode"?"#4ade80":a.provider==="grok"?"#6366f1":a.provider==="pi"?"#a855f7":void 0})," ",a.provider]}),X&&s.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),s.jsxs("div",{className:"dash-card__row2",children:[s.jsx("span",{className:`dash-card__status dash-card__status--${N}`,children:X?"Unseen":a.status}),s.jsxs("div",{className:"dash-card__context",children:[s.jsx("div",{className:"dash-card__context-bar",children:s.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${j}`,style:{width:`${H}%`}})}),s.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${j}`,children:[H,"%"]})]})]}),s.jsxs("div",{className:"dash-card__row3",children:[s.jsxs("span",{className:"dash-card__workdir",title:a.cwd,children:[s.jsx(U,{name:"folder",size:11})," ",a.cwd.split("/").pop()||a.cwd]}),m&&s.jsxs("span",{className:"dash-card__idle-time",style:{color:Ms(a.lastActivity)},title:Ds(a.lastActivity),children:[s.jsx(U,{name:"status-waiting-input",size:10})," ",$s(a.lastActivity)]})]}),I&&s.jsx("div",{className:"dash-card__row4",children:s.jsx("span",{className:"dash-card__task",children:I})}),s.jsxs("div",{className:"dash-card__actions",children:[g&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:b=>{b.stopPropagation(),g(a.id)},title:x("cards.openTerminal"),children:x("cards.chat")}),p&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:b=>{b.stopPropagation(),p(a.id)},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});bs.displayName="AgentCard";const fs=({buildings:a,onSelectBuilding:z})=>{const{t:F}=rs(["dashboard"]),L=o.useMemo(()=>Array.from(a.values()).sort((r,g)=>r.name.localeCompare(g.name)),[a]);return s.jsxs("div",{className:"dashboard-view__buildings",children:[s.jsxs("div",{className:"dashboard-view__buildings-header",children:[s.jsx("span",{className:"dashboard-view__buildings-title",children:F("buildings.title")}),s.jsx("span",{className:"dashboard-view__buildings-count",children:L.length})]}),s.jsx("div",{className:"dashboard-view__buildings-row",children:L.map(r=>{const g=vs(r.status),h=Ss(r.type);return s.jsxs("button",{className:`dash-pill dash-pill--${g}`,onClick:()=>z==null?void 0:z(r.id),title:`${r.name} (${r.type}) - ${r.status}`,children:[s.jsx("span",{className:"dash-pill__icon",children:s.jsx(U,{name:h,size:14})}),s.jsx("span",{className:"dash-pill__name",children:r.name}),s.jsx("span",{className:`dash-pill__dot dash-pill__dot--${g}`})]},r.id)})})]})};fs.displayName="BuildingPills";function qs({onSelectAgent:a,onFocusAgent:z,onKillAgent:F,onSelectBuilding:L,onOpenTerminal:r,onFocusZone:g}){const{t:h}=rs(["dashboard","common"]),p=Xs(),S=Ps(),x=Ys(),ns=Rs(),X=_s(),[N,H]=o.useState(""),[j,I]=o.useState("all"),[m,Z]=o.useState("zone"),[b,q]=o.useState(new Set),[k,J]=o.useState(null),[ps,K]=o.useState(null),[P,Q]=o.useState(!1),[w,B]=o.useState(null),W=o.useMemo(()=>{const e=Array.from(p.values());return{total:e.length,working:e.filter(d=>d.status==="working"||d.status==="waiting"||d.status==="waiting_permission").length,idle:e.filter(d=>d.status==="idle").length,error:e.filter(d=>d.status==="error"||d.status==="offline"||d.status==="orphaned").length}},[p]),is=o.useMemo(()=>m==="zone"?Gs(p,x):m==="status"?Us(p,X):Fs(p),[p,x,m,X]),T=o.useMemo(()=>{const e=N.toLowerCase().trim(),d=is.map(l=>({...l,agents:l.agents.filter(_=>{if(j==="working"){if(_.status!=="working"&&_.status!=="waiting"&&_.status!=="waiting_permission")return!1}else if(j==="error"&&_.status!=="error"&&_.status!=="offline"&&_.status!=="orphaned")return!1;return!(e&&!_.name.toLowerCase().includes(e)&&!_.class.toLowerCase().includes(e))})}));return m==="zone"?d:d.filter(l=>l.agents.length>0)},[is,j,N,m]),O=o.useCallback(e=>e.area?`area:${e.area.id}`:`${m}:${e.label}`,[m]),ss=o.useMemo(()=>T.map(e=>({...e,sortedAgents:m==="status"?Hs(e.agents,{prioritizeRecentlyIdle:!0}):Zs(e.agents)})),[T,m]),C=o.useMemo(()=>{const e=[];return ss.forEach(d=>{const l=O(d);b.has(l)||e.push(...d.sortedAgents)}),e},[ss,b,O]),ws=o.useCallback(e=>{q(d=>{const l=new Set(d);return l.has(e)?l.delete(e):l.add(e),l})},[]),gs=o.useCallback(e=>{r==null||r(e)},[r]),xs=o.useCallback(e=>{a==null||a(e),Q(!0),B(e)},[a]),js=o.useCallback(e=>{r==null||r(e)},[r]),Ns=o.useCallback(e=>{J(e)},[]),ks=o.useCallback((e,d)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",K(d)},[]),Cs=o.useCallback(()=>{K(null)},[]),ys=o.useCallback(e=>{if(!k)return;if(e===null){const E=M.getState(),t=Array.from(E.areas.values()).find(n=>n.assignedAgentIds.includes(k.id));t&&M.unassignAgentFromArea(k.id,t.id),J(null),K(null);return}const d=x.get(e);if(!d)return;const l=Array.from(p.values()),_=Bs(d,l,k.position);M.updateAgent({...k,position:{...k.position,x:_.x,z:_.z}}),M.assignAgentToArea(k.id,e),J(null),K(null)},[k,x,p]);return o.useEffect(()=>{if(C.length===0){Q(!1),B(null);return}P&&(!w||!C.some(e=>e.id===w))&&(B(C[0].id),a==null||a(C[0].id))},[C,P,w,a]),o.useEffect(()=>{const e=t=>t instanceof HTMLElement?t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT"||t.isContentEditable:!1,d=t=>t instanceof HTMLElement?!!t.closest(".guake-terminal")||t.classList.contains("guake-input")||t.classList.contains("agent-panel-input"):!1,l=t=>{const n=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(A=>A.dataset.agentId===t);n==null||n.scrollIntoView({block:"nearest",inline:"nearest"})},_=(t,n)=>{var os,cs,ls,us,hs,ms;const A=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(i=>{const u=i.dataset.agentId;if(!u)return null;const y=i.getBoundingClientRect();return{id:u,centerX:y.left+y.width/2,centerY:y.top+y.height/2,height:y.height}}).filter(i=>i!==null).sort((i,u)=>i.centerY-u.centerY||i.centerX-u.centerX);if(A.length===0)return t;const es=A.reduce((i,u)=>i+u.height,0)/A.length,as=Math.max(18,es*.6),f=[];for(const i of A){const u=f[f.length-1];if(!u){f.push([{id:i.id,centerX:i.centerX,centerY:i.centerY}]);continue}const y=u.reduce((As,zs)=>As+zs.centerY,0)/u.length;Math.abs(i.centerY-y)<=as?u.push({id:i.id,centerX:i.centerX,centerY:i.centerY}):f.push([{id:i.id,centerX:i.centerX,centerY:i.centerY}])}f.forEach(i=>i.sort((u,y)=>u.centerX-y.centerX));const Y=f.findIndex(i=>i.some(u=>u.id===t));if(Y===-1)return((cs=(os=f[0])==null?void 0:os[0])==null?void 0:cs.id)??t;const $=f[Y],v=$.findIndex(i=>i.id===t);if(v===-1)return((us=(ls=f[0])==null?void 0:ls[0])==null?void 0:us.id)??t;if(n==="left")return((hs=$[Math.max(0,v-1)])==null?void 0:hs.id)??t;if(n==="right")return((ms=$[Math.min($.length-1,v+1)])==null?void 0:ms.id)??t;const V=n==="up"?Math.max(0,Y-1):Math.min(f.length-1,Y+1),c=f[V],R=$[v].centerX;let D=c[0],ds=Math.abs(D.centerX-R);for(const i of c){const u=Math.abs(i.centerX-R);u<ds&&(D=i,ds=u)}return(D==null?void 0:D.id)??t},E=t=>{const n=M.getShortcuts(),A=n.find(c=>c.id==="dashboard-selector-toggle"),es=n.find(c=>c.id==="dashboard-vim-left"),as=n.find(c=>c.id==="dashboard-vim-down"),f=n.find(c=>c.id==="dashboard-vim-up"),Y=n.find(c=>c.id==="dashboard-vim-right"),$=n.find(c=>c.id==="open-terminal"),v=M.getState();if(e(t.target))if(!v.terminalOpen&&d(t.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(G(t,A)){if(C.length===0)return;t.preventDefault(),t.stopPropagation(),Q(!0),B(c=>{const R=c&&C.some(D=>D.id===c)?c:C[0].id;return a==null||a(R),window.setTimeout(()=>l(R),0),R});return}const V=G(t,es)||t.key==="ArrowLeft"?"left":G(t,as)||t.key==="ArrowDown"?"down":G(t,f)||t.key==="ArrowUp"?"up":G(t,Y)||t.key==="ArrowRight"?"right":null;if(V&&P&&w){t.preventDefault(),t.stopPropagation();const c=_(w,V);c!==w&&(B(c),a==null||a(c),window.setTimeout(()=>l(c),0));return}if(G(t,$)){if(v.terminalOpen)return;if(P&&w&&v.agents.has(w)){t.preventDefault(),r==null||r(w);return}if(v.selectedAgentIds.size===1){t.preventDefault();const c=Array.from(v.selectedAgentIds)[0];r==null||r(c);return}if(v.lastSelectedAgentId&&v.agents.has(v.lastSelectedAgentId)){t.preventDefault(),r==null||r(v.lastSelectedAgentId);return}}};return document.addEventListener("keydown",E,!0),()=>document.removeEventListener("keydown",E,!0)},[C,P,w,r,a]),o.useEffect(()=>{const e=document.activeElement;e instanceof HTMLElement&&e.closest(".guake-terminal")&&!M.getState().terminalOpen&&e.blur()},[]),s.jsxs("div",{className:"dashboard-view",children:[s.jsxs("div",{className:"dashboard-view__topbar",children:[s.jsxs("div",{className:"dashboard-view__metrics",children:[s.jsxs("button",{className:`dashboard-view__metric-btn ${j==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.total}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:labels.agents")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${j==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("working"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.working}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.working")})]}),s.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.idle}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.idle")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${j==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("error"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.error}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.error")})]})]}),s.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:h("searchPlaceholder"),value:N,onChange:e=>H(e.target.value)})]}),s.jsxs("div",{className:"dashboard-view__grouping",children:[s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("zone"),children:h("grouping.byZone")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("status"),children:h("grouping.byStatus")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("activity"),children:h("grouping.byActivity")})]}),s.jsxs("div",{className:"dashboard-view__content",children:[ss.map(e=>{const d=O(e),l=b.has(d),_=e.sortedAgents,E=e.agents.filter(n=>n.status==="working"||n.status==="waiting"||n.status==="waiting_permission").length,t=e.agents.filter(n=>X.has(n.id)).length;return s.jsxs("div",{className:`dashboard-view__zone ${ps===(e.area?e.area.id:null)&&k?"dashboard-view__zone--drag-over":""}`,onDragOver:n=>ks(n,e.area?e.area.id:null),onDragLeave:Cs,onDrop:()=>ys(e.area?e.area.id:null),children:[s.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>ws(d),children:[s.jsxs("div",{className:"dashboard-view__zone-left",children:[s.jsx("span",{className:`dashboard-view__zone-chevron ${l?"dashboard-view__zone-chevron--collapsed":""}`,children:s.jsx(U,{name:"caret-down",size:12})}),s.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:e.color}}),s.jsx("span",{className:"dashboard-view__zone-name",children:e.label}),s.jsxs("span",{className:"dashboard-view__zone-count",children:[h("agentCount",{count:e.agents.length}),E>0&&s.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",E," ",h("working")]}),t>0&&s.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",t," Unseen"]})]})]}),e.area&&g&&s.jsx("button",{className:"dashboard-view__zone-focus",onClick:n=>{n.stopPropagation(),g(e.area.id)},title:h("focusZone"),children:h("focusZone")})]}),!l&&s.jsx("div",{className:"dashboard-view__zone-grid",children:_.map(n=>s.jsx(bs,{agent:n,isSelected:ns.has(n.id),isKeyboardFocused:P&&w===n.id,onSelect:xs,onDoubleClick:gs,onChat:js,onFocus:z,onKill:F,onDragStart:Ns},n.id))})]},d)}),T.length===0&&s.jsx("div",{className:"dashboard-view__empty",children:N?h("noAgentsMatching",{search:N}):h("noAgentsSpawned")}),S.size>0&&s.jsx(fs,{buildings:S,onSelectBuilding:L})]})]})}export{qs as DashboardView};
|
|
1
|
+
import{U as ts,u as rs,aa as _s,ab as vs,ac as Is,j as s,I as U,n as Es,ad as $s,ae as Ds,af as Ms,ag as Ls,r as o,ah as Ss,z as Xs,f as Ps,a0 as Ys,ai as Rs,aj as Gs,ak as Us,al as Fs,am as Hs,an as Zs,s as M,ao as Bs,ap as G}from"./main-BHmBlXv1.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-CBPuP1jE.js";const bs=ts.memo(({agent:a,isSelected:z,isKeyboardFocused:F=!1,onSelect:L,onDoubleClick:r,onChat:g,onFocus:h,onKill:p,onDragStart:S})=>{const{t:x}=rs(["dashboard","common"]),X=_s().has(a.id),N=vs(a.status),H=Is(a),j=Ls(H),I=a.taskLabel?s.jsxs(s.Fragment,{children:[s.jsx(U,{name:"task",size:12})," ",a.taskLabel]}):a.currentTask||a.lastAssignedTask,m=a.status==="idle"&&a.lastActivity>0,[,Z]=ts.useState(0);return ts.useEffect(()=>{if(!m)return;const b=window.setInterval(()=>Z(q=>q+1),15e3);return()=>window.clearInterval(b)},[m]),s.jsxs("div",{className:`dash-card dash-card--${N} ${z?"dash-card--selected":""} ${F?"dash-card--keyboard-focused":""}`,"data-agent-id":a.id,onClick:()=>L(a.id),onDoubleClick:b=>{b.stopPropagation(),r(a.id)},onDragStart:b=>{S==null||S(a),b.dataTransfer.effectAllowed="move"},draggable:!0,title:x("cards.doubleClickHint"),children:[s.jsxs("div",{className:"dash-card__row1",children:[s.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${N}`}),s.jsx("span",{className:"dash-card__name",children:a.name}),s.jsxs("span",{className:"dash-card__class",children:[s.jsx(Es,{agent:a,size:14})," ",a.class]}),s.jsxs("span",{className:`dash-card__provider dash-card__provider--${a.provider}`,children:[s.jsx(U,{name:a.provider==="codex"||a.provider==="opencode"||a.provider==="grok"||a.provider==="pi"?"status-pending":"robot",size:11,weight:a.provider==="codex"||a.provider==="opencode"||a.provider==="grok"||a.provider==="pi"?"fill":"regular",color:a.provider==="codex"?"#a16207":a.provider==="opencode"?"#4ade80":a.provider==="grok"?"#6366f1":a.provider==="pi"?"#a855f7":void 0})," ",a.provider]}),X&&s.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),s.jsxs("div",{className:"dash-card__row2",children:[s.jsx("span",{className:`dash-card__status dash-card__status--${N}`,children:X?"Unseen":a.status}),s.jsxs("div",{className:"dash-card__context",children:[s.jsx("div",{className:"dash-card__context-bar",children:s.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${j}`,style:{width:`${H}%`}})}),s.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${j}`,children:[H,"%"]})]})]}),s.jsxs("div",{className:"dash-card__row3",children:[s.jsxs("span",{className:"dash-card__workdir",title:a.cwd,children:[s.jsx(U,{name:"folder",size:11})," ",a.cwd.split("/").pop()||a.cwd]}),m&&s.jsxs("span",{className:"dash-card__idle-time",style:{color:Ms(a.lastActivity)},title:Ds(a.lastActivity),children:[s.jsx(U,{name:"status-waiting-input",size:10})," ",$s(a.lastActivity)]})]}),I&&s.jsx("div",{className:"dash-card__row4",children:s.jsx("span",{className:"dash-card__task",children:I})}),s.jsxs("div",{className:"dash-card__actions",children:[g&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:b=>{b.stopPropagation(),g(a.id)},title:x("cards.openTerminal"),children:x("cards.chat")}),p&&s.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:b=>{b.stopPropagation(),p(a.id)},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});bs.displayName="AgentCard";const fs=({buildings:a,onSelectBuilding:z})=>{const{t:F}=rs(["dashboard"]),L=o.useMemo(()=>Array.from(a.values()).sort((r,g)=>r.name.localeCompare(g.name)),[a]);return s.jsxs("div",{className:"dashboard-view__buildings",children:[s.jsxs("div",{className:"dashboard-view__buildings-header",children:[s.jsx("span",{className:"dashboard-view__buildings-title",children:F("buildings.title")}),s.jsx("span",{className:"dashboard-view__buildings-count",children:L.length})]}),s.jsx("div",{className:"dashboard-view__buildings-row",children:L.map(r=>{const g=vs(r.status),h=Ss(r.type);return s.jsxs("button",{className:`dash-pill dash-pill--${g}`,onClick:()=>z==null?void 0:z(r.id),title:`${r.name} (${r.type}) - ${r.status}`,children:[s.jsx("span",{className:"dash-pill__icon",children:s.jsx(U,{name:h,size:14})}),s.jsx("span",{className:"dash-pill__name",children:r.name}),s.jsx("span",{className:`dash-pill__dot dash-pill__dot--${g}`})]},r.id)})})]})};fs.displayName="BuildingPills";function qs({onSelectAgent:a,onFocusAgent:z,onKillAgent:F,onSelectBuilding:L,onOpenTerminal:r,onFocusZone:g}){const{t:h}=rs(["dashboard","common"]),p=Xs(),S=Ps(),x=Ys(),ns=Rs(),X=_s(),[N,H]=o.useState(""),[j,I]=o.useState("all"),[m,Z]=o.useState("zone"),[b,q]=o.useState(new Set),[k,J]=o.useState(null),[ps,K]=o.useState(null),[P,Q]=o.useState(!1),[w,B]=o.useState(null),W=o.useMemo(()=>{const e=Array.from(p.values());return{total:e.length,working:e.filter(d=>d.status==="working"||d.status==="waiting"||d.status==="waiting_permission").length,idle:e.filter(d=>d.status==="idle").length,error:e.filter(d=>d.status==="error"||d.status==="offline"||d.status==="orphaned").length}},[p]),is=o.useMemo(()=>m==="zone"?Gs(p,x):m==="status"?Us(p,X):Fs(p),[p,x,m,X]),T=o.useMemo(()=>{const e=N.toLowerCase().trim(),d=is.map(l=>({...l,agents:l.agents.filter(_=>{if(j==="working"){if(_.status!=="working"&&_.status!=="waiting"&&_.status!=="waiting_permission")return!1}else if(j==="error"&&_.status!=="error"&&_.status!=="offline"&&_.status!=="orphaned")return!1;return!(e&&!_.name.toLowerCase().includes(e)&&!_.class.toLowerCase().includes(e))})}));return m==="zone"?d:d.filter(l=>l.agents.length>0)},[is,j,N,m]),O=o.useCallback(e=>e.area?`area:${e.area.id}`:`${m}:${e.label}`,[m]),ss=o.useMemo(()=>T.map(e=>({...e,sortedAgents:m==="status"?Hs(e.agents,{prioritizeRecentlyIdle:!0}):Zs(e.agents)})),[T,m]),C=o.useMemo(()=>{const e=[];return ss.forEach(d=>{const l=O(d);b.has(l)||e.push(...d.sortedAgents)}),e},[ss,b,O]),ws=o.useCallback(e=>{q(d=>{const l=new Set(d);return l.has(e)?l.delete(e):l.add(e),l})},[]),gs=o.useCallback(e=>{r==null||r(e)},[r]),xs=o.useCallback(e=>{a==null||a(e),Q(!0),B(e)},[a]),js=o.useCallback(e=>{r==null||r(e)},[r]),Ns=o.useCallback(e=>{J(e)},[]),ks=o.useCallback((e,d)=>{e.preventDefault(),e.dataTransfer.dropEffect="move",K(d)},[]),Cs=o.useCallback(()=>{K(null)},[]),ys=o.useCallback(e=>{if(!k)return;if(e===null){const E=M.getState(),t=Array.from(E.areas.values()).find(n=>n.assignedAgentIds.includes(k.id));t&&M.unassignAgentFromArea(k.id,t.id),J(null),K(null);return}const d=x.get(e);if(!d)return;const l=Array.from(p.values()),_=Bs(d,l,k.position);M.updateAgent({...k,position:{...k.position,x:_.x,z:_.z}}),M.assignAgentToArea(k.id,e),J(null),K(null)},[k,x,p]);return o.useEffect(()=>{if(C.length===0){Q(!1),B(null);return}P&&(!w||!C.some(e=>e.id===w))&&(B(C[0].id),a==null||a(C[0].id))},[C,P,w,a]),o.useEffect(()=>{const e=t=>t instanceof HTMLElement?t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT"||t.isContentEditable:!1,d=t=>t instanceof HTMLElement?!!t.closest(".guake-terminal")||t.classList.contains("guake-input")||t.classList.contains("agent-panel-input"):!1,l=t=>{const n=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(A=>A.dataset.agentId===t);n==null||n.scrollIntoView({block:"nearest",inline:"nearest"})},_=(t,n)=>{var os,cs,ls,us,hs,ms;const A=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(i=>{const u=i.dataset.agentId;if(!u)return null;const y=i.getBoundingClientRect();return{id:u,centerX:y.left+y.width/2,centerY:y.top+y.height/2,height:y.height}}).filter(i=>i!==null).sort((i,u)=>i.centerY-u.centerY||i.centerX-u.centerX);if(A.length===0)return t;const es=A.reduce((i,u)=>i+u.height,0)/A.length,as=Math.max(18,es*.6),f=[];for(const i of A){const u=f[f.length-1];if(!u){f.push([{id:i.id,centerX:i.centerX,centerY:i.centerY}]);continue}const y=u.reduce((As,zs)=>As+zs.centerY,0)/u.length;Math.abs(i.centerY-y)<=as?u.push({id:i.id,centerX:i.centerX,centerY:i.centerY}):f.push([{id:i.id,centerX:i.centerX,centerY:i.centerY}])}f.forEach(i=>i.sort((u,y)=>u.centerX-y.centerX));const Y=f.findIndex(i=>i.some(u=>u.id===t));if(Y===-1)return((cs=(os=f[0])==null?void 0:os[0])==null?void 0:cs.id)??t;const $=f[Y],v=$.findIndex(i=>i.id===t);if(v===-1)return((us=(ls=f[0])==null?void 0:ls[0])==null?void 0:us.id)??t;if(n==="left")return((hs=$[Math.max(0,v-1)])==null?void 0:hs.id)??t;if(n==="right")return((ms=$[Math.min($.length-1,v+1)])==null?void 0:ms.id)??t;const V=n==="up"?Math.max(0,Y-1):Math.min(f.length-1,Y+1),c=f[V],R=$[v].centerX;let D=c[0],ds=Math.abs(D.centerX-R);for(const i of c){const u=Math.abs(i.centerX-R);u<ds&&(D=i,ds=u)}return(D==null?void 0:D.id)??t},E=t=>{const n=M.getShortcuts(),A=n.find(c=>c.id==="dashboard-selector-toggle"),es=n.find(c=>c.id==="dashboard-vim-left"),as=n.find(c=>c.id==="dashboard-vim-down"),f=n.find(c=>c.id==="dashboard-vim-up"),Y=n.find(c=>c.id==="dashboard-vim-right"),$=n.find(c=>c.id==="open-terminal"),v=M.getState();if(e(t.target))if(!v.terminalOpen&&d(t.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(G(t,A)){if(C.length===0)return;t.preventDefault(),t.stopPropagation(),Q(!0),B(c=>{const R=c&&C.some(D=>D.id===c)?c:C[0].id;return a==null||a(R),window.setTimeout(()=>l(R),0),R});return}const V=G(t,es)||t.key==="ArrowLeft"?"left":G(t,as)||t.key==="ArrowDown"?"down":G(t,f)||t.key==="ArrowUp"?"up":G(t,Y)||t.key==="ArrowRight"?"right":null;if(V&&P&&w){t.preventDefault(),t.stopPropagation();const c=_(w,V);c!==w&&(B(c),a==null||a(c),window.setTimeout(()=>l(c),0));return}if(G(t,$)){if(v.terminalOpen)return;if(P&&w&&v.agents.has(w)){t.preventDefault(),r==null||r(w);return}if(v.selectedAgentIds.size===1){t.preventDefault();const c=Array.from(v.selectedAgentIds)[0];r==null||r(c);return}if(v.lastSelectedAgentId&&v.agents.has(v.lastSelectedAgentId)){t.preventDefault(),r==null||r(v.lastSelectedAgentId);return}}};return document.addEventListener("keydown",E,!0),()=>document.removeEventListener("keydown",E,!0)},[C,P,w,r,a]),o.useEffect(()=>{const e=document.activeElement;e instanceof HTMLElement&&e.closest(".guake-terminal")&&!M.getState().terminalOpen&&e.blur()},[]),s.jsxs("div",{className:"dashboard-view",children:[s.jsxs("div",{className:"dashboard-view__topbar",children:[s.jsxs("div",{className:"dashboard-view__metrics",children:[s.jsxs("button",{className:`dashboard-view__metric-btn ${j==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.total}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:labels.agents")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${j==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("working"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.working}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.working")})]}),s.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>I("all"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.idle}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.idle")})]}),s.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${j==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>I("error"),children:[s.jsx("span",{className:"dashboard-view__metric-value",children:W.error}),s.jsx("span",{className:"dashboard-view__metric-label",children:h("common:status.error")})]})]}),s.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:h("searchPlaceholder"),value:N,onChange:e=>H(e.target.value)})]}),s.jsxs("div",{className:"dashboard-view__grouping",children:[s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("zone"),children:h("grouping.byZone")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("status"),children:h("grouping.byStatus")}),s.jsx("button",{className:`dashboard-view__grouping-btn ${m==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>Z("activity"),children:h("grouping.byActivity")})]}),s.jsxs("div",{className:"dashboard-view__content",children:[ss.map(e=>{const d=O(e),l=b.has(d),_=e.sortedAgents,E=e.agents.filter(n=>n.status==="working"||n.status==="waiting"||n.status==="waiting_permission").length,t=e.agents.filter(n=>X.has(n.id)).length;return s.jsxs("div",{className:`dashboard-view__zone ${ps===(e.area?e.area.id:null)&&k?"dashboard-view__zone--drag-over":""}`,onDragOver:n=>ks(n,e.area?e.area.id:null),onDragLeave:Cs,onDrop:()=>ys(e.area?e.area.id:null),children:[s.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>ws(d),children:[s.jsxs("div",{className:"dashboard-view__zone-left",children:[s.jsx("span",{className:`dashboard-view__zone-chevron ${l?"dashboard-view__zone-chevron--collapsed":""}`,children:s.jsx(U,{name:"caret-down",size:12})}),s.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:e.color}}),s.jsx("span",{className:"dashboard-view__zone-name",children:e.label}),s.jsxs("span",{className:"dashboard-view__zone-count",children:[h("agentCount",{count:e.agents.length}),E>0&&s.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",E," ",h("working")]}),t>0&&s.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",t," Unseen"]})]})]}),e.area&&g&&s.jsx("button",{className:"dashboard-view__zone-focus",onClick:n=>{n.stopPropagation(),g(e.area.id)},title:h("focusZone"),children:h("focusZone")})]}),!l&&s.jsx("div",{className:"dashboard-view__zone-grid",children:_.map(n=>s.jsx(bs,{agent:n,isSelected:ns.has(n.id),isKeyboardFocused:P&&w===n.id,onSelect:xs,onDoubleClick:gs,onChat:js,onFocus:z,onKill:F,onDragStart:Ns},n.id))})]},d)}),T.length===0&&s.jsx("div",{className:"dashboard-view__empty",children:N?h("noAgentsMatching",{search:N}):h("noAgentsSpawned")}),S.size>0&&s.jsx(fs,{buildings:S,onSelectBuilding:L})]})]})}export{qs as DashboardView};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as s,aV as Tn,aW as sn,N as hn,aX as gn,j as e,aY as xn,aZ as Ln,u as en,a_ as Pn,a$ as Dn,b0 as $n,b1 as Rn,b2 as zn,au as On,ai as Bn,aB as bn,m as Ut,S,y as Xt,b3 as Jt,b4 as ln,b5 as It,b6 as xe,b7 as Fn,s as g,a0 as _n,f as wn,b8 as Wn,b9 as rn,ba as on,I as d,bb as Hn,aE as vn,bc as Gn,n as jn,bd as Cn,be as kn,bf as Nn,bg as Un,bh as Xn,bi as Vn,ah as qn,bj as Yn,bk as Kn,bl as Zn,aH as Jn,aI as Qn,aJ as ea,bm as ta,bn as na,bo as Qt,Z as aa,U as sa,K as cn,bp as ia,bq as la,br as ra,bs as oa,bt as ca,bu as da,bv as ua,bw as ma,bx as pa,by as fa,z as ha,bz as ga,bA as xa,bB as ba,bC as _a,bD as lt,bE as wa,bF as va,bG as ja,bH as Ca,bI as gt,bJ as ka,bK as Na,bL as ya,bM as Aa,p as Sa,D as Ea,t as Vt,o as Ma}from"./main-DGmjsdfM.js";import{g as Ia}from"./area-logos-DcI1D4Jw.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-CBPuP1jE.js";function Ta(c){const o=s.useRef(c);o.current=c,s.useEffect(()=>{if(!Tn())return;let u=null,b=!1;return sn.addListener("backButton",()=>{o.current()==="exit"&&sn.exitApp()}).then(y=>{b?y.remove():u=y}),()=>{b=!0,u&&(u.remove(),u=null)}},[])}async function La(c){const o=hn(),u=await fetch(`${gn()}/api/agents/${c}/terminal`,{method:"POST",headers:{Authorization:`Bearer ${o}`}});if(!u.ok){const b=await u.json().catch(()=>({}));throw new Error((b==null?void 0:b.error)||`Failed to start terminal (${u.status})`)}return u.json()}async function Pa(c){const o=hn();await fetch(`${gn()}/api/agents/${c}/terminal`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}})}const xt=new Map;function Da({agentId:c}){const[o,u]=s.useState(null),[b,y]=s.useState(null);return s.useEffect(()=>{let M=!1;const A=xt.get(c);return A&&(clearTimeout(A),xt.delete(c)),u(null),y(null),La(c).then(k=>{M||u(k.url)}).catch(k=>{M||y(k instanceof Error?k.message:"Failed to start terminal")}),()=>{M=!0;const k=xt.get(c);k&&clearTimeout(k),xt.set(c,setTimeout(()=>{xt.delete(c),Pa(c)},2500))}},[c]),b?e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:b})}):o?e.jsx("div",{className:"flat-classic-terminal",children:e.jsx(xn,{terminalUrl:o,visible:!0})}):e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:"Attaching to interactive session…"})})}const qt=new Map,$a=6e4;function dn(c){return Number.isFinite(c)?Math.abs(c)>=1e3?c.toLocaleString(void 0,{maximumFractionDigits:0}):c.toLocaleString(void 0,{maximumFractionDigits:2}):String(c)}function Ra(c,o){var y,M,A;const u=[];if(!c.rateLimits)return u;if(c.provider==="claude"){const k=c,J=[{key:"fiveHour",label:o("terminal:usage.currentSession"),window:k.rateLimits.fiveHour},{key:"sevenDay",label:o("terminal:usage.currentWeekAll"),window:k.rateLimits.sevenDay},{key:"sevenDayOpus",label:o("terminal:usage.currentWeekOpus"),window:k.rateLimits.sevenDayOpus},{key:"sevenDayFable",label:o("terminal:usage.currentWeekFable"),window:k.rateLimits.sevenDayFable}];for(const w of J)(w.window||w.key==="sevenDayFable")&&u.push(w);return u}const b=c;return(y=b.rateLimits)!=null&&y.weekly&&u.push({key:"weekly",label:o("terminal:usage.weeklyLimit"),window:b.rateLimits.weekly}),(M=b.rateLimits)!=null&&M.monthly&&u.push({key:"monthly",label:o("terminal:usage.monthlyLimit"),window:b.rateLimits.monthly}),(A=b.rateLimits)!=null&&A.onDemand&&u.push({key:"onDemand",label:o("terminal:usage.onDemandLimit"),window:b.rateLimits.onDemand}),u}function za({agentId:c,contextSummary:o}){const{t:u}=en(["terminal","common"]),[b,y]=s.useState(()=>{var D;return((D=qt.get(c))==null?void 0:D.snapshot)??null}),[M,A]=s.useState(!1),[k,J]=s.useState(null),w=s.useRef(0);s.useEffect(()=>{const D=qt.get(c);if(D&&Date.now()-D.fetchedAt<$a){y(D.snapshot);return}const pe=++w.current;A(!0),J(null),Pn(c).then(T=>{pe===w.current&&(qt.set(c,{snapshot:T,fetchedAt:Date.now()}),y(T),A(!1))}).catch(T=>{pe===w.current&&(J(T.message||"Failed to load plan limits"),A(!1))})},[c]);const W=b?Ra(b,u):[];return e.jsxs("div",{className:"plan-limits-tooltip",children:[o&&e.jsx("div",{className:"plan-limits-tooltip__context",children:o}),e.jsx("div",{className:"plan-limits-tooltip__title",children:u("terminal:usage.limits")}),M&&!b&&e.jsxs("div",{className:"plan-limits-tooltip__muted",children:[u("common:status.loading"),"…"]}),!M&&k&&!b&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:u("terminal:usage.limitsError",{message:k})}),W.length>0?e.jsx("div",{className:"plan-limits-tooltip__gauges",children:W.map(({key:D,label:pe,window:T})=>{const Ee=T?Math.max(0,Math.min(100,T.utilization)):0,fe=$n(Ee),he=T!=null&&typeof T.used=="number"&&typeof T.limit=="number"&&Number.isFinite(T.used)&&Number.isFinite(T.limit);return e.jsxs("div",{className:"plan-limits-tooltip__gauge",children:[e.jsxs("div",{className:"plan-limits-tooltip__gauge-head",children:[e.jsx("span",{className:"plan-limits-tooltip__gauge-label",children:pe}),e.jsx("span",{className:"plan-limits-tooltip__gauge-percent",style:{color:fe},children:u("terminal:usage.percentUsed",{percent:Math.round(Ee)})})]}),e.jsx("div",{className:"plan-limits-tooltip__bar",children:e.jsx("div",{className:"plan-limits-tooltip__bar-fill",style:{width:`${Ee}%`,background:fe}})}),e.jsxs("div",{className:"plan-limits-tooltip__reset",children:[T&&u("terminal:usage.resets",{time:Dn(T.resetsAt)}),he&&e.jsx("span",{style:{marginLeft:8},children:u("terminal:usage.creditsUsed",{used:dn(T.used),limit:dn(T.limit)})})]})]},D)})}):b&&!M&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:b.rateLimitsError?u("terminal:usage.limitsError",{message:b.rateLimitsError}):b.cliHint})]})}function Oa({agentId:c,disabled:o,contextSummary:u,children:b}){return e.jsx(Ln,{position:"top",maxWidth:320,disabled:o,className:"plan-limits-tooltip-wrapper",triggerStyle:{display:"inline-flex",alignItems:"center"},content:e.jsx(za,{agentId:c,contextSummary:u}),children:b})}const Ba=s.memo(function({className:o=""}){const{t:u}=en(["common"]),[b,y]=Rn(),M=s.useRef(null),[A,k]=s.useState(null);s.useLayoutEffect(()=>{const w=M.current;if(!w)return;const W=w.querySelector(".view-mode-toggle__btn--active");W&&k({left:W.offsetLeft,width:W.offsetWidth})},[b]);const J=s.useCallback(w=>{if(w!==b){if(typeof window<"u"&&window.dispatchEvent(new CustomEvent("tide:viewmode-switch-pressed",{detail:{mode:w}})),w==="3d"){requestAnimationFrame(()=>y(w));return}y(w)}},[b,y]);return e.jsxs("div",{className:`view-mode-toggle ${o}`,ref:M,children:[A&&e.jsx("div",{className:"view-mode-toggle__indicator",style:{left:A.left,width:A.width}}),zn.map(w=>e.jsxs("button",{className:`view-mode-toggle__btn ${b===w?"view-mode-toggle__btn--active":""}`,onClick:()=>J(w),title:u(`common:viewMode.descriptions.${w}`),children:[e.jsxs("span",{className:"view-mode-toggle__icon",children:[w==="2d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),e.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),e.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]}),w==="3d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),e.jsx("path",{d:"M2 17l10 5 10-5"}),e.jsx("path",{d:"M2 12l10 5 10-5"})]}),w==="flat"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"3",y:"13",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"13",width:"8",height:"8",rx:"1"})]}),w==="dashboard"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),e.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]})]}),e.jsx("span",{className:"view-mode-toggle__label",children:u(`common:viewMode.labels.${w}`)})]},w))]})}),Tt=3,Lt=280,un=320,Yt=240,mn=64,Fa=["simple","chat","advanced"],pn={simple:"Simple",chat:"Chat",advanced:"Advanced"},fn={simple:"○",chat:"◐",advanced:"◉"},Wa={simple:"Simple view — clean messages only",chat:"Chat view — assistant replies (no tool calls)",advanced:"Advanced view — everything including tools"},Kt="flat-clear-context",yn="tide:flat-embedded-panels";function An(){try{const c=localStorage.getItem(yn),o=c?JSON.parse(c):{};return o&&typeof o=="object"?o:{}}catch{return{}}}function Zt(c,o){try{const u=An();o?u[c]=o:delete u[c],localStorage.setItem(yn,JSON.stringify(u))}catch{}}function Ha(c){const o=c.split("/").filter(Boolean);return o.length===0?c:o.slice(-2).join("/")}function Ga(c){if(c.provider==="codex"){const M=c.codexModel||"gpt-5.6-luna",A=Sa[M];return{model:(A==null?void 0:A.label)||M}}if(c.provider==="opencode")return{model:c.opencodeModel||"opencode"};if(c.provider==="grok"){const M=c.grokModel||Ea,A=c.effort,k=A?Vt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}if(c.provider==="pi"){const M=c.piModel||"pi default",A=c.effort,k=A?Vt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}const o=c.model||c.detectedModel||"default",u=Ma[o],b=c.effort,y=b?Vt[b]:void 0;return{model:(u==null?void 0:u.label)||o,effort:y==null?void 0:y.label}}function Ua(c,o){if(o.type==="rectangle"&&o.width&&o.height){const u=o.width/2,b=o.height/2;return c.x>=o.center.x-u&&c.x<=o.center.x+u&&c.z>=o.center.z-b&&c.z<=o.center.z+b}if(o.type==="circle"&&o.radius){const u=c.x-o.center.x,b=c.z-o.center.z;return u*u+b*b<=o.radius*o.radius}return!1}const Xa=sa.memo(function({agentId:o,terminalViewMode:u,onTerminalViewModeChange:b,inspectorOpen:y,onToggleInspector:M,onShowTaskBoard:A,onImageClick:k,onFileClick:J,onBashClick:w,onViewMarkdown:W,onRequestClearSubordinates:D,keyboard:pe,canNavigateBack:T,canNavigateForward:Ee,onNavigateBack:fe,onNavigateForward:he,agentInfoOpen:Ge,onToggleAgentInfo:bt,onHeaderContextMenu:be,onBuildingContextMenu:_e}){var At,ee;const p=cn(o),$=wn(),Me=ia(),Ie=s.useRef(null),Je=s.useRef(null),{displayedAgentId:Te,fadingOut:Pt}=la(o),_t=cn(Te),Ue=!!Me.interactiveMode&&((p==null?void 0:p.provider)??"claude")==="claude"&&!!(p!=null&&p.sessionId),[ne,Qe]=s.useState(!1),[we,ie]=s.useState(null),Le=s.useMemo(()=>{const n=Fa.map(r=>{const i=!ne&&u===r;return{id:`view-mode-${r}`,label:pn[r],icon:e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon",children:fn[r]}),shortcut:i?"✓":void 0,onClick:()=>{Qe(!1),b(r),ie(null)}}});return Ue&&n.push({id:"view-mode-classic-tui",label:"Classic TUI",icon:e.jsx(d,{name:"terminal",size:13}),shortcut:ne?"✓":void 0,onClick:()=>{Qe(r=>!r),ie(null)}}),n},[Ue,ne,u,b]),[ve,rt]=s.useState(!1),Q=s.useCallback(()=>rt(!1),[]);bn("flat-chat-actions",ve,Q),s.useEffect(()=>{const n=()=>rt(r=>!r);return window.addEventListener("tide:toggle-chat-actions",n),()=>window.removeEventListener("tide:toggle-chat-actions",n)},[]),s.useEffect(()=>{Qe(!1),rt(!1)},[o]),s.useEffect(()=>{!Ue&&ne&&Qe(!1)},[Ue,ne]),s.useEffect(()=>{const n=Je.current;if(!n)return;const r=m=>{m.button===3?(m.preventDefault(),m.stopPropagation(),fe()):m.button===4&&(m.preventDefault(),m.stopPropagation(),he())},i=m=>{(m.button===3||m.button===4)&&m.preventDefault()};return n.addEventListener("mouseup",r),n.addEventListener("mousedown",i),()=>{n.removeEventListener("mouseup",r),n.removeEventListener("mousedown",i)}},[fe,he]),s.useEffect(()=>{const n=Je.current;if(!n)return;let r=0,i=0,m=0;const O=250,Y=600,P=80,G=1.5,it=se=>{let U=se instanceof HTMLElement?se:null;for(;U&&U!==n;){const t=window.getComputedStyle(U).overflowX;if((t==="auto"||t==="scroll")&&U.scrollWidth>U.clientWidth)return!0;U=U.parentElement}return!1},St=se=>{const U=Date.now();if(U<m){se.preventDefault();return}if(Math.abs(se.deltaX)<=Math.abs(se.deltaY)*G){r=0;return}if(it(se.target)){r=0;return}U-i>O&&(r=0),i=U,r+=se.deltaX,r<=-P?(r=0,m=U+Y,se.preventDefault(),fe()):r>=P&&(r=0,m=U+Y,se.preventDefault(),he())};return n.addEventListener("wheel",St,{passive:!1}),()=>n.removeEventListener("wheel",St)},[fe,he]);const Pe=_n(),je=s.useMemo(()=>{if(!p)return null;const n=new Set,r=[];for(const i of Pe.values())i.archived||i.directories.length===0||i.assignedAgentIds.includes(o)&&(n.add(i.id),r.push(i));for(const i of Pe.values())i.archived||i.directories.length===0||n.has(i.id)||Ua({x:p.position.x,z:p.position.z},i)&&(n.add(i.id),r.push(i));return r.length===0?null:r.flatMap(i=>i.directories.filter(m=>m&&m.trim().length>0).map(m=>({areaId:i.id,areaName:i.name,dir:m})))},[p,o,Pe]),{branches:De,fetchRemote:Xe,fetchingDirs:le}=ra(je),Ce=s.useMemo(()=>{var i;const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const m of $.values())m.type==="terminal"&&g.isPositionInArea(m.position,n)&&r.push({id:m.id,name:m.name,hasUrl:!!((i=m.terminalStatus)!=null&&i.url)});return r},[o,$]),re=s.useMemo(()=>{var i;const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const m of $.values())m.type==="server"&&((i=m.pm2)!=null&&i.enabled)&&g.isPositionInArea(m.position,n)&&r.push({id:m.id,name:m.name});return r},[o,$]),oe=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())i.type==="database"&&i.database&&g.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,$]),wt=oa(),et=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())if(i.type==="tests"&&g.isPositionInArea(i.position,n)){const m=!!i.folderPath&&wt.some(O=>ca(O,i.folderPath));r.push({id:i.id,name:i.name,working:m})}return r},[o,$,wt]),Ve=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())i.type==="http"&&g.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,$]),[,tt]=s.useReducer(n=>n+1,0),ke=((At=Ie.current)==null?void 0:At.search.searchMode)??!1,vt=s.useCallback(()=>{var n;(n=Ie.current)==null||n.search.toggleSearch(),tt()},[]),Ne=da(),$e=Ne.isPending(Kt),[j,Re]=s.useState(null),H=j?$.get(j.buildingId):null,[jt,ze]=s.useState(""),[ot,Dt]=s.useState(()=>ua()),R=s.useMemo(()=>{var n;return((n=g.getAreaForAgent(o))==null?void 0:n.id)??null},[o,$]),qe=s.useCallback((n,r)=>{ze(""),Re(i=>{const m=(i==null?void 0:i.buildingId)===r?null:{type:n,buildingId:r};return R&&Zt(R,m),m})},[R]),ye=s.useCallback(()=>{ze(""),Re(null),R&&Zt(R,null)},[R]);s.useEffect(()=>{if((j==null?void 0:j.type)!=="pm2-logs")return;const n=j.buildingId;return g.startLogStreaming(n,200),()=>g.stopLogStreaming(n)},[j]);const{height:ct,onResizeStart:v}=ma(),{sidePanelWidth:$t,handleSidePanelResizeStart:Rt}=pa(),[q,ae]=s.useState(()=>Jt(S.GIT_PANEL_OPEN,!1)),[ce,dt]=s.useState(()=>Jt(S.BUILDINGS_PANEL_OPEN,!1)),[Oe,Ct]=s.useState(!1),kt=s.useCallback(()=>{Ct(n=>{const r=!n;return r&&fa.setEnabled(!0),r})},[]),zt=s.useCallback(()=>Ct(!1),[]),nt=s.useCallback(()=>{ae(n=>{const r=!n;return xe(S.GIT_PANEL_OPEN,r),r})},[]),Be=s.useCallback(()=>{dt(n=>{const r=!n;return xe(S.BUILDINGS_PANEL_OPEN,r),r})},[]),ut=s.useCallback(()=>{ae(!1),xe(S.GIT_PANEL_OPEN,!1)},[]),Fe=s.useCallback(()=>{dt(!1),xe(S.BUILDINGS_PANEL_OPEN,!1)},[]),Ot=ha(),z=s.useMemo(()=>({terminal:Ce,"pm2-logs":re,database:oe,tests:et,http:Ve}),[Ce,re,oe,et,Ve]);s.useEffect(()=>{if(!j)return;z[j.type].some(r=>r.id===j.buildingId)||(ze(""),Re(null))},[j,z]);const Ae=s.useRef(void 0);s.useEffect(()=>{var r;if(Ae.current===R)return;Ae.current=R;const n=R?An()[R]:void 0;ze(""),n&&((r=z[n.type])!=null&&r.some(i=>i.id===n.buildingId))?Re(n):Re(null)},[R,z]),s.useEffect(()=>{const n=r=>{var O;const i=r.detail;if(!(i!=null&&i.buildingId)||!(i!=null&&i.type)||!((O=z[i.type])!=null&&O.some(Y=>Y.id===i.buildingId)))return;i.handled=!0,ze("");const m={type:i.type,buildingId:i.buildingId};Re(m),R&&Zt(R,m)};return window.addEventListener("tide:dock-building-flat",n),()=>window.removeEventListener("tide:dock-building-flat",n)},[z,R]);const[Ye,We]=s.useState(!1),Ke=s.useRef(null);if(s.useEffect(()=>{if(!Ye)return;const n=r=>{Ke.current&&!Ke.current.contains(r.target)&&We(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[Ye]),!p)return e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-chat__placeholder",children:[e.jsx("span",{className:"flat-chat__placeholder-icon",children:"💬"}),e.jsx("span",{className:"flat-chat__placeholder-text",children:"Select an agent to start chatting"})]})});const at=!!p.contextStats,{totalTokens:Bt,contextWindow:Ft,usedPercent:He}=vn(p),de=Math.round(He*10)/10,mt=Math.round((100-He)*10)/10,pt=He>=80?"#ff4a4a":He>=60?"#ff9e4a":He>=40?"#ffd700":"#4aff9e",ft=(Bt/1e3).toFixed(1),st=(Ft/1e3).toFixed(1),ge=p.cwd,Nt=ge?Ha(ge):null,ue=((ee=p.subordinateIds)==null?void 0:ee.length)||0,yt=ue>0;return e.jsxs("div",{ref:Je,className:`flat-terminal-wrapper ${q||ce||Oe?"flat-terminal-wrapper--with-side-panel":""} ${Pt?"pane-fading-out":""}`,style:{"--guake-side-panel-width":`min(${$t}px, 70%)`},children:[e.jsxs("div",{className:"flat-terminal-wrapper__header",children:[e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__header-main ${Ge?"flat-terminal-wrapper__header-main--active":""}`,onClick:bt,onContextMenu:n=>{n.preventDefault(),n.stopPropagation(),be({x:n.clientX,y:n.clientY})},title:Ge?"Hide agent info":"Show agent info","aria-pressed":Ge,children:[e.jsx("span",{className:`flat-terminal-wrapper__header-avatar${p.status==="working"?" is-working":""}`,children:e.jsx(jn,{agent:p,size:28})}),e.jsxs("span",{className:"flat-terminal-wrapper__header-info",children:[e.jsx("span",{className:"flat-terminal-wrapper__header-name",children:p.name}),e.jsx("span",{className:"flat-terminal-wrapper__header-status",style:{color:Nn(p.status)},title:p.status==="error"&&p.lastError?p.lastError:void 0,children:p.status})]}),p.taskLabel&&e.jsxs("span",{className:"flat-terminal-wrapper__header-task",title:p.taskLabel,children:["📋 ",p.taskLabel]}),e.jsxs("span",{className:"flat-terminal-wrapper__header-model",children:[e.jsx("img",{src:kn(p.provider,"/"),alt:p.provider,className:"flat-terminal-wrapper__header-provider-icon",title:Cn(p.provider)}),(()=>{const{model:n,effort:r}=Ga(p);return e.jsxs("span",{className:"flat-terminal-wrapper__header-model-chip",title:r?`Model: ${n} · Effort: ${r}`:`Model: ${n}`,children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-name",children:n}),r&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-sep","aria-hidden":"true",children:"·"}),e.jsx("span",{className:"flat-terminal-wrapper__header-model-effort",children:r})]})]})})()]})]}),e.jsxs("div",{className:"flat-terminal-wrapper__header-meta",children:[e.jsx("div",{className:"flat-terminal-wrapper__view-mode",children:e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__view-mode-btn flat-terminal-wrapper__view-mode-trigger${we?" flat-terminal-wrapper__view-mode-trigger--open":""}`,onClick:n=>{const r=n.currentTarget.getBoundingClientRect();ie({x:r.left,y:r.bottom+4})},title:ne?"Classic TUI — attach to the live interactive claude session in a terminal":Wa[u],"aria-haspopup":"menu","aria-expanded":!!we,"aria-label":"Message view mode",children:[e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon","aria-hidden":"true",children:ne?e.jsx(d,{name:"terminal",size:13}):fn[u]}),e.jsx("span",{className:"flat-terminal-wrapper__view-mode-label",children:ne?"Classic TUI":pn[u]}),e.jsx(d,{name:"caret-down",size:9})]})}),e.jsxs("div",{className:"flat-terminal-wrapper__actions",role:"group","aria-label":"Terminal actions",children:[e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:fe,disabled:!T,title:"Back to previous agent","aria-label":"Back to previous agent",children:e.jsx(d,{name:"arrow-left",size:14})}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:he,disabled:!Ee,title:"Forward to next agent","aria-label":"Forward to next agent",children:e.jsx(d,{name:"arrow-right",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ke?"flat-terminal-wrapper__action-btn--active":""}`,onClick:vt,title:ke?"Close search":"Search messages","aria-pressed":ke,children:e.jsx(d,{name:ke?"cross":"search",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn flat-terminal-wrapper__action-btn--danger ${$e?"flat-terminal-wrapper__action-btn--confirm":""}`,onClick:()=>Ne.handleClick(Kt,()=>{var n;g.clearContext(o),(n=Ie.current)==null||n.historyLoader.clearHistory()}),title:$e?"Click again to confirm clear context":"Clear context",children:e.jsx(d,{name:$e?"question":"clear",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${q?"flat-terminal-wrapper__action-btn--active":""}`,onClick:nt,title:q?"Hide git panel":"Show git changes","aria-pressed":q,children:e.jsx(d,{name:"git-branch",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ce?"flat-terminal-wrapper__action-btn--active":""}`,onClick:Be,title:ce?"Hide buildings panel":"Show area buildings","aria-pressed":ce,children:e.jsx(d,{name:"buildings",size:14})}),e.jsxs("div",{className:"flat-terminal-wrapper__more",ref:Ke,children:[e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${Ye?"flat-terminal-wrapper__action-btn--active":""}`,onClick:()=>We(n=>!n),title:"More actions","aria-expanded":Ye,children:"⋮"}),Ye&&e.jsxs("div",{className:"flat-terminal-wrapper__more-menu",role:"menu",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-terminal-wrapper__more-item ${Oe?"flat-terminal-wrapper__more-item--active":""}`,onClick:()=>{kt(),We(!1)},title:Oe?"Hide Debug Panel":"Show Debug Panel",children:[e.jsx(d,{name:"bug",size:14}),e.jsx("span",{children:Oe?"Hide Debug Panel":"Show Debug Panel"})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item",onClick:()=>{g.collapseContext(o),We(!1)},disabled:p.status!=="idle",title:p.status!=="idle"?"Agent must be idle to collapse context":"Collapse context",children:[e.jsx(d,{name:"package",size:14}),e.jsx("span",{children:"Collapse context"})]}),yt&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{D(o,ue),We(!1)},children:[e.jsx(d,{name:"crown",size:14}),e.jsxs("span",{children:["Clear ",ue," subordinate",ue===1?"":"s"]})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{g.killAgent(o),We(!1)},children:[e.jsx(d,{name:"cross",size:14}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__inspector-toggle ${y?"flat-terminal-wrapper__inspector-toggle--active":""}`,onClick:M,title:y?"Hide inspector panel":"Show inspector panel","aria-label":y?"Hide inspector panel":"Show inspector panel","aria-pressed":y,children:[e.jsx("span",{className:"flat-terminal-wrapper__inspector-icon","aria-hidden":"true",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"1.5",y:"2.5",width:"13",height:"11",rx:"1.5"}),e.jsx("line",{x1:"10",y1:"2.5",x2:"10",y2:"13.5"})]})}),e.jsx("span",{className:"flat-terminal-wrapper__inspector-label",children:"Inspector"})]}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__close",onClick:()=>g.deselectAll(),title:"Close chat","aria-label":"Close chat",children:e.jsx(d,{name:"cross",size:14})})]})]}),ve&&e.jsxs("div",{className:"flat-chat-actions-sheet-root",role:"presentation",children:[e.jsx("div",{className:"flat-chat-actions-sheet__backdrop",onClick:Q}),e.jsxs("div",{className:"flat-chat-actions-sheet",role:"menu","aria-label":"Chat actions",children:[e.jsx("div",{className:"flat-chat-actions-sheet__grabber","aria-hidden":"true"}),e.jsxs("div",{className:"flat-chat-actions-sheet__title-row",children:[e.jsx("span",{className:"flat-chat-actions-sheet__title",children:p.name}),e.jsx("button",{type:"button",className:"flat-chat-actions-sheet__done",onClick:Q,children:"Done"})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__grid",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${ke?"is-active":""}`,onClick:()=>{vt(),Q()},children:[e.jsx(d,{name:ke?"cross":"search",size:20}),e.jsx("span",{children:ke?"Close search":"Search"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${q?"is-active":""}`,onClick:()=>{nt(),Q()},children:[e.jsx(d,{name:"git-branch",size:20}),e.jsx("span",{children:"Git changes"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${ce?"is-active":""}`,onClick:()=>{Be(),Q()},children:[e.jsx(d,{name:"buildings",size:20}),e.jsx("span",{children:"Buildings"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${Oe?"is-active":""}`,onClick:()=>{kt(),Q()},children:[e.jsx(d,{name:"bug",size:20}),e.jsx("span",{children:"Debug"})]})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__list",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger ${$e?"is-armed":""}`,onClick:()=>Ne.handleClick(Kt,()=>{var n;g.clearContext(o),(n=Ie.current)==null||n.historyLoader.clearHistory(),Q()}),children:[e.jsx(d,{name:$e?"question":"clear",size:18}),e.jsx("span",{children:$e?"Tap again to confirm clear":"Clear context"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row",disabled:p.status!=="idle",onClick:()=>{g.collapseContext(o),Q()},children:[e.jsx(d,{name:"package",size:18}),e.jsx("span",{children:"Collapse context"})]}),yt&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{D(o,ue),Q()},children:[e.jsx(d,{name:"crown",size:18}),e.jsxs("span",{children:["Clear ",ue," subordinate",ue===1?"":"s"]})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{g.killAgent(o),Q()},children:[e.jsx(d,{name:"cross",size:18}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsx(ga,{agent:p,onClick:A}),ne&&Ue?e.jsx(Da,{agentId:o}):Te&&_t?e.jsx(xa,{ref:Ie,agentId:Te,agent:_t,viewMode:u,isOpen:!0,onImageClick:k,onFileClick:J,onBashClick:w,onViewMarkdown:W,keyboard:pe,hasModalOpen:!1},Te):null,j&&H&&(()=>{var O,Y;const n=j.type,r={terminal:"terminal","pm2-logs":"scroll",database:"hard-drives",tests:"flask",http:"globe"},i=n==="terminal"&&!((O=H.terminalStatus)!=null&&O.url),m=!i;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"guake-bottom-terminal-resize",onMouseDown:v,role:"separator","aria-orientation":"horizontal","aria-label":"Resize embedded panel"}),e.jsxs("div",{className:"flat-bottom-panel",role:"region","aria-label":`${H.name} panel`,style:{height:ct},children:[e.jsxs("div",{className:"flat-bottom-panel__header",children:[e.jsxs("span",{className:"flat-bottom-panel__title",children:[e.jsx(d,{name:r[n],size:12}),e.jsx("span",{children:H.name}),i&&e.jsx("span",{className:"flat-bottom-panel__muted",children:"(starting...)"})]}),e.jsxs("span",{className:"flat-bottom-panel__header-actions",children:[n==="pm2-logs"&&e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",className:"guake-bottom-terminal-filter",value:jt,onChange:P=>ze(P.target.value),placeholder:"Filter logs","aria-label":`Filter logs for ${H.name}`,spellCheck:!1}),e.jsx("select",{className:"guake-bottom-terminal-retention",value:ot===null?"unlimited":String(ot),onChange:P=>{const G=P.target.value==="unlimited"?null:Number(P.target.value);Dt(G),_a(G)},"aria-label":`Max log retention for ${H.name}`,children:ba.map(P=>e.jsx("option",{value:P===null?"unlimited":String(P),children:P===null?"Unlimited":`${P.toLocaleString()} lines`},P===null?"unlimited":P))}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.clearStreamingLogs(j.buildingId),title:"Clear logs",children:e.jsx(d,{name:"trash",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.sendBuildingCommand(j.buildingId,"restart"),title:"Restart",children:e.jsx(d,{name:"restart",size:12})})]}),m&&e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>{ye(),lt(j.buildingId)},title:"Maximize — open as modal","aria-label":"Open as modal",children:e.jsx(d,{name:"fullscreen",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:ye,title:"Close panel","aria-label":"Close panel",children:e.jsx(d,{name:"cross",size:12})})]})]}),e.jsx("div",{className:"flat-bottom-panel__body",children:n==="terminal"?(Y=H.terminalStatus)!=null&&Y.url?e.jsx(xn,{terminalUrl:H.terminalStatus.url,visible:!0}):e.jsx("div",{className:"flat-bottom-panel__placeholder",children:"Starting terminal..."}):n==="pm2-logs"?e.jsx(wa,{buildingId:j.buildingId,filterText:jt,maxRetention:ot}):n==="database"?e.jsx(va,{building:H}):n==="tests"?e.jsx("div",{className:"tests-panel-host",children:e.jsx(ja,{building:H,autoFocusSearch:!1})}):e.jsx("div",{className:"http-requests-panel-host",children:e.jsx(Ca,{building:H,autoFocusSearch:!1})})})]})]})})(),e.jsxs("div",{className:"flat-terminal-wrapper__statusbar",role:"contentinfo",children:[p.isDetached&&e.jsxs("span",{className:"flat-terminal-wrapper__detached",title:"Reattaching session...",children:[e.jsx(d,{name:"refresh",size:12}),e.jsx("span",{children:"Reattaching"})]}),ge&&Nt&&e.jsxs("span",{className:"flat-terminal-wrapper__cwd",title:`Open in file explorer: ${ge}`,"aria-label":`Open ${ge} in file explorer`,role:"button",tabIndex:0,onClick:()=>g.openFileExplorer(ge),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),g.openFileExplorer(ge))},children:[e.jsx("span",{className:"flat-terminal-wrapper__cwd-icon",children:e.jsx(d,{name:"folder",size:12})}),e.jsx("span",{className:"flat-terminal-wrapper__cwd-text",children:Nt})]}),je&&je.map(({areaId:n,areaName:r,dir:i})=>{const m=De.get(i),O=le.has(i),Y=i.split("/").filter(Boolean).pop()||i;return e.jsxs("span",{className:"flat-terminal-wrapper__area-dir",title:`${r}: ${i}${m?` (${m.branch}${m.ahead?` ↑${m.ahead}`:""}${m.behind?` ↓${m.behind}`:""})`:""}`,onClick:()=>g.openFileExplorerForAreaFolder(n,i),children:[e.jsx(d,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-terminal-wrapper__area-dir-name",children:Y}),m&&e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"flat-terminal-wrapper__area-dir-branch",children:[e.jsx(d,{name:"git-branch",size:10})," ",m.branch]}),m.ahead>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-ahead",title:`${m.ahead} ahead`,children:[e.jsx(d,{name:"arrow-up",size:9}),m.ahead]}),m.behind>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-behind",title:`${m.behind} behind`,children:[e.jsx(d,{name:"arrow-down",size:9}),m.behind]}),e.jsx("span",{className:`flat-terminal-wrapper__area-fetch ${O?"flat-terminal-wrapper__area-fetch--fetching":""}`,title:"Git fetch",onClick:P=>{P.stopPropagation(),Xe(i)},children:e.jsx(d,{name:O?"hourglass":"download",size:12})})]})]},`${n}:${i}`)}),e.jsx(Oa,{agentId:o,disabled:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok",contextSummary:at?`Context: ${ft}k / ${st}k tokens (${de}% used)`:void 0,children:e.jsxs("span",{className:"flat-terminal-wrapper__context",tabIndex:0,role:"button",onClick:()=>g.setContextModalAgentId(o),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),g.setContextModalAgentId(o))},title:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok"?at?`Context usage: ${ft}k / ${st}k tokens (${de}% used). Click to view stats.`:"Click to fetch context stats":void 0,children:[e.jsx("span",{className:"flat-terminal-wrapper__context-bar",children:e.jsx("span",{className:"flat-terminal-wrapper__context-bar-fill",style:{width:`${He}%`,backgroundColor:pt}})}),e.jsxs("span",{className:"flat-terminal-wrapper__context-tokens",style:{color:pt},children:[ft,"k/",st,"k"]}),e.jsxs("span",{className:"flat-terminal-wrapper__context-free",children:["(",mt,"% free)"]}),!at&&e.jsx("span",{className:"flat-terminal-wrapper__context-warning",title:"No context stats yet",children:e.jsx(d,{name:"warn",size:12})})]})}),e.jsx("div",{className:"flat-terminal-wrapper__statusbar-spacer","aria-hidden":"true"}),Ce.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area terminals",children:Ce.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""} ${n.hasUrl?"":"flat-terminal-wrapper__building-btn--offline"}`,title:`${r?"Hide":"Show"} terminal: ${n.name}${n.hasUrl?"":" (starting...)"}`,onClick:()=>{if(r){ye();return}if(n.hasUrl&>(n.id)==="modal"){lt(n.id);return}n.hasUrl||g.sendBuildingCommand(n.id,"start"),qe("terminal",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"terminal",size:14})},n.id)})}),re.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area PM2 logs",children:re.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} logs: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("pm2-logs",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"scroll",size:14})},n.id)})}),oe.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area databases",children:oe.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} database: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("database",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"hard-drives",size:14})},n.id)})}),et.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area tests",children:et.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""} ${n.working?"flat-terminal-wrapper__building-btn--tests-working":""}`,title:n.working?`Running tests: ${n.name}`:`${r?"Hide":"Show"} tests: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("tests",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"flask",size:14})},n.id)})}),Ve.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area HTTP requests",children:Ve.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} HTTP requests: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("http",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"globe",size:14})},n.id)})}),e.jsx("div",{className:"flat-terminal-wrapper__theme",children:e.jsx(ka,{iconOnly:!0})})]}),q&&e.jsx(Na,{agentId:o,agents:Ot,onClose:ut,branchInfoMap:De,fetchRemote:Xe,fetchingDirs:le,onResizeStart:n=>Rt(n,"right")}),ce&&e.jsx(ya,{agentId:o,onClose:Fe}),Oe&&e.jsx(Aa,{agentId:o,onClose:zt}),e.jsx(Qt,{isOpen:we!==null,position:we??{x:0,y:0},worldPosition:{x:0,z:0},actions:Le,onClose:()=>ie(null)})]})}),Va={groups:[],gridCols:1,gridRows:1,positions:new Map};function Ja({onAgentClick:c,onBuildingClick:o,onBuildingDoubleClick:u,onBuildingPopup:b,onAreaContextMenu:y,onOpenSpawnModal:M,onOpenBossSpawnModal:A,onOpenAreaModal:k}){const{t:J}=en(["common"]),w=On(),W=Bn(),[D,pe]=s.useState(null),[T,Ee]=s.useState(null),[fe,he]=s.useState(null);bn("flatview-image-modal",D!==null,()=>pe(null));const[Ge,bt]=s.useState(null),[be,_e]=s.useState(null),[p,$]=s.useState(null),[Me,Ie]=s.useState(null),[Je,Te]=s.useState(!1),Pt=s.useCallback(()=>{Te(t=>!t)},[]),_t=s.useCallback(()=>{Te(!1)},[]),[Ue,ne]=s.useState(()=>{const t=Ut(S.VIEW_MODE);return t==="simple"||t==="chat"||t==="advanced"?t:"simple"}),Qe=s.useCallback(t=>{ne(t),Xt(S.VIEW_MODE,t)},[]);s.useEffect(()=>{const t=a=>{if(a.key!==S.VIEW_MODE)return;const l=a.newValue;(l==="simple"||l==="chat"||l==="advanced")&&ne(l)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const[we,ie]=s.useState(()=>Jt(S.FLAT_INSPECTOR_OPEN,!1)),[Le,ve]=s.useState(!1),rt=s.useCallback(()=>ve(t=>!t),[]),Q=s.useCallback(()=>ve(!1),[]);s.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-agents-drawer-state",{detail:{open:Le}}))},[Le]),s.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-inspector-state",{detail:{open:we}}))},[we]),s.useEffect(()=>{const t=()=>ve(N=>!N),a=()=>{ie(N=>{const I=!N;return xe(S.FLAT_INSPECTOR_OPEN,I),I})},l=()=>{ve(!1),ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)},x=()=>ve(!1),_=()=>{ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)};return window.addEventListener("tide-toggle-flat-agents-drawer",t),window.addEventListener("tide-toggle-flat-inspector",a),window.addEventListener("tide-close-flat-side-views",l),window.addEventListener("tide-close-flat-agents-drawer-only",x),window.addEventListener("tide-close-flat-inspector-only",_),()=>{window.removeEventListener("tide-toggle-flat-agents-drawer",t),window.removeEventListener("tide-toggle-flat-inspector",a),window.removeEventListener("tide-close-flat-side-views",l),window.removeEventListener("tide-close-flat-agents-drawer-only",x),window.removeEventListener("tide-close-flat-inspector-only",_)}},[]);const Pe=s.useRef(null),je=s.useRef(null),[De,Xe]=s.useState(()=>{const t=ln(S.FLAT_MIDDLE_WIDTH,0);return t>=Lt?t:null}),[le,Ce]=s.useState(()=>{const t=ln(S.FLAT_INSPECTOR_WIDTH,0);return t>=Yt?t:null}),re=s.useCallback(t=>{if(typeof window>"u")return t;const a=le!==null?Tt+le:0,l=window.innerWidth-mn-Tt-un-a;return Math.max(Lt,Math.min(Math.max(l,Lt),t))},[le]),oe=s.useCallback(t=>{var _;if(typeof window>"u")return t;const a=(_=Pe.current)==null?void 0:_.querySelector(".flat-middle"),l=(a==null?void 0:a.getBoundingClientRect().width)??Lt,x=window.innerWidth-mn-l-Tt-un-Tt;return Math.max(Yt,Math.min(Math.max(x,Yt),t))},[]);s.useEffect(()=>{if(De===null&&le===null)return;const t=()=>{Xe(a=>{if(a===null)return a;const l=re(a);return l===a?a:l}),Ce(a=>{if(a===null)return a;const l=oe(a);return l===a?a:l})};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[De,le,re,oe]);const wt=s.useCallback(t=>{var l;if(t.button!==0)return;const a=(l=Pe.current)==null?void 0:l.querySelector(".flat-middle");a&&(t.currentTarget.setPointerCapture(t.pointerId),je.current={kind:"middle",startX:t.clientX,startWidth:a.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),et=s.useCallback(t=>{var l;if(t.button!==0)return;const a=(l=Pe.current)==null?void 0:l.querySelector(".flat-inspector");a&&(t.currentTarget.setPointerCapture(t.pointerId),je.current={kind:"inspector",startX:t.clientX,startWidth:a.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),Ve=s.useCallback(t=>{const a=je.current;if(!a||t.pointerId!==a.pointerId)return;const l=t.clientX-a.startX;a.kind==="middle"?Xe(re(a.startWidth+l)):Ce(oe(a.startWidth-l))},[re,oe]),tt=s.useCallback(t=>{const a=je.current;if(!a||t.pointerId!==a.pointerId)return;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}if(je.current=null,document.body.classList.remove("flat-splitter-dragging"),!(Math.abs(t.clientX-a.startX)>2))return;const x=t.clientX-a.startX;if(a.kind==="middle"){const _=re(a.startWidth+x);Xe(_),It(S.FLAT_MIDDLE_WIDTH,_)}else{const _=oe(a.startWidth-x);Ce(_),It(S.FLAT_INSPECTOR_WIDTH,_)}},[re,oe]),ke=s.useCallback(()=>{Xe(null),It(S.FLAT_MIDDLE_WIDTH,0)},[]),vt=s.useCallback(()=>{Ce(null),It(S.FLAT_INSPECTOR_WIDTH,0)},[]),[Ne,$e]=s.useState(()=>Ut(S.FLAT_INSPECTOR_VIEW)==="tracking"?"tracking":"agent"),j=s.useCallback(t=>{$e(t),Xt(S.FLAT_INSPECTOR_VIEW,t)},[]),Re=s.useCallback(()=>{ie(t=>{const a=!t;return xe(S.FLAT_INSPECTOR_OPEN,a),a})},[]),H=s.useCallback(()=>{ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)},[]),jt=s.useCallback(()=>{j("tracking"),ie(!0),xe(S.FLAT_INSPECTOR_OPEN,!0)},[j]),ze=Fn(),ot=s.useCallback((t,a)=>{pe({url:t,name:a})},[]),Dt=s.useCallback((t,a)=>{Ee({command:t,output:a,isLive:!1})},[]),R=s.useCallback((t,a)=>{var _;const l=W.size>0?Array.from(W)[0]:null,x=l?(_=g.getState().agents.get(l))==null?void 0:_.cwd:void 0;g.setFileViewerPath(t,a,x)},[W]),qe=s.useCallback(t=>{he(t)},[]),ye=s.useCallback((t,a)=>{bt({agentId:t,count:a})},[]),ct=s.useCallback(t=>{u?u(t):o(t)},[o,u]),v=s.useMemo(()=>W.size>0?Array.from(W)[0]:null,[W]),$t=s.useCallback(t=>{v&&_e({agentId:v,position:t})},[v]),Rt=s.useCallback((t,a)=>{$({buildingId:t,position:a})},[]);s.useEffect(()=>{Te(!1)},[v]);const q=s.useRef([]),ae=s.useRef(-1),ce=s.useRef(!1),dt=s.useRef(Ut(S.LAST_OPENED_AGENT,"")||null),[Oe,Ct]=s.useState(!1),[kt,zt]=s.useState(!1),nt=s.useRef(!1),Be=s.useRef(null),ut=s.useRef(!1),Fe=s.useMemo(()=>new Set(w.map(t=>t.id)),[w]),Ot=s.useMemo(()=>{const t=new Map(w.map(l=>[l.id,l])),a=new Map;for(const l of w)if((l.isBoss||l.class==="boss")&&l.subordinateIds&&l.subordinateIds.length>0){const x=l.subordinateIds.map(_=>t.get(_)).filter(_=>_!==void 0);x.length>0&&a.set(l.id,x)}return a},[w]),z=s.useCallback(()=>{const t=q.current,a=ae.current;Ct(a>0),zt(a>=0&&a<t.length-1)},[]),Ae=s.useCallback(t=>{const a=q.current;if(a.length===0)return;let l=ae.current+t;for(;l>=0&&l<a.length;){const x=a[l];if(Fe.has(x)){ce.current=!0,ae.current=l,z(),g.selectAgent(x);return}l+=t}},[Fe,z]),Ye=s.useCallback(()=>Ae(-1),[Ae]),We=s.useCallback(()=>Ae(1),[Ae]);Ta(s.useCallback(()=>{const t=q.current,a=ae.current;return t.length>0&&a>0?(Ae(-1),"handled"):"exit"},[Ae]));const Ke=s.useCallback((t,a)=>{if(typeof window>"u")return;const l=window.history.state,_={...typeof l=="object"&&l!==null?l:{},__flatAgentNav:{agentId:t}};a==="replace"?window.history.replaceState(_,"",window.location.href):window.history.pushState(_,"",window.location.href)},[]);s.useEffect(()=>{if(!v){nt.current=!1,Be.current=null;return}if(!nt.current){Ke(v,"replace"),nt.current=!0,Be.current=v;return}if(ut.current){ut.current=!1,Be.current=v;return}Be.current!==v&&(Ke(v,"push"),Be.current=v)},[v,Ke]),s.useEffect(()=>{const t=a=>{var N,I;const l=(I=(N=a.state)==null?void 0:N.__flatAgentNav)==null?void 0:I.agentId;if(!l||typeof l!="string"||!Fe.has(l)||l===v)return;ut.current=!0,ce.current=!0;const x=q.current,_=x.lastIndexOf(l);_>=0?ae.current=_:(x.push(l),ae.current=x.length-1),z(),g.selectAgent(l)};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[Fe,v,z]),s.useEffect(()=>{if(!v){q.current=[],ae.current=-1,z();return}if(dt.current=v,Xt(S.LAST_OPENED_AGENT,v),ce.current){ce.current=!1,z();return}const t=q.current,a=ae.current;if(a>=0&&t[a]===v){z();return}const l=a<t.length-1?t.slice(0,a+1):t.slice();l.push(v),l.length>100&&l.shift(),q.current=l,ae.current=l.length-1,z()},[v,z]);const at=s.useCallback(t=>{c(t),ve(!1)},[c]),Bt=v??"",Ft=s.useCallback(()=>{},[]),He=s.useCallback(t=>{at(t)},[at]),de=we,[mt,pt]=s.useState(de),[ft,st]=s.useState(de);s.useEffect(()=>{if(de){pt(!0);return}st(!1);const t=setTimeout(()=>pt(!1),240);return()=>clearTimeout(t)},[de]),s.useEffect(()=>{if(!mt||!de)return;let t=0;const a=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>st(!0))});return()=>{cancelAnimationFrame(a),cancelAnimationFrame(t)}},[mt,de]);const ge=s.useRef(null);s.useEffect(()=>{if(v)return;const t=a=>{if(a.key!==" "&&a.key!=="Backspace")return;const l=a.target;if(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable)return;const x=dt.current;!x||!Fe.has(x)||(a.preventDefault(),g.selectAgent(x))};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[v,Fe]);const[Nt,ue]=s.useState(new Set),yt=s.useCallback(t=>{ue(a=>{const l=new Set(a);return l.has(t)?l.delete(t):l.add(t),l})},[]),At=s.useCallback(t=>{ue(new Set(t))},[]),[ee,n]=s.useState(()=>typeof window<"u"&&window.matchMedia("(max-width: 768px)").matches);s.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(max-width: 768px)"),a=l=>n(l.matches);return t.addEventListener("change",a),()=>t.removeEventListener("change",a)},[]);const[r,i]=s.useState(null),m=s.useCallback(t=>{i(a=>a===t?null:t)},[]),O=_n(),Y=wn(),[P]=Wn(),G=s.useMemo(()=>{if(v)return Va;const t=new Map,a=[];for(const h of w){const C=g.getAreaForAgent(h.id);if(!rn((C==null?void 0:C.id)??null))continue;if(!C||C.archived){a.push(h);continue}const L=t.get(C.id);L?L.push(h):t.set(C.id,[h])}const l=new Map,x=[];for(const h of Y.values()){let C=!1;for(const L of O.values())if(!L.archived&&on(L.id)&&g.isPositionInArea(h.position,L)){const me=l.get(L.id);me?me.push(h):l.set(L.id,[h]),C=!0;break}!C&&rn(null)&&x.push(h)}const _=[];for(const[,h]of O){if(h.archived||!on(h.id))continue;const C=t.get(h.id),L=l.get(h.id)??[];(C&&C.length>0||L.length>0)&&_.push({area:h,agents:C??[],buildings:L})}(a.length>0||x.length>0)&&_.push({area:{id:"__unassigned__",name:"Unassigned",color:"#6272a4",center:{x:0,z:0},type:"circle",radius:0,directories:[],archived:!1,assignedAgentIds:[],zIndex:0},agents:a,buildings:x});const N=_.filter(h=>h.area.id!=="__unassigned__"),I=_.filter(h=>h.area.id==="__unassigned__");let X=1,B=1;const f=new Map;if(N.length>1){let h=1/0,C=-1/0,L=1/0,me=-1/0;for(const K of N)h=Math.min(h,K.area.center.x),C=Math.max(C,K.area.center.x),L=Math.min(L,K.area.center.z),me=Math.max(me,K.area.center.z);const Se=C-h||1,Et=me-L||1;if(N.length<=4){X=N.length,B=1;const K=[...N].sort((Z,Wt)=>Z.area.center.x-Wt.area.center.x);for(let Z=0;Z<K.length;Z++)f.set(K[Z].area.id,{row:1,col:Z+1})}else{const K=[...N].sort((E,F)=>E.area.center.x-F.area.center.x),Z=[];for(let E=1;E<K.length;E++)Z.push(K[E].area.center.x-K[E-1].area.center.x);const Wt=Z.reduce((E,F)=>E+F,0)/Z.length||1;let tn=1;for(const E of Z)E>Wt*1.3&&tn++;X=Math.max(2,Math.min(tn,N.length));const Ht=[...N].sort((E,F)=>E.area.center.z-F.area.center.z),Mt=[];for(let E=1;E<Ht.length;E++)Mt.push(Ht[E].area.center.z-Ht[E-1].area.center.z);const Sn=Mt.reduce((E,F)=>E+F,0)/Mt.length||1;let nn=1;for(const E of Mt)E>Sn*1.3&&nn++;B=Math.max(2,Math.min(nn,N.length)),X=Math.max(X,Math.ceil(N.length/B)),B=Math.max(B,Math.ceil(N.length/X));const En=Se/X,Mn=Et/B,Gt=new Set;for(const E of N){let F=Math.min(X-1,Math.max(0,Math.floor((E.area.center.x-h)/En))),Ze=Math.min(B-1,Math.max(0,Math.floor((E.area.center.z-L)/Mn))),ht=`${Ze},${F}`,an=0;const In=B*X;for(;Gt.has(ht)&&an<In;)F++,F>=X&&(F=0,Ze=(Ze+1)%B),ht=`${Ze},${F}`,an++;Gt.has(ht)&&(Ze=B,F=0,ht=`${Ze},${F}`,B++),Gt.add(ht),f.set(E.area.id,{row:Ze+1,col:F+1})}}}const te=h=>{h.sort((C,L)=>{var Se,Et,K,Z;const me=(((Se=C.position)==null?void 0:Se.z)??0)-(((Et=L.position)==null?void 0:Et.z)??0);return me!==0?me:(((K=C.position)==null?void 0:K.x)??0)-(((Z=L.position)==null?void 0:Z.x)??0)})};for(const h of N)te(h.agents);for(const h of I)te(h.agents);const V=[...N,...I].sort((h,C)=>h.area.name.localeCompare(C.area.name,void 0,{sensitivity:"base",numeric:!0})||h.area.id.localeCompare(C.area.id));return f.clear(),V.forEach((h,C)=>{f.set(h.area.id,{row:Math.floor(C/X)+1,col:C%X+1})}),B=Math.max(1,Math.ceil(V.length/X)),{groups:V,gridCols:X,gridRows:B,positions:f}},[w,O,Y,P,v]),it=s.useMemo(()=>{let t=0,a=0;for(const l of G.groups)t+=l.agents.length,a+=l.agents.filter(x=>x.status==="working").length;return{areaCount:G.groups.length,agentCount:t,workingCount:a}},[G]),St=s.useMemo(()=>{if(!be)return[];const t=w.find(a=>a.id===be.agentId);return t?[{id:"edit-agent",label:"Edit Agent",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:open-agent-edit",{detail:{agentId:t.id}}))}},{id:"open-chat",label:"Open Chat",icon:e.jsx(d,{name:"chat",size:14}),onClick:()=>c(t.id)},{id:"clone-agent",label:"Clone Agent",icon:e.jsx(d,{name:"clipboard",size:14}),onClick:()=>g.cloneAgent(t.id)},{id:"fork-agent",label:"Fork Agent (with history)",icon:e.jsx(d,{name:"git-branch",size:14}),onClick:()=>g.forkAgent(t.id)},{id:"delete-agent",label:"Delete Agent",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>{Ie({agentId:t.id,name:t.name})}}]:[]},[be,w,c]),se=s.useMemo(()=>{var N;if(!p)return[];const t=Y.get(p.buildingId);if(!t)return[];const a=[],l=t.type==="server"||t.type==="docker"||t.type==="terminal",x=t.status==="running",_=t.type==="boss";if(a.push({id:"open",label:t.type==="database"?"Open Database":t.type==="folder"?"Open Folder":t.type==="tests"?"Open Tests":t.type==="http"?"Open Requests":t.type==="boss"?"View Boss Logs":t.type==="terminal"?"Open Terminal":t.type==="server"&&((N=t.pm2)!=null&&N.enabled)?"View PM2 Logs":"Open",icon:e.jsx(d,{name:t.type==="database"?"database":t.type==="folder"?"folder":t.type==="tests"?"flask":t.type==="http"?"globe":t.type==="terminal"?"terminal":"eye",size:14}),onClick:()=>ct(t.id)}),l&&(x||a.push({id:"start",label:"Start",icon:e.jsx(d,{name:"play",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"start")}),x&&(a.push({id:"restart",label:"Restart",icon:e.jsx(d,{name:"refresh",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"restart")}),a.push({id:"stop",label:"Stop",icon:e.jsx(d,{name:"stop",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"stop")}))),_&&t.subordinateBuildingIds&&t.subordinateBuildingIds.length>0&&(a.push({id:"start-all",label:"Start All Subordinates",icon:e.jsx(d,{name:"launch",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"start")}}),a.push({id:"stop-all",label:"Stop All Subordinates",icon:e.jsx(d,{name:"pause",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"stop")}}),a.push({id:"restart-all",label:"Restart All Subordinates",icon:e.jsx(d,{name:"restart",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"restart")}})),l&&a.push({id:"health-check",label:"Health Check",icon:e.jsx(d,{name:"health",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"healthCheck")}),a.push({id:"divider-edit",label:"",divider:!0,onClick:()=>{}}),a.push({id:"edit",label:"Edit Building",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:building-edit",{detail:{buildingId:t.id}}))}}),a.push({id:"clone",label:"Clone Building",icon:e.jsx(d,{name:"copy",size:14}),onClick:()=>{g.createBuilding({name:`${t.name} (Copy)`,type:t.type,style:t.style,color:t.color,scale:t.scale,position:{x:t.position.x+2,z:t.position.z+2},cwd:t.cwd,folderPath:t.folderPath,commands:t.commands,pm2:t.pm2,docker:t.docker,database:t.database,terminal:t.terminal,urls:t.urls,subordinateBuildingIds:t.subordinateBuildingIds})}}),t.urls&&t.urls.length>0)for(const I of t.urls)a.push({id:`url-${I.label}`,label:I.label,icon:e.jsx(d,{name:"link",size:14}),onClick:()=>window.open(I.url,"_blank","noopener,noreferrer")});return a.push({id:"divider-danger",label:"",divider:!0,onClick:()=>{}}),a.push({id:"delete",label:"Delete Building",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>g.deleteBuilding(t.id)}),a},[p,Y,ct]),U=s.useCallback(t=>{ue(new Set([t])),requestAnimationFrame(()=>{const a=ge.current;if(!a)return;const l=a.querySelector(`[data-area-id="${t}"]`);if(!l)return;const x=a.getBoundingClientRect(),N=l.getBoundingClientRect().top-x.top+a.scrollTop-8;a.scrollTo({top:Math.max(0,N),behavior:"smooth"})})},[]);return e.jsxs("div",{ref:Pe,className:`flat-view ${de?"flat-view--with-inspector":""} ${v?"flat-view--has-chat":""} ${Le?"flat-view--mobile-sidebar-open":""}`,style:(()=>{if(De===null&&le===null)return;const t={};return De!==null&&(t["--flat-middle-width"]=`${De}px`),le!==null&&(t["--flat-inspector-width"]=`${le}px`),t})(),children:[Le&&e.jsx("div",{className:"flat-mobile-sidebar-backdrop",onClick:Q,"aria-hidden":"true"}),e.jsxs("div",{className:"flat-middle",children:[e.jsx("div",{className:"flat-middle__header",children:e.jsxs("div",{className:"flat-middle__actions",children:[e.jsx("button",{className:"flat-cta-btn flat-cta-btn--agent",onClick:M,title:"Create new agent",children:"+ Agent"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--boss",onClick:A,title:"Create new boss agent",children:"+ Boss"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--area",onClick:k,title:"Create new area",children:"+ Area"})]})}),e.jsx("div",{className:"flat-middle__content",children:e.jsx(Hn,{activeAgentId:Bt,onClose:Ft,onSelectAgent:He,expandedAreas:Nt,onToggleArea:yt,onSetExpandedAreas:At,agentListRef:ge})})]}),e.jsx("div",{className:"flat-splitter flat-splitter--middle",role:"separator","aria-orientation":"vertical","aria-label":"Resize agents panel",title:"Drag to resize · Double-click to reset",onPointerDown:wt,onPointerMove:Ve,onPointerUp:tt,onPointerCancel:tt,onDoubleClick:ke}),e.jsxs("div",{className:"flat-right",children:[e.jsxs("button",{type:"button",className:"flat-mobile-sidebar-toggle","aria-label":Le?"Close agents sidebar":"Open agents sidebar","aria-expanded":Le,onClick:rt,children:[e.jsx(d,{name:"list",size:18}),e.jsx("span",{className:"flat-mobile-sidebar-toggle__label",children:"Agents"})]}),v?e.jsx(Xa,{agentId:v,terminalViewMode:Ue,onTerminalViewModeChange:Qe,inspectorOpen:we,onToggleInspector:Re,onShowTaskBoard:jt,onImageClick:ot,onFileClick:R,onBashClick:Dt,onViewMarkdown:qe,onRequestClearSubordinates:ye,keyboard:ze,canNavigateBack:Oe,canNavigateForward:kt,onNavigateBack:Ye,onNavigateForward:We,agentInfoOpen:Je,onToggleAgentInfo:Pt,onHeaderContextMenu:$t,onBuildingContextMenu:Rt}):e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-map",children:[e.jsxs("div",{className:"flat-map__header",children:[e.jsx("span",{className:"flat-map__title",children:"🗺️ Areas"}),e.jsx("span",{className:"flat-map__hint",children:"Click an area to focus it, or an agent to chat"}),e.jsxs("span",{className:"flat-map__stats",children:[e.jsxs("span",{children:[it.areaCount," areas"]}),e.jsxs("span",{children:[it.agentCount," agents"]}),it.workingCount>0&&e.jsxs("span",{className:"flat-map__stats-working",children:[e.jsx("span",{className:"flat-map__stats-dot","aria-hidden":"true"}),it.workingCount," working"]})]}),e.jsx(Ba,{className:"flat-map__view-mode"})]}),e.jsx("div",{className:"flat-map__grid",style:{gridTemplateColumns:ee?"repeat(2, minmax(0, 1fr))":`repeat(${G.gridCols}, 1fr)`},children:G.groups.length===0?e.jsx("div",{className:"flat-map__empty",children:e.jsx("span",{children:"No areas or agents yet"})}):(ee?[...G.groups].sort((a,l)=>{const x=G.positions.get(a.area.id),_=G.positions.get(l.area.id);return!x&&!_?0:x?_?x.row-_.row||x.col-_.col:-1:1}):G.groups).map(a=>{var B;const l=a.area.id,x=G.positions.get(l),_=a.agents.filter(f=>f.status==="working").length,N=_>0,I=ee&&r!==l,X=ee&&!I;return e.jsxs("div",{className:`flat-map-area-card${N?" flat-map-area-card--working":""}${I?" flat-map-area-card--collapsed":""}${X?" flat-map-area-card--expanded":""}`,style:{"--area-color":a.area.color,gridRow:ee||x==null?void 0:x.row,gridColumn:ee||x==null?void 0:x.col},onContextMenu:f=>{y&&(f.preventDefault(),f.stopPropagation(),y(l,{x:f.clientX,y:f.clientY}))},children:[e.jsxs("button",{type:"button",className:"flat-map-area-card__header",onClick:()=>ee?m(l):U(l),title:ee?I?`Expand ${a.area.name}`:`Collapse ${a.area.name}`:`Focus ${a.area.name} in left panel`,"aria-expanded":ee?!I:void 0,children:[e.jsx("span",{className:"flat-map-area-card__color",style:{background:a.area.color}}),((B=a.area.logo)==null?void 0:B.filename)&&e.jsx("img",{className:"flat-map-area-card__logo",src:Ia(a.area.logo.filename),alt:"","aria-hidden":"true",onError:f=>{f.currentTarget.style.display="none"}}),e.jsx("span",{className:"flat-map-area-card__name",children:a.area.name}),e.jsxs("span",{className:"flat-map-area-card__count",title:`${a.agents.length} agent${a.agents.length===1?"":"s"}`,"aria-label":`${a.agents.length} agent${a.agents.length===1?"":"s"}`,children:[e.jsx(d,{name:"users",size:10}),a.agents.length]}),N&&e.jsxs("span",{className:"flat-map-area-card__working",title:`${_} working agent${_===1?"":"s"}`,"aria-label":`${_} working agent${_===1?"":"s"}`,children:[e.jsxs("span",{className:"flat-map-area-card__working-bars","aria-hidden":"true",children:[e.jsx("i",{}),e.jsx("i",{}),e.jsx("i",{})]}),e.jsx("span",{className:"flat-map-area-card__working-count",children:_})]}),ee&&e.jsx(d,{name:I?"caret-down":"caret-up",size:11,className:"flat-map-area-card__caret"})]}),e.jsx("div",{className:"flat-map-area-card__agents",children:a.agents.map(f=>{const te=f.isBoss||f.class==="boss",V=te?Ot.get(f.id):void 0,h=vn(f),C=h.usedPercent>=80?"#ff4a4a":h.usedPercent>=60?"#ff9e4a":h.usedPercent>=40?"#ffd700":"#4aff9e",L=`Context: ${(h.totalTokens/1e3).toFixed(1)}k / ${(h.contextWindow/1e3).toFixed(1)}k (${h.usedPercent}% used, ${h.freePercent}% free)`,me=f.latestTodos&&f.latestTodos.length>0||V&&V.length>0;return e.jsx(Gn,{todos:f.latestTodos,subordinates:V,position:"top",children:e.jsxs("button",{type:"button",className:`flat-map-agent-chip ${f.status}`,onClick:()=>c(f.id),onContextMenu:Se=>{Se.preventDefault(),Se.stopPropagation(),_e({agentId:f.id,position:{x:Se.clientX,y:Se.clientY}})},title:me?void 0:`${te?"Boss · ":""}Open chat with ${f.name}
|
|
1
|
+
import{r as s,aV as Tn,aW as sn,N as hn,aX as gn,j as e,aY as xn,aZ as Ln,u as en,a_ as Pn,a$ as Dn,b0 as $n,b1 as Rn,b2 as zn,au as On,ai as Bn,aB as bn,m as Ut,S,y as Xt,b3 as Jt,b4 as ln,b5 as It,b6 as xe,b7 as Fn,s as g,a0 as _n,f as wn,b8 as Wn,b9 as rn,ba as on,I as d,bb as Hn,aE as vn,bc as Gn,n as jn,bd as Cn,be as kn,bf as Nn,bg as Un,bh as Xn,bi as Vn,ah as qn,bj as Yn,bk as Kn,bl as Zn,aH as Jn,aI as Qn,aJ as ea,bm as ta,bn as na,bo as Qt,Z as aa,U as sa,K as cn,bp as ia,bq as la,br as ra,bs as oa,bt as ca,bu as da,bv as ua,bw as ma,bx as pa,by as fa,z as ha,bz as ga,bA as xa,bB as ba,bC as _a,bD as lt,bE as wa,bF as va,bG as ja,bH as Ca,bI as gt,bJ as ka,bK as Na,bL as ya,bM as Aa,p as Sa,D as Ea,t as Vt,o as Ma}from"./main-BHmBlXv1.js";import{g as Ia}from"./area-logos-B-JGhGzv.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-CBPuP1jE.js";function Ta(c){const o=s.useRef(c);o.current=c,s.useEffect(()=>{if(!Tn())return;let u=null,b=!1;return sn.addListener("backButton",()=>{o.current()==="exit"&&sn.exitApp()}).then(y=>{b?y.remove():u=y}),()=>{b=!0,u&&(u.remove(),u=null)}},[])}async function La(c){const o=hn(),u=await fetch(`${gn()}/api/agents/${c}/terminal`,{method:"POST",headers:{Authorization:`Bearer ${o}`}});if(!u.ok){const b=await u.json().catch(()=>({}));throw new Error((b==null?void 0:b.error)||`Failed to start terminal (${u.status})`)}return u.json()}async function Pa(c){const o=hn();await fetch(`${gn()}/api/agents/${c}/terminal`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}})}const xt=new Map;function Da({agentId:c}){const[o,u]=s.useState(null),[b,y]=s.useState(null);return s.useEffect(()=>{let M=!1;const A=xt.get(c);return A&&(clearTimeout(A),xt.delete(c)),u(null),y(null),La(c).then(k=>{M||u(k.url)}).catch(k=>{M||y(k instanceof Error?k.message:"Failed to start terminal")}),()=>{M=!0;const k=xt.get(c);k&&clearTimeout(k),xt.set(c,setTimeout(()=>{xt.delete(c),Pa(c)},2500))}},[c]),b?e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:b})}):o?e.jsx("div",{className:"flat-classic-terminal",children:e.jsx(xn,{terminalUrl:o,visible:!0})}):e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:"Attaching to interactive session…"})})}const qt=new Map,$a=6e4;function dn(c){return Number.isFinite(c)?Math.abs(c)>=1e3?c.toLocaleString(void 0,{maximumFractionDigits:0}):c.toLocaleString(void 0,{maximumFractionDigits:2}):String(c)}function Ra(c,o){var y,M,A;const u=[];if(!c.rateLimits)return u;if(c.provider==="claude"){const k=c,J=[{key:"fiveHour",label:o("terminal:usage.currentSession"),window:k.rateLimits.fiveHour},{key:"sevenDay",label:o("terminal:usage.currentWeekAll"),window:k.rateLimits.sevenDay},{key:"sevenDayOpus",label:o("terminal:usage.currentWeekOpus"),window:k.rateLimits.sevenDayOpus},{key:"sevenDayFable",label:o("terminal:usage.currentWeekFable"),window:k.rateLimits.sevenDayFable}];for(const w of J)(w.window||w.key==="sevenDayFable")&&u.push(w);return u}const b=c;return(y=b.rateLimits)!=null&&y.weekly&&u.push({key:"weekly",label:o("terminal:usage.weeklyLimit"),window:b.rateLimits.weekly}),(M=b.rateLimits)!=null&&M.monthly&&u.push({key:"monthly",label:o("terminal:usage.monthlyLimit"),window:b.rateLimits.monthly}),(A=b.rateLimits)!=null&&A.onDemand&&u.push({key:"onDemand",label:o("terminal:usage.onDemandLimit"),window:b.rateLimits.onDemand}),u}function za({agentId:c,contextSummary:o}){const{t:u}=en(["terminal","common"]),[b,y]=s.useState(()=>{var D;return((D=qt.get(c))==null?void 0:D.snapshot)??null}),[M,A]=s.useState(!1),[k,J]=s.useState(null),w=s.useRef(0);s.useEffect(()=>{const D=qt.get(c);if(D&&Date.now()-D.fetchedAt<$a){y(D.snapshot);return}const pe=++w.current;A(!0),J(null),Pn(c).then(T=>{pe===w.current&&(qt.set(c,{snapshot:T,fetchedAt:Date.now()}),y(T),A(!1))}).catch(T=>{pe===w.current&&(J(T.message||"Failed to load plan limits"),A(!1))})},[c]);const W=b?Ra(b,u):[];return e.jsxs("div",{className:"plan-limits-tooltip",children:[o&&e.jsx("div",{className:"plan-limits-tooltip__context",children:o}),e.jsx("div",{className:"plan-limits-tooltip__title",children:u("terminal:usage.limits")}),M&&!b&&e.jsxs("div",{className:"plan-limits-tooltip__muted",children:[u("common:status.loading"),"…"]}),!M&&k&&!b&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:u("terminal:usage.limitsError",{message:k})}),W.length>0?e.jsx("div",{className:"plan-limits-tooltip__gauges",children:W.map(({key:D,label:pe,window:T})=>{const Ee=T?Math.max(0,Math.min(100,T.utilization)):0,fe=$n(Ee),he=T!=null&&typeof T.used=="number"&&typeof T.limit=="number"&&Number.isFinite(T.used)&&Number.isFinite(T.limit);return e.jsxs("div",{className:"plan-limits-tooltip__gauge",children:[e.jsxs("div",{className:"plan-limits-tooltip__gauge-head",children:[e.jsx("span",{className:"plan-limits-tooltip__gauge-label",children:pe}),e.jsx("span",{className:"plan-limits-tooltip__gauge-percent",style:{color:fe},children:u("terminal:usage.percentUsed",{percent:Math.round(Ee)})})]}),e.jsx("div",{className:"plan-limits-tooltip__bar",children:e.jsx("div",{className:"plan-limits-tooltip__bar-fill",style:{width:`${Ee}%`,background:fe}})}),e.jsxs("div",{className:"plan-limits-tooltip__reset",children:[T&&u("terminal:usage.resets",{time:Dn(T.resetsAt)}),he&&e.jsx("span",{style:{marginLeft:8},children:u("terminal:usage.creditsUsed",{used:dn(T.used),limit:dn(T.limit)})})]})]},D)})}):b&&!M&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:b.rateLimitsError?u("terminal:usage.limitsError",{message:b.rateLimitsError}):b.cliHint})]})}function Oa({agentId:c,disabled:o,contextSummary:u,children:b}){return e.jsx(Ln,{position:"top",maxWidth:320,disabled:o,className:"plan-limits-tooltip-wrapper",triggerStyle:{display:"inline-flex",alignItems:"center"},content:e.jsx(za,{agentId:c,contextSummary:u}),children:b})}const Ba=s.memo(function({className:o=""}){const{t:u}=en(["common"]),[b,y]=Rn(),M=s.useRef(null),[A,k]=s.useState(null);s.useLayoutEffect(()=>{const w=M.current;if(!w)return;const W=w.querySelector(".view-mode-toggle__btn--active");W&&k({left:W.offsetLeft,width:W.offsetWidth})},[b]);const J=s.useCallback(w=>{if(w!==b){if(typeof window<"u"&&window.dispatchEvent(new CustomEvent("tide:viewmode-switch-pressed",{detail:{mode:w}})),w==="3d"){requestAnimationFrame(()=>y(w));return}y(w)}},[b,y]);return e.jsxs("div",{className:`view-mode-toggle ${o}`,ref:M,children:[A&&e.jsx("div",{className:"view-mode-toggle__indicator",style:{left:A.left,width:A.width}}),zn.map(w=>e.jsxs("button",{className:`view-mode-toggle__btn ${b===w?"view-mode-toggle__btn--active":""}`,onClick:()=>J(w),title:u(`common:viewMode.descriptions.${w}`),children:[e.jsxs("span",{className:"view-mode-toggle__icon",children:[w==="2d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),e.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),e.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]}),w==="3d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),e.jsx("path",{d:"M2 17l10 5 10-5"}),e.jsx("path",{d:"M2 12l10 5 10-5"})]}),w==="flat"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"3",y:"13",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"13",width:"8",height:"8",rx:"1"})]}),w==="dashboard"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),e.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]})]}),e.jsx("span",{className:"view-mode-toggle__label",children:u(`common:viewMode.labels.${w}`)})]},w))]})}),Tt=3,Lt=280,un=320,Yt=240,mn=64,Fa=["simple","chat","advanced"],pn={simple:"Simple",chat:"Chat",advanced:"Advanced"},fn={simple:"○",chat:"◐",advanced:"◉"},Wa={simple:"Simple view — clean messages only",chat:"Chat view — assistant replies (no tool calls)",advanced:"Advanced view — everything including tools"},Kt="flat-clear-context",yn="tide:flat-embedded-panels";function An(){try{const c=localStorage.getItem(yn),o=c?JSON.parse(c):{};return o&&typeof o=="object"?o:{}}catch{return{}}}function Zt(c,o){try{const u=An();o?u[c]=o:delete u[c],localStorage.setItem(yn,JSON.stringify(u))}catch{}}function Ha(c){const o=c.split("/").filter(Boolean);return o.length===0?c:o.slice(-2).join("/")}function Ga(c){if(c.provider==="codex"){const M=c.codexModel||"gpt-5.6-luna",A=Sa[M];return{model:(A==null?void 0:A.label)||M}}if(c.provider==="opencode")return{model:c.opencodeModel||"opencode"};if(c.provider==="grok"){const M=c.grokModel||Ea,A=c.effort,k=A?Vt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}if(c.provider==="pi"){const M=c.piModel||"pi default",A=c.effort,k=A?Vt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}const o=c.model||c.detectedModel||"default",u=Ma[o],b=c.effort,y=b?Vt[b]:void 0;return{model:(u==null?void 0:u.label)||o,effort:y==null?void 0:y.label}}function Ua(c,o){if(o.type==="rectangle"&&o.width&&o.height){const u=o.width/2,b=o.height/2;return c.x>=o.center.x-u&&c.x<=o.center.x+u&&c.z>=o.center.z-b&&c.z<=o.center.z+b}if(o.type==="circle"&&o.radius){const u=c.x-o.center.x,b=c.z-o.center.z;return u*u+b*b<=o.radius*o.radius}return!1}const Xa=sa.memo(function({agentId:o,terminalViewMode:u,onTerminalViewModeChange:b,inspectorOpen:y,onToggleInspector:M,onShowTaskBoard:A,onImageClick:k,onFileClick:J,onBashClick:w,onViewMarkdown:W,onRequestClearSubordinates:D,keyboard:pe,canNavigateBack:T,canNavigateForward:Ee,onNavigateBack:fe,onNavigateForward:he,agentInfoOpen:Ge,onToggleAgentInfo:bt,onHeaderContextMenu:be,onBuildingContextMenu:_e}){var At,ee;const p=cn(o),$=wn(),Me=ia(),Ie=s.useRef(null),Je=s.useRef(null),{displayedAgentId:Te,fadingOut:Pt}=la(o),_t=cn(Te),Ue=!!Me.interactiveMode&&((p==null?void 0:p.provider)??"claude")==="claude"&&!!(p!=null&&p.sessionId),[ne,Qe]=s.useState(!1),[we,ie]=s.useState(null),Le=s.useMemo(()=>{const n=Fa.map(r=>{const i=!ne&&u===r;return{id:`view-mode-${r}`,label:pn[r],icon:e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon",children:fn[r]}),shortcut:i?"✓":void 0,onClick:()=>{Qe(!1),b(r),ie(null)}}});return Ue&&n.push({id:"view-mode-classic-tui",label:"Classic TUI",icon:e.jsx(d,{name:"terminal",size:13}),shortcut:ne?"✓":void 0,onClick:()=>{Qe(r=>!r),ie(null)}}),n},[Ue,ne,u,b]),[ve,rt]=s.useState(!1),Q=s.useCallback(()=>rt(!1),[]);bn("flat-chat-actions",ve,Q),s.useEffect(()=>{const n=()=>rt(r=>!r);return window.addEventListener("tide:toggle-chat-actions",n),()=>window.removeEventListener("tide:toggle-chat-actions",n)},[]),s.useEffect(()=>{Qe(!1),rt(!1)},[o]),s.useEffect(()=>{!Ue&&ne&&Qe(!1)},[Ue,ne]),s.useEffect(()=>{const n=Je.current;if(!n)return;const r=m=>{m.button===3?(m.preventDefault(),m.stopPropagation(),fe()):m.button===4&&(m.preventDefault(),m.stopPropagation(),he())},i=m=>{(m.button===3||m.button===4)&&m.preventDefault()};return n.addEventListener("mouseup",r),n.addEventListener("mousedown",i),()=>{n.removeEventListener("mouseup",r),n.removeEventListener("mousedown",i)}},[fe,he]),s.useEffect(()=>{const n=Je.current;if(!n)return;let r=0,i=0,m=0;const O=250,Y=600,P=80,G=1.5,it=se=>{let U=se instanceof HTMLElement?se:null;for(;U&&U!==n;){const t=window.getComputedStyle(U).overflowX;if((t==="auto"||t==="scroll")&&U.scrollWidth>U.clientWidth)return!0;U=U.parentElement}return!1},St=se=>{const U=Date.now();if(U<m){se.preventDefault();return}if(Math.abs(se.deltaX)<=Math.abs(se.deltaY)*G){r=0;return}if(it(se.target)){r=0;return}U-i>O&&(r=0),i=U,r+=se.deltaX,r<=-P?(r=0,m=U+Y,se.preventDefault(),fe()):r>=P&&(r=0,m=U+Y,se.preventDefault(),he())};return n.addEventListener("wheel",St,{passive:!1}),()=>n.removeEventListener("wheel",St)},[fe,he]);const Pe=_n(),je=s.useMemo(()=>{if(!p)return null;const n=new Set,r=[];for(const i of Pe.values())i.archived||i.directories.length===0||i.assignedAgentIds.includes(o)&&(n.add(i.id),r.push(i));for(const i of Pe.values())i.archived||i.directories.length===0||n.has(i.id)||Ua({x:p.position.x,z:p.position.z},i)&&(n.add(i.id),r.push(i));return r.length===0?null:r.flatMap(i=>i.directories.filter(m=>m&&m.trim().length>0).map(m=>({areaId:i.id,areaName:i.name,dir:m})))},[p,o,Pe]),{branches:De,fetchRemote:Xe,fetchingDirs:le}=ra(je),Ce=s.useMemo(()=>{var i;const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const m of $.values())m.type==="terminal"&&g.isPositionInArea(m.position,n)&&r.push({id:m.id,name:m.name,hasUrl:!!((i=m.terminalStatus)!=null&&i.url)});return r},[o,$]),re=s.useMemo(()=>{var i;const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const m of $.values())m.type==="server"&&((i=m.pm2)!=null&&i.enabled)&&g.isPositionInArea(m.position,n)&&r.push({id:m.id,name:m.name});return r},[o,$]),oe=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())i.type==="database"&&i.database&&g.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,$]),wt=oa(),et=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())if(i.type==="tests"&&g.isPositionInArea(i.position,n)){const m=!!i.folderPath&&wt.some(O=>ca(O,i.folderPath));r.push({id:i.id,name:i.name,working:m})}return r},[o,$,wt]),Ve=s.useMemo(()=>{const n=g.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of $.values())i.type==="http"&&g.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,$]),[,tt]=s.useReducer(n=>n+1,0),ke=((At=Ie.current)==null?void 0:At.search.searchMode)??!1,vt=s.useCallback(()=>{var n;(n=Ie.current)==null||n.search.toggleSearch(),tt()},[]),Ne=da(),$e=Ne.isPending(Kt),[j,Re]=s.useState(null),H=j?$.get(j.buildingId):null,[jt,ze]=s.useState(""),[ot,Dt]=s.useState(()=>ua()),R=s.useMemo(()=>{var n;return((n=g.getAreaForAgent(o))==null?void 0:n.id)??null},[o,$]),qe=s.useCallback((n,r)=>{ze(""),Re(i=>{const m=(i==null?void 0:i.buildingId)===r?null:{type:n,buildingId:r};return R&&Zt(R,m),m})},[R]),ye=s.useCallback(()=>{ze(""),Re(null),R&&Zt(R,null)},[R]);s.useEffect(()=>{if((j==null?void 0:j.type)!=="pm2-logs")return;const n=j.buildingId;return g.startLogStreaming(n,200),()=>g.stopLogStreaming(n)},[j]);const{height:ct,onResizeStart:v}=ma(),{sidePanelWidth:$t,handleSidePanelResizeStart:Rt}=pa(),[q,ae]=s.useState(()=>Jt(S.GIT_PANEL_OPEN,!1)),[ce,dt]=s.useState(()=>Jt(S.BUILDINGS_PANEL_OPEN,!1)),[Oe,Ct]=s.useState(!1),kt=s.useCallback(()=>{Ct(n=>{const r=!n;return r&&fa.setEnabled(!0),r})},[]),zt=s.useCallback(()=>Ct(!1),[]),nt=s.useCallback(()=>{ae(n=>{const r=!n;return xe(S.GIT_PANEL_OPEN,r),r})},[]),Be=s.useCallback(()=>{dt(n=>{const r=!n;return xe(S.BUILDINGS_PANEL_OPEN,r),r})},[]),ut=s.useCallback(()=>{ae(!1),xe(S.GIT_PANEL_OPEN,!1)},[]),Fe=s.useCallback(()=>{dt(!1),xe(S.BUILDINGS_PANEL_OPEN,!1)},[]),Ot=ha(),z=s.useMemo(()=>({terminal:Ce,"pm2-logs":re,database:oe,tests:et,http:Ve}),[Ce,re,oe,et,Ve]);s.useEffect(()=>{if(!j)return;z[j.type].some(r=>r.id===j.buildingId)||(ze(""),Re(null))},[j,z]);const Ae=s.useRef(void 0);s.useEffect(()=>{var r;if(Ae.current===R)return;Ae.current=R;const n=R?An()[R]:void 0;ze(""),n&&((r=z[n.type])!=null&&r.some(i=>i.id===n.buildingId))?Re(n):Re(null)},[R,z]),s.useEffect(()=>{const n=r=>{var O;const i=r.detail;if(!(i!=null&&i.buildingId)||!(i!=null&&i.type)||!((O=z[i.type])!=null&&O.some(Y=>Y.id===i.buildingId)))return;i.handled=!0,ze("");const m={type:i.type,buildingId:i.buildingId};Re(m),R&&Zt(R,m)};return window.addEventListener("tide:dock-building-flat",n),()=>window.removeEventListener("tide:dock-building-flat",n)},[z,R]);const[Ye,We]=s.useState(!1),Ke=s.useRef(null);if(s.useEffect(()=>{if(!Ye)return;const n=r=>{Ke.current&&!Ke.current.contains(r.target)&&We(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[Ye]),!p)return e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-chat__placeholder",children:[e.jsx("span",{className:"flat-chat__placeholder-icon",children:"💬"}),e.jsx("span",{className:"flat-chat__placeholder-text",children:"Select an agent to start chatting"})]})});const at=!!p.contextStats,{totalTokens:Bt,contextWindow:Ft,usedPercent:He}=vn(p),de=Math.round(He*10)/10,mt=Math.round((100-He)*10)/10,pt=He>=80?"#ff4a4a":He>=60?"#ff9e4a":He>=40?"#ffd700":"#4aff9e",ft=(Bt/1e3).toFixed(1),st=(Ft/1e3).toFixed(1),ge=p.cwd,Nt=ge?Ha(ge):null,ue=((ee=p.subordinateIds)==null?void 0:ee.length)||0,yt=ue>0;return e.jsxs("div",{ref:Je,className:`flat-terminal-wrapper ${q||ce||Oe?"flat-terminal-wrapper--with-side-panel":""} ${Pt?"pane-fading-out":""}`,style:{"--guake-side-panel-width":`min(${$t}px, 70%)`},children:[e.jsxs("div",{className:"flat-terminal-wrapper__header",children:[e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__header-main ${Ge?"flat-terminal-wrapper__header-main--active":""}`,onClick:bt,onContextMenu:n=>{n.preventDefault(),n.stopPropagation(),be({x:n.clientX,y:n.clientY})},title:Ge?"Hide agent info":"Show agent info","aria-pressed":Ge,children:[e.jsx("span",{className:`flat-terminal-wrapper__header-avatar${p.status==="working"?" is-working":""}`,children:e.jsx(jn,{agent:p,size:28})}),e.jsxs("span",{className:"flat-terminal-wrapper__header-info",children:[e.jsx("span",{className:"flat-terminal-wrapper__header-name",children:p.name}),e.jsx("span",{className:"flat-terminal-wrapper__header-status",style:{color:Nn(p.status)},title:p.status==="error"&&p.lastError?p.lastError:void 0,children:p.status})]}),p.taskLabel&&e.jsxs("span",{className:"flat-terminal-wrapper__header-task",title:p.taskLabel,children:["📋 ",p.taskLabel]}),e.jsxs("span",{className:"flat-terminal-wrapper__header-model",children:[e.jsx("img",{src:kn(p.provider,"/"),alt:p.provider,className:"flat-terminal-wrapper__header-provider-icon",title:Cn(p.provider)}),(()=>{const{model:n,effort:r}=Ga(p);return e.jsxs("span",{className:"flat-terminal-wrapper__header-model-chip",title:r?`Model: ${n} · Effort: ${r}`:`Model: ${n}`,children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-name",children:n}),r&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-sep","aria-hidden":"true",children:"·"}),e.jsx("span",{className:"flat-terminal-wrapper__header-model-effort",children:r})]})]})})()]})]}),e.jsxs("div",{className:"flat-terminal-wrapper__header-meta",children:[e.jsx("div",{className:"flat-terminal-wrapper__view-mode",children:e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__view-mode-btn flat-terminal-wrapper__view-mode-trigger${we?" flat-terminal-wrapper__view-mode-trigger--open":""}`,onClick:n=>{const r=n.currentTarget.getBoundingClientRect();ie({x:r.left,y:r.bottom+4})},title:ne?"Classic TUI — attach to the live interactive claude session in a terminal":Wa[u],"aria-haspopup":"menu","aria-expanded":!!we,"aria-label":"Message view mode",children:[e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon","aria-hidden":"true",children:ne?e.jsx(d,{name:"terminal",size:13}):fn[u]}),e.jsx("span",{className:"flat-terminal-wrapper__view-mode-label",children:ne?"Classic TUI":pn[u]}),e.jsx(d,{name:"caret-down",size:9})]})}),e.jsxs("div",{className:"flat-terminal-wrapper__actions",role:"group","aria-label":"Terminal actions",children:[e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:fe,disabled:!T,title:"Back to previous agent","aria-label":"Back to previous agent",children:e.jsx(d,{name:"arrow-left",size:14})}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:he,disabled:!Ee,title:"Forward to next agent","aria-label":"Forward to next agent",children:e.jsx(d,{name:"arrow-right",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ke?"flat-terminal-wrapper__action-btn--active":""}`,onClick:vt,title:ke?"Close search":"Search messages","aria-pressed":ke,children:e.jsx(d,{name:ke?"cross":"search",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn flat-terminal-wrapper__action-btn--danger ${$e?"flat-terminal-wrapper__action-btn--confirm":""}`,onClick:()=>Ne.handleClick(Kt,()=>{var n;g.clearContext(o),(n=Ie.current)==null||n.historyLoader.clearHistory()}),title:$e?"Click again to confirm clear context":"Clear context",children:e.jsx(d,{name:$e?"question":"clear",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${q?"flat-terminal-wrapper__action-btn--active":""}`,onClick:nt,title:q?"Hide git panel":"Show git changes","aria-pressed":q,children:e.jsx(d,{name:"git-branch",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ce?"flat-terminal-wrapper__action-btn--active":""}`,onClick:Be,title:ce?"Hide buildings panel":"Show area buildings","aria-pressed":ce,children:e.jsx(d,{name:"buildings",size:14})}),e.jsxs("div",{className:"flat-terminal-wrapper__more",ref:Ke,children:[e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${Ye?"flat-terminal-wrapper__action-btn--active":""}`,onClick:()=>We(n=>!n),title:"More actions","aria-expanded":Ye,children:"⋮"}),Ye&&e.jsxs("div",{className:"flat-terminal-wrapper__more-menu",role:"menu",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-terminal-wrapper__more-item ${Oe?"flat-terminal-wrapper__more-item--active":""}`,onClick:()=>{kt(),We(!1)},title:Oe?"Hide Debug Panel":"Show Debug Panel",children:[e.jsx(d,{name:"bug",size:14}),e.jsx("span",{children:Oe?"Hide Debug Panel":"Show Debug Panel"})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item",onClick:()=>{g.collapseContext(o),We(!1)},disabled:p.status!=="idle",title:p.status!=="idle"?"Agent must be idle to collapse context":"Collapse context",children:[e.jsx(d,{name:"package",size:14}),e.jsx("span",{children:"Collapse context"})]}),yt&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{D(o,ue),We(!1)},children:[e.jsx(d,{name:"crown",size:14}),e.jsxs("span",{children:["Clear ",ue," subordinate",ue===1?"":"s"]})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{g.killAgent(o),We(!1)},children:[e.jsx(d,{name:"cross",size:14}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__inspector-toggle ${y?"flat-terminal-wrapper__inspector-toggle--active":""}`,onClick:M,title:y?"Hide inspector panel":"Show inspector panel","aria-label":y?"Hide inspector panel":"Show inspector panel","aria-pressed":y,children:[e.jsx("span",{className:"flat-terminal-wrapper__inspector-icon","aria-hidden":"true",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"1.5",y:"2.5",width:"13",height:"11",rx:"1.5"}),e.jsx("line",{x1:"10",y1:"2.5",x2:"10",y2:"13.5"})]})}),e.jsx("span",{className:"flat-terminal-wrapper__inspector-label",children:"Inspector"})]}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__close",onClick:()=>g.deselectAll(),title:"Close chat","aria-label":"Close chat",children:e.jsx(d,{name:"cross",size:14})})]})]}),ve&&e.jsxs("div",{className:"flat-chat-actions-sheet-root",role:"presentation",children:[e.jsx("div",{className:"flat-chat-actions-sheet__backdrop",onClick:Q}),e.jsxs("div",{className:"flat-chat-actions-sheet",role:"menu","aria-label":"Chat actions",children:[e.jsx("div",{className:"flat-chat-actions-sheet__grabber","aria-hidden":"true"}),e.jsxs("div",{className:"flat-chat-actions-sheet__title-row",children:[e.jsx("span",{className:"flat-chat-actions-sheet__title",children:p.name}),e.jsx("button",{type:"button",className:"flat-chat-actions-sheet__done",onClick:Q,children:"Done"})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__grid",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${ke?"is-active":""}`,onClick:()=>{vt(),Q()},children:[e.jsx(d,{name:ke?"cross":"search",size:20}),e.jsx("span",{children:ke?"Close search":"Search"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${q?"is-active":""}`,onClick:()=>{nt(),Q()},children:[e.jsx(d,{name:"git-branch",size:20}),e.jsx("span",{children:"Git changes"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${ce?"is-active":""}`,onClick:()=>{Be(),Q()},children:[e.jsx(d,{name:"buildings",size:20}),e.jsx("span",{children:"Buildings"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${Oe?"is-active":""}`,onClick:()=>{kt(),Q()},children:[e.jsx(d,{name:"bug",size:20}),e.jsx("span",{children:"Debug"})]})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__list",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger ${$e?"is-armed":""}`,onClick:()=>Ne.handleClick(Kt,()=>{var n;g.clearContext(o),(n=Ie.current)==null||n.historyLoader.clearHistory(),Q()}),children:[e.jsx(d,{name:$e?"question":"clear",size:18}),e.jsx("span",{children:$e?"Tap again to confirm clear":"Clear context"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row",disabled:p.status!=="idle",onClick:()=>{g.collapseContext(o),Q()},children:[e.jsx(d,{name:"package",size:18}),e.jsx("span",{children:"Collapse context"})]}),yt&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{D(o,ue),Q()},children:[e.jsx(d,{name:"crown",size:18}),e.jsxs("span",{children:["Clear ",ue," subordinate",ue===1?"":"s"]})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{g.killAgent(o),Q()},children:[e.jsx(d,{name:"cross",size:18}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsx(ga,{agent:p,onClick:A}),ne&&Ue?e.jsx(Da,{agentId:o}):Te&&_t?e.jsx(xa,{ref:Ie,agentId:Te,agent:_t,viewMode:u,isOpen:!0,onImageClick:k,onFileClick:J,onBashClick:w,onViewMarkdown:W,keyboard:pe,hasModalOpen:!1},Te):null,j&&H&&(()=>{var O,Y;const n=j.type,r={terminal:"terminal","pm2-logs":"scroll",database:"hard-drives",tests:"flask",http:"globe"},i=n==="terminal"&&!((O=H.terminalStatus)!=null&&O.url),m=!i;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"guake-bottom-terminal-resize",onMouseDown:v,role:"separator","aria-orientation":"horizontal","aria-label":"Resize embedded panel"}),e.jsxs("div",{className:"flat-bottom-panel",role:"region","aria-label":`${H.name} panel`,style:{height:ct},children:[e.jsxs("div",{className:"flat-bottom-panel__header",children:[e.jsxs("span",{className:"flat-bottom-panel__title",children:[e.jsx(d,{name:r[n],size:12}),e.jsx("span",{children:H.name}),i&&e.jsx("span",{className:"flat-bottom-panel__muted",children:"(starting...)"})]}),e.jsxs("span",{className:"flat-bottom-panel__header-actions",children:[n==="pm2-logs"&&e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",className:"guake-bottom-terminal-filter",value:jt,onChange:P=>ze(P.target.value),placeholder:"Filter logs","aria-label":`Filter logs for ${H.name}`,spellCheck:!1}),e.jsx("select",{className:"guake-bottom-terminal-retention",value:ot===null?"unlimited":String(ot),onChange:P=>{const G=P.target.value==="unlimited"?null:Number(P.target.value);Dt(G),_a(G)},"aria-label":`Max log retention for ${H.name}`,children:ba.map(P=>e.jsx("option",{value:P===null?"unlimited":String(P),children:P===null?"Unlimited":`${P.toLocaleString()} lines`},P===null?"unlimited":P))}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.clearStreamingLogs(j.buildingId),title:"Clear logs",children:e.jsx(d,{name:"trash",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.sendBuildingCommand(j.buildingId,"restart"),title:"Restart",children:e.jsx(d,{name:"restart",size:12})})]}),m&&e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>{ye(),lt(j.buildingId)},title:"Maximize — open as modal","aria-label":"Open as modal",children:e.jsx(d,{name:"fullscreen",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:ye,title:"Close panel","aria-label":"Close panel",children:e.jsx(d,{name:"cross",size:12})})]})]}),e.jsx("div",{className:"flat-bottom-panel__body",children:n==="terminal"?(Y=H.terminalStatus)!=null&&Y.url?e.jsx(xn,{terminalUrl:H.terminalStatus.url,visible:!0}):e.jsx("div",{className:"flat-bottom-panel__placeholder",children:"Starting terminal..."}):n==="pm2-logs"?e.jsx(wa,{buildingId:j.buildingId,filterText:jt,maxRetention:ot}):n==="database"?e.jsx(va,{building:H}):n==="tests"?e.jsx("div",{className:"tests-panel-host",children:e.jsx(ja,{building:H,autoFocusSearch:!1})}):e.jsx("div",{className:"http-requests-panel-host",children:e.jsx(Ca,{building:H,autoFocusSearch:!1})})})]})]})})(),e.jsxs("div",{className:"flat-terminal-wrapper__statusbar",role:"contentinfo",children:[p.isDetached&&e.jsxs("span",{className:"flat-terminal-wrapper__detached",title:"Reattaching session...",children:[e.jsx(d,{name:"refresh",size:12}),e.jsx("span",{children:"Reattaching"})]}),ge&&Nt&&e.jsxs("span",{className:"flat-terminal-wrapper__cwd",title:`Open in file explorer: ${ge}`,"aria-label":`Open ${ge} in file explorer`,role:"button",tabIndex:0,onClick:()=>g.openFileExplorer(ge),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),g.openFileExplorer(ge))},children:[e.jsx("span",{className:"flat-terminal-wrapper__cwd-icon",children:e.jsx(d,{name:"folder",size:12})}),e.jsx("span",{className:"flat-terminal-wrapper__cwd-text",children:Nt})]}),je&&je.map(({areaId:n,areaName:r,dir:i})=>{const m=De.get(i),O=le.has(i),Y=i.split("/").filter(Boolean).pop()||i;return e.jsxs("span",{className:"flat-terminal-wrapper__area-dir",title:`${r}: ${i}${m?` (${m.branch}${m.ahead?` ↑${m.ahead}`:""}${m.behind?` ↓${m.behind}`:""})`:""}`,onClick:()=>g.openFileExplorerForAreaFolder(n,i),children:[e.jsx(d,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-terminal-wrapper__area-dir-name",children:Y}),m&&e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"flat-terminal-wrapper__area-dir-branch",children:[e.jsx(d,{name:"git-branch",size:10})," ",m.branch]}),m.ahead>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-ahead",title:`${m.ahead} ahead`,children:[e.jsx(d,{name:"arrow-up",size:9}),m.ahead]}),m.behind>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-behind",title:`${m.behind} behind`,children:[e.jsx(d,{name:"arrow-down",size:9}),m.behind]}),e.jsx("span",{className:`flat-terminal-wrapper__area-fetch ${O?"flat-terminal-wrapper__area-fetch--fetching":""}`,title:"Git fetch",onClick:P=>{P.stopPropagation(),Xe(i)},children:e.jsx(d,{name:O?"hourglass":"download",size:12})})]})]},`${n}:${i}`)}),e.jsx(Oa,{agentId:o,disabled:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok",contextSummary:at?`Context: ${ft}k / ${st}k tokens (${de}% used)`:void 0,children:e.jsxs("span",{className:"flat-terminal-wrapper__context",tabIndex:0,role:"button",onClick:()=>g.setContextModalAgentId(o),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),g.setContextModalAgentId(o))},title:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok"?at?`Context usage: ${ft}k / ${st}k tokens (${de}% used). Click to view stats.`:"Click to fetch context stats":void 0,children:[e.jsx("span",{className:"flat-terminal-wrapper__context-bar",children:e.jsx("span",{className:"flat-terminal-wrapper__context-bar-fill",style:{width:`${He}%`,backgroundColor:pt}})}),e.jsxs("span",{className:"flat-terminal-wrapper__context-tokens",style:{color:pt},children:[ft,"k/",st,"k"]}),e.jsxs("span",{className:"flat-terminal-wrapper__context-free",children:["(",mt,"% free)"]}),!at&&e.jsx("span",{className:"flat-terminal-wrapper__context-warning",title:"No context stats yet",children:e.jsx(d,{name:"warn",size:12})})]})}),e.jsx("div",{className:"flat-terminal-wrapper__statusbar-spacer","aria-hidden":"true"}),Ce.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area terminals",children:Ce.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""} ${n.hasUrl?"":"flat-terminal-wrapper__building-btn--offline"}`,title:`${r?"Hide":"Show"} terminal: ${n.name}${n.hasUrl?"":" (starting...)"}`,onClick:()=>{if(r){ye();return}if(n.hasUrl&>(n.id)==="modal"){lt(n.id);return}n.hasUrl||g.sendBuildingCommand(n.id,"start"),qe("terminal",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"terminal",size:14})},n.id)})}),re.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area PM2 logs",children:re.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} logs: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("pm2-logs",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"scroll",size:14})},n.id)})}),oe.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area databases",children:oe.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} database: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("database",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"hard-drives",size:14})},n.id)})}),et.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area tests",children:et.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""} ${n.working?"flat-terminal-wrapper__building-btn--tests-working":""}`,title:n.working?`Running tests: ${n.name}`:`${r?"Hide":"Show"} tests: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("tests",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"flask",size:14})},n.id)})}),Ve.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area HTTP requests",children:Ve.map(n=>{const r=(j==null?void 0:j.buildingId)===n.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${r?"flat-terminal-wrapper__building-btn--active":""}`,title:`${r?"Hide":"Show"} HTTP requests: ${n.name}`,onClick:()=>{r?ye():gt(n.id)==="modal"?lt(n.id):qe("http",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),_e(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"globe",size:14})},n.id)})}),e.jsx("div",{className:"flat-terminal-wrapper__theme",children:e.jsx(ka,{iconOnly:!0})})]}),q&&e.jsx(Na,{agentId:o,agents:Ot,onClose:ut,branchInfoMap:De,fetchRemote:Xe,fetchingDirs:le,onResizeStart:n=>Rt(n,"right")}),ce&&e.jsx(ya,{agentId:o,onClose:Fe}),Oe&&e.jsx(Aa,{agentId:o,onClose:zt}),e.jsx(Qt,{isOpen:we!==null,position:we??{x:0,y:0},worldPosition:{x:0,z:0},actions:Le,onClose:()=>ie(null)})]})}),Va={groups:[],gridCols:1,gridRows:1,positions:new Map};function Ja({onAgentClick:c,onBuildingClick:o,onBuildingDoubleClick:u,onBuildingPopup:b,onAreaContextMenu:y,onOpenSpawnModal:M,onOpenBossSpawnModal:A,onOpenAreaModal:k}){const{t:J}=en(["common"]),w=On(),W=Bn(),[D,pe]=s.useState(null),[T,Ee]=s.useState(null),[fe,he]=s.useState(null);bn("flatview-image-modal",D!==null,()=>pe(null));const[Ge,bt]=s.useState(null),[be,_e]=s.useState(null),[p,$]=s.useState(null),[Me,Ie]=s.useState(null),[Je,Te]=s.useState(!1),Pt=s.useCallback(()=>{Te(t=>!t)},[]),_t=s.useCallback(()=>{Te(!1)},[]),[Ue,ne]=s.useState(()=>{const t=Ut(S.VIEW_MODE);return t==="simple"||t==="chat"||t==="advanced"?t:"simple"}),Qe=s.useCallback(t=>{ne(t),Xt(S.VIEW_MODE,t)},[]);s.useEffect(()=>{const t=a=>{if(a.key!==S.VIEW_MODE)return;const l=a.newValue;(l==="simple"||l==="chat"||l==="advanced")&&ne(l)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const[we,ie]=s.useState(()=>Jt(S.FLAT_INSPECTOR_OPEN,!1)),[Le,ve]=s.useState(!1),rt=s.useCallback(()=>ve(t=>!t),[]),Q=s.useCallback(()=>ve(!1),[]);s.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-agents-drawer-state",{detail:{open:Le}}))},[Le]),s.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-inspector-state",{detail:{open:we}}))},[we]),s.useEffect(()=>{const t=()=>ve(N=>!N),a=()=>{ie(N=>{const I=!N;return xe(S.FLAT_INSPECTOR_OPEN,I),I})},l=()=>{ve(!1),ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)},x=()=>ve(!1),_=()=>{ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)};return window.addEventListener("tide-toggle-flat-agents-drawer",t),window.addEventListener("tide-toggle-flat-inspector",a),window.addEventListener("tide-close-flat-side-views",l),window.addEventListener("tide-close-flat-agents-drawer-only",x),window.addEventListener("tide-close-flat-inspector-only",_),()=>{window.removeEventListener("tide-toggle-flat-agents-drawer",t),window.removeEventListener("tide-toggle-flat-inspector",a),window.removeEventListener("tide-close-flat-side-views",l),window.removeEventListener("tide-close-flat-agents-drawer-only",x),window.removeEventListener("tide-close-flat-inspector-only",_)}},[]);const Pe=s.useRef(null),je=s.useRef(null),[De,Xe]=s.useState(()=>{const t=ln(S.FLAT_MIDDLE_WIDTH,0);return t>=Lt?t:null}),[le,Ce]=s.useState(()=>{const t=ln(S.FLAT_INSPECTOR_WIDTH,0);return t>=Yt?t:null}),re=s.useCallback(t=>{if(typeof window>"u")return t;const a=le!==null?Tt+le:0,l=window.innerWidth-mn-Tt-un-a;return Math.max(Lt,Math.min(Math.max(l,Lt),t))},[le]),oe=s.useCallback(t=>{var _;if(typeof window>"u")return t;const a=(_=Pe.current)==null?void 0:_.querySelector(".flat-middle"),l=(a==null?void 0:a.getBoundingClientRect().width)??Lt,x=window.innerWidth-mn-l-Tt-un-Tt;return Math.max(Yt,Math.min(Math.max(x,Yt),t))},[]);s.useEffect(()=>{if(De===null&&le===null)return;const t=()=>{Xe(a=>{if(a===null)return a;const l=re(a);return l===a?a:l}),Ce(a=>{if(a===null)return a;const l=oe(a);return l===a?a:l})};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[De,le,re,oe]);const wt=s.useCallback(t=>{var l;if(t.button!==0)return;const a=(l=Pe.current)==null?void 0:l.querySelector(".flat-middle");a&&(t.currentTarget.setPointerCapture(t.pointerId),je.current={kind:"middle",startX:t.clientX,startWidth:a.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),et=s.useCallback(t=>{var l;if(t.button!==0)return;const a=(l=Pe.current)==null?void 0:l.querySelector(".flat-inspector");a&&(t.currentTarget.setPointerCapture(t.pointerId),je.current={kind:"inspector",startX:t.clientX,startWidth:a.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),Ve=s.useCallback(t=>{const a=je.current;if(!a||t.pointerId!==a.pointerId)return;const l=t.clientX-a.startX;a.kind==="middle"?Xe(re(a.startWidth+l)):Ce(oe(a.startWidth-l))},[re,oe]),tt=s.useCallback(t=>{const a=je.current;if(!a||t.pointerId!==a.pointerId)return;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}if(je.current=null,document.body.classList.remove("flat-splitter-dragging"),!(Math.abs(t.clientX-a.startX)>2))return;const x=t.clientX-a.startX;if(a.kind==="middle"){const _=re(a.startWidth+x);Xe(_),It(S.FLAT_MIDDLE_WIDTH,_)}else{const _=oe(a.startWidth-x);Ce(_),It(S.FLAT_INSPECTOR_WIDTH,_)}},[re,oe]),ke=s.useCallback(()=>{Xe(null),It(S.FLAT_MIDDLE_WIDTH,0)},[]),vt=s.useCallback(()=>{Ce(null),It(S.FLAT_INSPECTOR_WIDTH,0)},[]),[Ne,$e]=s.useState(()=>Ut(S.FLAT_INSPECTOR_VIEW)==="tracking"?"tracking":"agent"),j=s.useCallback(t=>{$e(t),Xt(S.FLAT_INSPECTOR_VIEW,t)},[]),Re=s.useCallback(()=>{ie(t=>{const a=!t;return xe(S.FLAT_INSPECTOR_OPEN,a),a})},[]),H=s.useCallback(()=>{ie(!1),xe(S.FLAT_INSPECTOR_OPEN,!1)},[]),jt=s.useCallback(()=>{j("tracking"),ie(!0),xe(S.FLAT_INSPECTOR_OPEN,!0)},[j]),ze=Fn(),ot=s.useCallback((t,a)=>{pe({url:t,name:a})},[]),Dt=s.useCallback((t,a)=>{Ee({command:t,output:a,isLive:!1})},[]),R=s.useCallback((t,a)=>{var _;const l=W.size>0?Array.from(W)[0]:null,x=l?(_=g.getState().agents.get(l))==null?void 0:_.cwd:void 0;g.setFileViewerPath(t,a,x)},[W]),qe=s.useCallback(t=>{he(t)},[]),ye=s.useCallback((t,a)=>{bt({agentId:t,count:a})},[]),ct=s.useCallback(t=>{u?u(t):o(t)},[o,u]),v=s.useMemo(()=>W.size>0?Array.from(W)[0]:null,[W]),$t=s.useCallback(t=>{v&&_e({agentId:v,position:t})},[v]),Rt=s.useCallback((t,a)=>{$({buildingId:t,position:a})},[]);s.useEffect(()=>{Te(!1)},[v]);const q=s.useRef([]),ae=s.useRef(-1),ce=s.useRef(!1),dt=s.useRef(Ut(S.LAST_OPENED_AGENT,"")||null),[Oe,Ct]=s.useState(!1),[kt,zt]=s.useState(!1),nt=s.useRef(!1),Be=s.useRef(null),ut=s.useRef(!1),Fe=s.useMemo(()=>new Set(w.map(t=>t.id)),[w]),Ot=s.useMemo(()=>{const t=new Map(w.map(l=>[l.id,l])),a=new Map;for(const l of w)if((l.isBoss||l.class==="boss")&&l.subordinateIds&&l.subordinateIds.length>0){const x=l.subordinateIds.map(_=>t.get(_)).filter(_=>_!==void 0);x.length>0&&a.set(l.id,x)}return a},[w]),z=s.useCallback(()=>{const t=q.current,a=ae.current;Ct(a>0),zt(a>=0&&a<t.length-1)},[]),Ae=s.useCallback(t=>{const a=q.current;if(a.length===0)return;let l=ae.current+t;for(;l>=0&&l<a.length;){const x=a[l];if(Fe.has(x)){ce.current=!0,ae.current=l,z(),g.selectAgent(x);return}l+=t}},[Fe,z]),Ye=s.useCallback(()=>Ae(-1),[Ae]),We=s.useCallback(()=>Ae(1),[Ae]);Ta(s.useCallback(()=>{const t=q.current,a=ae.current;return t.length>0&&a>0?(Ae(-1),"handled"):"exit"},[Ae]));const Ke=s.useCallback((t,a)=>{if(typeof window>"u")return;const l=window.history.state,_={...typeof l=="object"&&l!==null?l:{},__flatAgentNav:{agentId:t}};a==="replace"?window.history.replaceState(_,"",window.location.href):window.history.pushState(_,"",window.location.href)},[]);s.useEffect(()=>{if(!v){nt.current=!1,Be.current=null;return}if(!nt.current){Ke(v,"replace"),nt.current=!0,Be.current=v;return}if(ut.current){ut.current=!1,Be.current=v;return}Be.current!==v&&(Ke(v,"push"),Be.current=v)},[v,Ke]),s.useEffect(()=>{const t=a=>{var N,I;const l=(I=(N=a.state)==null?void 0:N.__flatAgentNav)==null?void 0:I.agentId;if(!l||typeof l!="string"||!Fe.has(l)||l===v)return;ut.current=!0,ce.current=!0;const x=q.current,_=x.lastIndexOf(l);_>=0?ae.current=_:(x.push(l),ae.current=x.length-1),z(),g.selectAgent(l)};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[Fe,v,z]),s.useEffect(()=>{if(!v){q.current=[],ae.current=-1,z();return}if(dt.current=v,Xt(S.LAST_OPENED_AGENT,v),ce.current){ce.current=!1,z();return}const t=q.current,a=ae.current;if(a>=0&&t[a]===v){z();return}const l=a<t.length-1?t.slice(0,a+1):t.slice();l.push(v),l.length>100&&l.shift(),q.current=l,ae.current=l.length-1,z()},[v,z]);const at=s.useCallback(t=>{c(t),ve(!1)},[c]),Bt=v??"",Ft=s.useCallback(()=>{},[]),He=s.useCallback(t=>{at(t)},[at]),de=we,[mt,pt]=s.useState(de),[ft,st]=s.useState(de);s.useEffect(()=>{if(de){pt(!0);return}st(!1);const t=setTimeout(()=>pt(!1),240);return()=>clearTimeout(t)},[de]),s.useEffect(()=>{if(!mt||!de)return;let t=0;const a=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>st(!0))});return()=>{cancelAnimationFrame(a),cancelAnimationFrame(t)}},[mt,de]);const ge=s.useRef(null);s.useEffect(()=>{if(v)return;const t=a=>{if(a.key!==" "&&a.key!=="Backspace")return;const l=a.target;if(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable)return;const x=dt.current;!x||!Fe.has(x)||(a.preventDefault(),g.selectAgent(x))};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[v,Fe]);const[Nt,ue]=s.useState(new Set),yt=s.useCallback(t=>{ue(a=>{const l=new Set(a);return l.has(t)?l.delete(t):l.add(t),l})},[]),At=s.useCallback(t=>{ue(new Set(t))},[]),[ee,n]=s.useState(()=>typeof window<"u"&&window.matchMedia("(max-width: 768px)").matches);s.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(max-width: 768px)"),a=l=>n(l.matches);return t.addEventListener("change",a),()=>t.removeEventListener("change",a)},[]);const[r,i]=s.useState(null),m=s.useCallback(t=>{i(a=>a===t?null:t)},[]),O=_n(),Y=wn(),[P]=Wn(),G=s.useMemo(()=>{if(v)return Va;const t=new Map,a=[];for(const h of w){const C=g.getAreaForAgent(h.id);if(!rn((C==null?void 0:C.id)??null))continue;if(!C||C.archived){a.push(h);continue}const L=t.get(C.id);L?L.push(h):t.set(C.id,[h])}const l=new Map,x=[];for(const h of Y.values()){let C=!1;for(const L of O.values())if(!L.archived&&on(L.id)&&g.isPositionInArea(h.position,L)){const me=l.get(L.id);me?me.push(h):l.set(L.id,[h]),C=!0;break}!C&&rn(null)&&x.push(h)}const _=[];for(const[,h]of O){if(h.archived||!on(h.id))continue;const C=t.get(h.id),L=l.get(h.id)??[];(C&&C.length>0||L.length>0)&&_.push({area:h,agents:C??[],buildings:L})}(a.length>0||x.length>0)&&_.push({area:{id:"__unassigned__",name:"Unassigned",color:"#6272a4",center:{x:0,z:0},type:"circle",radius:0,directories:[],archived:!1,assignedAgentIds:[],zIndex:0},agents:a,buildings:x});const N=_.filter(h=>h.area.id!=="__unassigned__"),I=_.filter(h=>h.area.id==="__unassigned__");let X=1,B=1;const f=new Map;if(N.length>1){let h=1/0,C=-1/0,L=1/0,me=-1/0;for(const K of N)h=Math.min(h,K.area.center.x),C=Math.max(C,K.area.center.x),L=Math.min(L,K.area.center.z),me=Math.max(me,K.area.center.z);const Se=C-h||1,Et=me-L||1;if(N.length<=4){X=N.length,B=1;const K=[...N].sort((Z,Wt)=>Z.area.center.x-Wt.area.center.x);for(let Z=0;Z<K.length;Z++)f.set(K[Z].area.id,{row:1,col:Z+1})}else{const K=[...N].sort((E,F)=>E.area.center.x-F.area.center.x),Z=[];for(let E=1;E<K.length;E++)Z.push(K[E].area.center.x-K[E-1].area.center.x);const Wt=Z.reduce((E,F)=>E+F,0)/Z.length||1;let tn=1;for(const E of Z)E>Wt*1.3&&tn++;X=Math.max(2,Math.min(tn,N.length));const Ht=[...N].sort((E,F)=>E.area.center.z-F.area.center.z),Mt=[];for(let E=1;E<Ht.length;E++)Mt.push(Ht[E].area.center.z-Ht[E-1].area.center.z);const Sn=Mt.reduce((E,F)=>E+F,0)/Mt.length||1;let nn=1;for(const E of Mt)E>Sn*1.3&&nn++;B=Math.max(2,Math.min(nn,N.length)),X=Math.max(X,Math.ceil(N.length/B)),B=Math.max(B,Math.ceil(N.length/X));const En=Se/X,Mn=Et/B,Gt=new Set;for(const E of N){let F=Math.min(X-1,Math.max(0,Math.floor((E.area.center.x-h)/En))),Ze=Math.min(B-1,Math.max(0,Math.floor((E.area.center.z-L)/Mn))),ht=`${Ze},${F}`,an=0;const In=B*X;for(;Gt.has(ht)&&an<In;)F++,F>=X&&(F=0,Ze=(Ze+1)%B),ht=`${Ze},${F}`,an++;Gt.has(ht)&&(Ze=B,F=0,ht=`${Ze},${F}`,B++),Gt.add(ht),f.set(E.area.id,{row:Ze+1,col:F+1})}}}const te=h=>{h.sort((C,L)=>{var Se,Et,K,Z;const me=(((Se=C.position)==null?void 0:Se.z)??0)-(((Et=L.position)==null?void 0:Et.z)??0);return me!==0?me:(((K=C.position)==null?void 0:K.x)??0)-(((Z=L.position)==null?void 0:Z.x)??0)})};for(const h of N)te(h.agents);for(const h of I)te(h.agents);const V=[...N,...I].sort((h,C)=>h.area.name.localeCompare(C.area.name,void 0,{sensitivity:"base",numeric:!0})||h.area.id.localeCompare(C.area.id));return f.clear(),V.forEach((h,C)=>{f.set(h.area.id,{row:Math.floor(C/X)+1,col:C%X+1})}),B=Math.max(1,Math.ceil(V.length/X)),{groups:V,gridCols:X,gridRows:B,positions:f}},[w,O,Y,P,v]),it=s.useMemo(()=>{let t=0,a=0;for(const l of G.groups)t+=l.agents.length,a+=l.agents.filter(x=>x.status==="working").length;return{areaCount:G.groups.length,agentCount:t,workingCount:a}},[G]),St=s.useMemo(()=>{if(!be)return[];const t=w.find(a=>a.id===be.agentId);return t?[{id:"edit-agent",label:"Edit Agent",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:open-agent-edit",{detail:{agentId:t.id}}))}},{id:"open-chat",label:"Open Chat",icon:e.jsx(d,{name:"chat",size:14}),onClick:()=>c(t.id)},{id:"clone-agent",label:"Clone Agent",icon:e.jsx(d,{name:"clipboard",size:14}),onClick:()=>g.cloneAgent(t.id)},{id:"fork-agent",label:"Fork Agent (with history)",icon:e.jsx(d,{name:"git-branch",size:14}),onClick:()=>g.forkAgent(t.id)},{id:"delete-agent",label:"Delete Agent",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>{Ie({agentId:t.id,name:t.name})}}]:[]},[be,w,c]),se=s.useMemo(()=>{var N;if(!p)return[];const t=Y.get(p.buildingId);if(!t)return[];const a=[],l=t.type==="server"||t.type==="docker"||t.type==="terminal",x=t.status==="running",_=t.type==="boss";if(a.push({id:"open",label:t.type==="database"?"Open Database":t.type==="folder"?"Open Folder":t.type==="tests"?"Open Tests":t.type==="http"?"Open Requests":t.type==="boss"?"View Boss Logs":t.type==="terminal"?"Open Terminal":t.type==="server"&&((N=t.pm2)!=null&&N.enabled)?"View PM2 Logs":"Open",icon:e.jsx(d,{name:t.type==="database"?"database":t.type==="folder"?"folder":t.type==="tests"?"flask":t.type==="http"?"globe":t.type==="terminal"?"terminal":"eye",size:14}),onClick:()=>ct(t.id)}),l&&(x||a.push({id:"start",label:"Start",icon:e.jsx(d,{name:"play",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"start")}),x&&(a.push({id:"restart",label:"Restart",icon:e.jsx(d,{name:"refresh",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"restart")}),a.push({id:"stop",label:"Stop",icon:e.jsx(d,{name:"stop",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"stop")}))),_&&t.subordinateBuildingIds&&t.subordinateBuildingIds.length>0&&(a.push({id:"start-all",label:"Start All Subordinates",icon:e.jsx(d,{name:"launch",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"start")}}),a.push({id:"stop-all",label:"Stop All Subordinates",icon:e.jsx(d,{name:"pause",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"stop")}}),a.push({id:"restart-all",label:"Restart All Subordinates",icon:e.jsx(d,{name:"restart",size:14}),onClick:()=>{for(const I of t.subordinateBuildingIds)g.sendBuildingCommand(I,"restart")}})),l&&a.push({id:"health-check",label:"Health Check",icon:e.jsx(d,{name:"health",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"healthCheck")}),a.push({id:"divider-edit",label:"",divider:!0,onClick:()=>{}}),a.push({id:"edit",label:"Edit Building",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:building-edit",{detail:{buildingId:t.id}}))}}),a.push({id:"clone",label:"Clone Building",icon:e.jsx(d,{name:"copy",size:14}),onClick:()=>{g.createBuilding({name:`${t.name} (Copy)`,type:t.type,style:t.style,color:t.color,scale:t.scale,position:{x:t.position.x+2,z:t.position.z+2},cwd:t.cwd,folderPath:t.folderPath,commands:t.commands,pm2:t.pm2,docker:t.docker,database:t.database,terminal:t.terminal,urls:t.urls,subordinateBuildingIds:t.subordinateBuildingIds})}}),t.urls&&t.urls.length>0)for(const I of t.urls)a.push({id:`url-${I.label}`,label:I.label,icon:e.jsx(d,{name:"link",size:14}),onClick:()=>window.open(I.url,"_blank","noopener,noreferrer")});return a.push({id:"divider-danger",label:"",divider:!0,onClick:()=>{}}),a.push({id:"delete",label:"Delete Building",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>g.deleteBuilding(t.id)}),a},[p,Y,ct]),U=s.useCallback(t=>{ue(new Set([t])),requestAnimationFrame(()=>{const a=ge.current;if(!a)return;const l=a.querySelector(`[data-area-id="${t}"]`);if(!l)return;const x=a.getBoundingClientRect(),N=l.getBoundingClientRect().top-x.top+a.scrollTop-8;a.scrollTo({top:Math.max(0,N),behavior:"smooth"})})},[]);return e.jsxs("div",{ref:Pe,className:`flat-view ${de?"flat-view--with-inspector":""} ${v?"flat-view--has-chat":""} ${Le?"flat-view--mobile-sidebar-open":""}`,style:(()=>{if(De===null&&le===null)return;const t={};return De!==null&&(t["--flat-middle-width"]=`${De}px`),le!==null&&(t["--flat-inspector-width"]=`${le}px`),t})(),children:[Le&&e.jsx("div",{className:"flat-mobile-sidebar-backdrop",onClick:Q,"aria-hidden":"true"}),e.jsxs("div",{className:"flat-middle",children:[e.jsx("div",{className:"flat-middle__header",children:e.jsxs("div",{className:"flat-middle__actions",children:[e.jsx("button",{className:"flat-cta-btn flat-cta-btn--agent",onClick:M,title:"Create new agent",children:"+ Agent"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--boss",onClick:A,title:"Create new boss agent",children:"+ Boss"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--area",onClick:k,title:"Create new area",children:"+ Area"})]})}),e.jsx("div",{className:"flat-middle__content",children:e.jsx(Hn,{activeAgentId:Bt,onClose:Ft,onSelectAgent:He,expandedAreas:Nt,onToggleArea:yt,onSetExpandedAreas:At,agentListRef:ge})})]}),e.jsx("div",{className:"flat-splitter flat-splitter--middle",role:"separator","aria-orientation":"vertical","aria-label":"Resize agents panel",title:"Drag to resize · Double-click to reset",onPointerDown:wt,onPointerMove:Ve,onPointerUp:tt,onPointerCancel:tt,onDoubleClick:ke}),e.jsxs("div",{className:"flat-right",children:[e.jsxs("button",{type:"button",className:"flat-mobile-sidebar-toggle","aria-label":Le?"Close agents sidebar":"Open agents sidebar","aria-expanded":Le,onClick:rt,children:[e.jsx(d,{name:"list",size:18}),e.jsx("span",{className:"flat-mobile-sidebar-toggle__label",children:"Agents"})]}),v?e.jsx(Xa,{agentId:v,terminalViewMode:Ue,onTerminalViewModeChange:Qe,inspectorOpen:we,onToggleInspector:Re,onShowTaskBoard:jt,onImageClick:ot,onFileClick:R,onBashClick:Dt,onViewMarkdown:qe,onRequestClearSubordinates:ye,keyboard:ze,canNavigateBack:Oe,canNavigateForward:kt,onNavigateBack:Ye,onNavigateForward:We,agentInfoOpen:Je,onToggleAgentInfo:Pt,onHeaderContextMenu:$t,onBuildingContextMenu:Rt}):e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-map",children:[e.jsxs("div",{className:"flat-map__header",children:[e.jsx("span",{className:"flat-map__title",children:"🗺️ Areas"}),e.jsx("span",{className:"flat-map__hint",children:"Click an area to focus it, or an agent to chat"}),e.jsxs("span",{className:"flat-map__stats",children:[e.jsxs("span",{children:[it.areaCount," areas"]}),e.jsxs("span",{children:[it.agentCount," agents"]}),it.workingCount>0&&e.jsxs("span",{className:"flat-map__stats-working",children:[e.jsx("span",{className:"flat-map__stats-dot","aria-hidden":"true"}),it.workingCount," working"]})]}),e.jsx(Ba,{className:"flat-map__view-mode"})]}),e.jsx("div",{className:"flat-map__grid",style:{gridTemplateColumns:ee?"repeat(2, minmax(0, 1fr))":`repeat(${G.gridCols}, 1fr)`},children:G.groups.length===0?e.jsx("div",{className:"flat-map__empty",children:e.jsx("span",{children:"No areas or agents yet"})}):(ee?[...G.groups].sort((a,l)=>{const x=G.positions.get(a.area.id),_=G.positions.get(l.area.id);return!x&&!_?0:x?_?x.row-_.row||x.col-_.col:-1:1}):G.groups).map(a=>{var B;const l=a.area.id,x=G.positions.get(l),_=a.agents.filter(f=>f.status==="working").length,N=_>0,I=ee&&r!==l,X=ee&&!I;return e.jsxs("div",{className:`flat-map-area-card${N?" flat-map-area-card--working":""}${I?" flat-map-area-card--collapsed":""}${X?" flat-map-area-card--expanded":""}`,style:{"--area-color":a.area.color,gridRow:ee||x==null?void 0:x.row,gridColumn:ee||x==null?void 0:x.col},onContextMenu:f=>{y&&(f.preventDefault(),f.stopPropagation(),y(l,{x:f.clientX,y:f.clientY}))},children:[e.jsxs("button",{type:"button",className:"flat-map-area-card__header",onClick:()=>ee?m(l):U(l),title:ee?I?`Expand ${a.area.name}`:`Collapse ${a.area.name}`:`Focus ${a.area.name} in left panel`,"aria-expanded":ee?!I:void 0,children:[e.jsx("span",{className:"flat-map-area-card__color",style:{background:a.area.color}}),((B=a.area.logo)==null?void 0:B.filename)&&e.jsx("img",{className:"flat-map-area-card__logo",src:Ia(a.area.logo.filename),alt:"","aria-hidden":"true",onError:f=>{f.currentTarget.style.display="none"}}),e.jsx("span",{className:"flat-map-area-card__name",children:a.area.name}),e.jsxs("span",{className:"flat-map-area-card__count",title:`${a.agents.length} agent${a.agents.length===1?"":"s"}`,"aria-label":`${a.agents.length} agent${a.agents.length===1?"":"s"}`,children:[e.jsx(d,{name:"users",size:10}),a.agents.length]}),N&&e.jsxs("span",{className:"flat-map-area-card__working",title:`${_} working agent${_===1?"":"s"}`,"aria-label":`${_} working agent${_===1?"":"s"}`,children:[e.jsxs("span",{className:"flat-map-area-card__working-bars","aria-hidden":"true",children:[e.jsx("i",{}),e.jsx("i",{}),e.jsx("i",{})]}),e.jsx("span",{className:"flat-map-area-card__working-count",children:_})]}),ee&&e.jsx(d,{name:I?"caret-down":"caret-up",size:11,className:"flat-map-area-card__caret"})]}),e.jsx("div",{className:"flat-map-area-card__agents",children:a.agents.map(f=>{const te=f.isBoss||f.class==="boss",V=te?Ot.get(f.id):void 0,h=vn(f),C=h.usedPercent>=80?"#ff4a4a":h.usedPercent>=60?"#ff9e4a":h.usedPercent>=40?"#ffd700":"#4aff9e",L=`Context: ${(h.totalTokens/1e3).toFixed(1)}k / ${(h.contextWindow/1e3).toFixed(1)}k (${h.usedPercent}% used, ${h.freePercent}% free)`,me=f.latestTodos&&f.latestTodos.length>0||V&&V.length>0;return e.jsx(Gn,{todos:f.latestTodos,subordinates:V,position:"top",children:e.jsxs("button",{type:"button",className:`flat-map-agent-chip ${f.status}`,onClick:()=>c(f.id),onContextMenu:Se=>{Se.preventDefault(),Se.stopPropagation(),_e({agentId:f.id,position:{x:Se.clientX,y:Se.clientY}})},title:me?void 0:`${te?"Boss · ":""}Open chat with ${f.name}
|
|
2
2
|
${L}`,children:[e.jsx(jn,{agent:f,size:16}),te&&e.jsx("span",{className:"flat-map-agent-chip__crown","aria-hidden":"true",children:e.jsx(d,{name:"crown",size:11,color:"#ffd700",weight:"fill"})}),e.jsx("span",{className:"flat-map-agent-chip__name",children:f.name}),e.jsx("img",{src:kn(f.provider,"/"),alt:f.provider,className:"flat-map-agent-chip__provider-icon",title:Cn(f.provider)}),e.jsx("span",{className:"flat-map-agent-chip__dot",style:{backgroundColor:Nn(f.status)}}),f.latestTodos&&f.latestTodos.length>0&&e.jsx(Un,{todos:f.latestTodos,maxDots:6}),te&&V&&V.length>0&&e.jsx(Xn,{subordinates:V,maxDots:6}),e.jsx("span",{className:"flat-map-agent-chip__context-bar","aria-hidden":"true",children:e.jsx("span",{className:"flat-map-agent-chip__context-bar-fill",style:{width:`${h.usedPercent}%`,backgroundColor:C}})})]})},f.id)})}),a.area.directories.length>0&&e.jsx("div",{className:"flat-map-area-card__folders",role:"group","aria-label":`${a.area.name} folders`,children:a.area.directories.map(f=>{const te=f.split("/").filter(Boolean).pop()||f;return e.jsxs("button",{type:"button",className:"flat-map-folder-chip",onClick:V=>{V.stopPropagation(),g.openFileExplorerForAreaFolder(l,f)},title:`Open in file explorer: ${f}`,children:[e.jsx(d,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-map-folder-chip__name",children:te})]},f)})}),a.buildings.length>0&&e.jsx("div",{className:"flat-map-area-card__buildings",children:a.buildings.map(f=>{var V;const te=(V=Vn[f.type])==null?void 0:V.color;return e.jsxs("button",{type:"button",className:`flat-map-building-chip flat-map-building-chip--${f.status}`,style:te?{"--building-type-color":te}:void 0,onClick:h=>{if(b){const C=h.currentTarget.getBoundingClientRect();b(f.id,{x:C.right,y:C.top+C.height/2})}else ct(f.id)},onContextMenu:h=>{h.preventDefault(),h.stopPropagation(),$({buildingId:f.id,position:{x:h.clientX,y:h.clientY}})},title:`${f.name} · ${f.type} · ${f.status}`,children:[e.jsx(d,{name:qn(f.type),size:12,color:te}),e.jsx("span",{className:"flat-map-building-chip__name",children:f.name}),e.jsx("span",{className:"flat-map-building-chip__dot",style:{backgroundColor:Yn(f.status)}})]},f.id)})})]},l)})})]})})]}),de&&e.jsx("div",{className:"flat-splitter flat-splitter--inspector",role:"separator","aria-orientation":"vertical","aria-label":"Resize inspector panel",title:"Drag to resize · Double-click to reset",onPointerDown:et,onPointerMove:Ve,onPointerUp:tt,onPointerCancel:tt,onDoubleClick:vt}),mt&&e.jsxs("aside",{className:`flat-inspector ${ft?"flat-inspector--open":"flat-inspector--closing"}`,"aria-label":"Inspector panel",children:[e.jsxs("div",{className:"flat-inspector__header",children:[e.jsxs("div",{className:"flat-inspector__tabs",role:"tablist","aria-label":"Inspector view",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":Ne==="agent",className:`flat-inspector__tab ${Ne==="agent"?"flat-inspector__tab--active":""}`,onClick:()=>j("agent"),children:"Agent"}),e.jsx("button",{type:"button",role:"tab","aria-selected":Ne==="tracking",className:`flat-inspector__tab ${Ne==="tracking"?"flat-inspector__tab--active":""}`,onClick:()=>j("tracking"),children:"Tracking"})]}),e.jsx("button",{type:"button",className:"flat-inspector__close",onClick:H,title:"Close inspector","aria-label":"Close inspector",children:"✕"})]}),e.jsx("div",{className:"flat-inspector__body",children:Ne==="tracking"?e.jsx(Kn,{activeAgentId:v??"",onSelectAgent:t=>{c(t),window.innerWidth<=768&&H()}}):(()=>{if(!v)return e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Select an agent to inspect"})});const t=w.find(a=>a.id===v);return t?e.jsx(Zn,{agent:t,onFocusAgent:a=>{c(a),window.innerWidth<=768&&H()},onKillAgent:a=>g.killAgent(a)}):e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Agent not found"})})})()})]}),D&&e.jsx(Jn,{url:D.url,name:D.name,onClose:()=>pe(null)}),T&&e.jsx(Qn,{state:T,onClose:()=>Ee(null)}),e.jsx(ea,{agent:v?w.find(t=>t.id===v)??null:null,content:fe,onClose:()=>he(null)}),Ge&&e.jsx(ta,{action:"clear-subordinates",selectedAgentId:Ge.agentId,subordinateCount:Ge.count,onClose:()=>bt(null),onClearHistory:()=>{}}),e.jsx(na,{agent:v?w.find(t=>t.id===v)??null:null,isOpen:Je&&!!v,onClose:_t}),e.jsx(Qt,{isOpen:be!==null,position:(be==null?void 0:be.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:St,onClose:()=>_e(null)}),e.jsx(Qt,{isOpen:p!==null,position:(p==null?void 0:p.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:se,onClose:()=>$(null)}),e.jsx(aa,{isOpen:Me!==null,title:J("common:confirm.removeAgentTitle"),message:J("common:confirm.removeAgentMessage",{name:(Me==null?void 0:Me.name)??""}),confirmLabel:J("common:buttons.remove"),cancelLabel:J("common:buttons.cancel"),variant:"danger",onConfirm:()=>{Me&&g.removeAgentFromServer(Me.agentId)},onClose:()=>Ie(null)})]})}export{Ja as FlatView};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-
|
|
2
|
-
import{a9 as e,a1 as a}from"./main-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-BaMZNtgs.js","assets/main-BHmBlXv1.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-CBPuP1jE.js","assets/main-Dl43NBRA.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a9 as e,a1 as a}from"./main-BHmBlXv1.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-CBPuP1jE.js";var i;(function(r){r.Heavy="HEAVY",r.Medium="MEDIUM",r.Light="LIGHT"})(i||(i={}));var t;(function(r){r.Success="SUCCESS",r.Warning="WARNING",r.Error="ERROR"})(t||(t={}));const E=e("Haptics",{web:()=>a(()=>import("./web-BaMZNtgs.js"),__vite__mapDeps([0,1,2,3,4])).then(r=>new r.HapticsWeb)});export{E as Haptics,i as ImpactStyle,t as NotificationType};
|