tide-commander 1.148.0 → 1.150.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +6 -3
  3. package/dist/assets/{BossLogsModal-CZMHgMBE.js → BossLogsModal-DvczRUvP.js} +1 -1
  4. package/dist/assets/BossSpawnModal-B2autFKk.js +1 -0
  5. package/dist/assets/{ControlsModal-DJ8Scm16.js → ControlsModal-BaREMQxc.js} +1 -1
  6. package/dist/assets/{DockerLogsModal-Vb4gqdFz.js → DockerLogsModal-DZ0udMCo.js} +1 -1
  7. package/dist/assets/{EmbeddedEditor-D4sHERAj.js → EmbeddedEditor-CEjr0ZSZ.js} +1 -1
  8. package/dist/assets/{GmailOAuthSetup-COIYIbJS.js → GmailOAuthSetup-76BP8J8C.js} +1 -1
  9. package/dist/assets/{GoogleOAuthSetup-DJS59Soi.js → GoogleOAuthSetup-D45GImPI.js} +1 -1
  10. package/dist/assets/{IframeModal-CFysTkn9.js → IframeModal-De63RfJZ.js} +1 -1
  11. package/dist/assets/{IntegrationsPanel-BK8g9ceY.js → IntegrationsPanel-DYrw1Sqk.js} +2 -2
  12. package/dist/assets/{LogViewerModal-DRxR0HYq.js → LogViewerModal-DW-2lpln.js} +1 -1
  13. package/dist/assets/{MonitoringModal-CL7UMOdX.js → MonitoringModal-B0-XXyd3.js} +1 -1
  14. package/dist/assets/{PM2LogsModal-I3aouUlw.js → PM2LogsModal-DOfOhkCY.js} +1 -1
  15. package/dist/assets/{RestoreArchivedAreaModal-PWAg6w6b.js → RestoreArchivedAreaModal-DNGmIJmM.js} +1 -1
  16. package/dist/assets/Scene2DCanvas-BW1E76CQ.js +1 -0
  17. package/dist/assets/SceneManager-DAvc9-Wp.js +104 -0
  18. package/dist/assets/{SkillsPanel-EQ74sIa6.js → SkillsPanel-Br-gLCLA.js} +3 -3
  19. package/dist/assets/{SlackMultiInstanceSetup-CLMUteI0.js → SlackMultiInstanceSetup-DG_bIfDu.js} +1 -1
  20. package/dist/assets/SpawnModal-lWM8OuZW.js +1 -0
  21. package/dist/assets/{StatisticsModal-D6MgA_o0.js → StatisticsModal-LvA0Fcvn.js} +1 -1
  22. package/dist/assets/{SubordinateAssignmentModal-C6n0pMn3.js → SubordinateAssignmentModal-8YxNXcR3.js} +1 -1
  23. package/dist/assets/{TriggerManagerPanel-Umd8iUg1.js → TriggerManagerPanel-DftIuKUG.js} +1 -1
  24. package/dist/assets/{WorkflowEditorPanel-CxjBxs9O.js → WorkflowEditorPanel-oLwyO_C6.js} +1 -1
  25. package/dist/assets/{area-logos-CThPeqIM.js → area-logos-mcpQqUMZ.js} +1 -1
  26. package/dist/assets/grok.ico +0 -0
  27. package/dist/assets/grok.png +0 -0
  28. package/dist/assets/index-Ay7dKyeR.js +1 -0
  29. package/dist/assets/index-BMw7AAAK.js +5 -0
  30. package/dist/assets/{index-Cz-ypmob.js → index-BQpd34Mc.js} +1 -1
  31. package/dist/assets/{index-BUN7MVf5.js → index-C6-68CXL.js} +3 -3
  32. package/dist/assets/index-CIon0DLf.js +2 -0
  33. package/dist/assets/{index-maZSt2YW.js → index-Cwt-E2td.js} +5 -5
  34. package/dist/assets/{index-DelocTaH.js → index-DFVroqA5.js} +1 -1
  35. package/dist/assets/index-DR6_WeF_.js +1 -0
  36. package/dist/assets/{index-h3Cuh2Zn.js → index-O0t07OB_.js} +2 -2
  37. package/dist/assets/main-D5sqeuwB.js +286 -0
  38. package/dist/assets/main-JBkwGXfE.css +1 -0
  39. package/dist/assets/{web-CfvEypdU.js → web-BkrshujV.js} +1 -1
  40. package/dist/assets/{web-CNjTPilF.js → web-DPETNqOf.js} +1 -1
  41. package/dist/assets/{web-bcYaAwP6.js → web-vG1Smf_N.js} +1 -1
  42. package/dist/index.html +2 -2
  43. package/dist/locales/de/config.json +3 -1
  44. package/dist/locales/en/config.json +2 -0
  45. package/dist/locales/en/terminal.json +6 -0
  46. package/dist/locales/en/tools.json +4 -2
  47. package/dist/locales/es/config.json +2 -0
  48. package/dist/locales/fr/config.json +3 -1
  49. package/dist/locales/hi/config.json +3 -1
  50. package/dist/locales/it/config.json +3 -1
  51. package/dist/locales/ja/config.json +3 -1
  52. package/dist/locales/pt/config.json +3 -1
  53. package/dist/locales/ru/config.json +3 -1
  54. package/dist/locales/zh-CN/config.json +3 -1
  55. package/dist/src/packages/server/claude/backend.js +114 -10
  56. package/dist/src/packages/server/claude/runner/process-lifecycle.js +62 -0
  57. package/dist/src/packages/server/claude/runner/stdout-pipeline.js +148 -7
  58. package/dist/src/packages/server/claude/runner/watchdog.js +12 -0
  59. package/dist/src/packages/server/claude/session-loader.js +295 -0
  60. package/dist/src/packages/server/codex/json-event-parser.js +149 -4
  61. package/dist/src/packages/server/data/index.js +1 -0
  62. package/dist/src/packages/server/grok/backend.js +235 -0
  63. package/dist/src/packages/server/grok/index.js +4 -0
  64. package/dist/src/packages/server/grok/json-event-parser.js +153 -0
  65. package/dist/src/packages/server/grok/session-watcher.js +493 -0
  66. package/dist/src/packages/server/opencode/json-event-parser.js +184 -15
  67. package/dist/src/packages/server/routes/agents.js +19 -11
  68. package/dist/src/packages/server/runtime/grok-runtime-provider.js +11 -0
  69. package/dist/src/packages/server/runtime/index.js +1 -0
  70. package/dist/src/packages/server/services/agent-service.js +26 -5
  71. package/dist/src/packages/server/services/grok-usage-service.js +374 -0
  72. package/dist/src/packages/server/services/runtime-command-execution.js +4 -2
  73. package/dist/src/packages/server/services/runtime-events.js +46 -7
  74. package/dist/src/packages/server/services/runtime-service.js +19 -3
  75. package/dist/src/packages/server/utils/tool-formatting.js +40 -12
  76. package/dist/src/packages/server/websocket/handlers/agent-handler.js +70 -17
  77. package/dist/src/packages/server/websocket/listeners/runtime-listeners.js +73 -14
  78. package/dist/src/packages/shared/agent-types.js +10 -0
  79. package/package.json +1 -1
  80. package/dist/assets/BossSpawnModal-C6DxqtKP.js +0 -1
  81. package/dist/assets/Scene2DCanvas-DYPHkU3i.js +0 -1
  82. package/dist/assets/SceneManager-QqKygyaw.js +0 -104
  83. package/dist/assets/SpawnModal-BOeStihN.js +0 -1
  84. package/dist/assets/index-DOzFBkSH.js +0 -1
  85. package/dist/assets/index-DP7kd91h.js +0 -1
  86. package/dist/assets/index-DRyMARFk.js +0 -5
  87. package/dist/assets/index-DuWmOZdY.js +0 -2
  88. package/dist/assets/main-C2zgPci-.js +0 -256
  89. package/dist/assets/main-C3JO2TRI.css +0 -1
@@ -1,2 +0,0 @@
1
- import{r as a,H as wn,J as qt,K as ln,L as rn,j as e,M as on,N as vn,u as Ut,O as Cn,P as jn,U as Nn,V as yn,W as kn,X as An,Y as Sn,Z as En,_ as Yt,S as E,$ as Kt,a0 as Ht,a1 as Zt,a2 as Nt,a3 as Ae,a4 as Mn,s as f,a5 as cn,m as dn,a6 as In,z as Jt,B as Qt,I as p,a7 as Tn,q as Pn,a8 as Ln,a9 as un,aa as pn,ab as Rn,ac as $n,ad as Dn,ae as zn,af as On,ag as Bn,ah as Fn,ai as Wn,aj as Hn,ak as Un,al as Vn,am as Xn,an as en,C as Gn,ao as qn,ap as tn,aq as Yn,ar as Kn,as as Zn,at as Jn,au as Qn,av as ea,aw as ta,ax as na,ay as aa,az as sa,aA as ia,aB as la,aC as ra,aD as oa,aE as Ke,aF as ca,aG as da,aH as ua,aI as pa,aJ as rt,aK as ma,aL as fa,aM as ha,aN as ga,aO as xa,aP as ba,aQ as _a}from"./main-C2zgPci-.js";import{g as wa}from"./area-logos-CThPeqIM.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";function va(u){const o=a.useRef(u);o.current=u,a.useEffect(()=>{if(!wn())return;let m=null,h=!1;return qt.addListener("backButton",()=>{o.current()==="exit"&&qt.exitApp()}).then(y=>{h?y.remove():m=y}),()=>{h=!0,m&&(m.remove(),m=null)}},[])}async function Ca(u){const o=ln(),m=await fetch(`${rn()}/api/agents/${u}/terminal`,{method:"POST",headers:{Authorization:`Bearer ${o}`}});if(!m.ok){const h=await m.json().catch(()=>({}));throw new Error((h==null?void 0:h.error)||`Failed to start terminal (${m.status})`)}return m.json()}async function ja(u){const o=ln();await fetch(`${rn()}/api/agents/${u}/terminal`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}})}const ot=new Map;function Na({agentId:u}){const[o,m]=a.useState(null),[h,y]=a.useState(null);return a.useEffect(()=>{let $=!1;const T=ot.get(u);return T&&(clearTimeout(T),ot.delete(u)),m(null),y(null),Ca(u).then(B=>{$||m(B.url)}).catch(B=>{$||y(B instanceof Error?B.message:"Failed to start terminal")}),()=>{$=!0;const B=ot.get(u);B&&clearTimeout(B),ot.set(u,setTimeout(()=>{ot.delete(u),ja(u)},2500))}},[u]),h?e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:h})}):o?e.jsx("div",{className:"flat-classic-terminal",children:e.jsx(on,{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 Bt=new Map,ya=6e4;function ka({agentId:u,contextSummary:o}){const{t:m}=Ut(["terminal","common"]),[h,y]=a.useState(()=>{var D;return((D=Bt.get(u))==null?void 0:D.snapshot)??null}),[$,T]=a.useState(!1),[B,te]=a.useState(null),w=a.useRef(0);a.useEffect(()=>{const D=Bt.get(u);if(D&&Date.now()-D.fetchedAt<ya){y(D.snapshot);return}const X=++w.current;T(!0),te(null),Cn(u).then(J=>{X===w.current&&(Bt.set(u,{snapshot:J,fetchedAt:Date.now()}),y(J),T(!1))}).catch(J=>{X===w.current&&(te(J.message||"Failed to load plan limits"),T(!1))})},[u]);const F=[];if(h!=null&&h.rateLimits){const D=[{key:"fiveHour",label:m("terminal:usage.currentSession"),window:h.rateLimits.fiveHour},{key:"sevenDay",label:m("terminal:usage.currentWeekAll"),window:h.rateLimits.sevenDay},{key:"sevenDayOpus",label:m("terminal:usage.currentWeekOpus"),window:h.rateLimits.sevenDayOpus},{key:"sevenDaySonnet",label:m("terminal:usage.currentWeekSonnet"),window:h.rateLimits.sevenDaySonnet}];for(const X of D)X.window&&F.push({...X,window:X.window})}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:m("terminal:usage.limits")}),$&&!h&&e.jsxs("div",{className:"plan-limits-tooltip__muted",children:[m("common:status.loading"),"…"]}),!$&&B&&!h&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:m("terminal:usage.limitsError",{message:B})}),F.length>0?e.jsx("div",{className:"plan-limits-tooltip__gauges",children:F.map(({key:D,label:X,window:J})=>{const Q=Math.max(0,Math.min(100,J.utilization)),oe=Nn(Q);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:X}),e.jsx("span",{className:"plan-limits-tooltip__gauge-percent",style:{color:oe},children:m("terminal:usage.percentUsed",{percent:Math.round(Q)})})]}),e.jsx("div",{className:"plan-limits-tooltip__bar",children:e.jsx("div",{className:"plan-limits-tooltip__bar-fill",style:{width:`${Q}%`,background:oe}})}),e.jsx("div",{className:"plan-limits-tooltip__reset",children:m("terminal:usage.resets",{time:jn(J.resetsAt)})})]},D)})}):h&&!$&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:h.rateLimitsError?m("terminal:usage.limitsError",{message:h.rateLimitsError}):h.cliHint})]})}function Aa({agentId:u,disabled:o,contextSummary:m,children:h}){return e.jsx(vn,{position:"top",maxWidth:320,disabled:o,className:"plan-limits-tooltip-wrapper",triggerStyle:{display:"inline-flex",alignItems:"center"},content:e.jsx(ka,{agentId:u,contextSummary:m}),children:h})}const Sa=a.memo(function({className:o=""}){const{t:m}=Ut(["common"]),[h,y]=yn(),$=a.useRef(null),[T,B]=a.useState(null);a.useLayoutEffect(()=>{const w=$.current;if(!w)return;const F=w.querySelector(".view-mode-toggle__btn--active");F&&B({left:F.offsetLeft,width:F.offsetWidth})},[h]);const te=a.useCallback(w=>{if(w!==h){if(typeof window<"u"&&window.dispatchEvent(new CustomEvent("tide:viewmode-switch-pressed",{detail:{mode:w}})),w==="3d"){requestAnimationFrame(()=>y(w));return}y(w)}},[h,y]);return e.jsxs("div",{className:`view-mode-toggle ${o}`,ref:$,children:[T&&e.jsx("div",{className:"view-mode-toggle__indicator",style:{left:T.left,width:T.width}}),kn.map(w=>e.jsxs("button",{className:`view-mode-toggle__btn ${h===w?"view-mode-toggle__btn--active":""}`,onClick:()=>te(w),title:m(`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:m(`common:viewMode.labels.${w}`)})]},w))]})}),yt=3,kt=280,nn=320,Ft=240,an=64,Ea=["simple","chat","advanced"],Ma={simple:"Simple",chat:"Chat",advanced:"Advanced"},Ia={simple:"○",chat:"◐",advanced:"◉"},Ta={simple:"Simple view — clean messages only",chat:"Chat view — assistant replies (no tool calls)",advanced:"Advanced view — everything including tools"},sn="flat-clear-context",mn="tide:flat-embedded-panels";function fn(){try{const u=localStorage.getItem(mn),o=u?JSON.parse(u):{};return o&&typeof o=="object"?o:{}}catch{return{}}}function Wt(u,o){try{const m=fn();o?m[u]=o:delete m[u],localStorage.setItem(mn,JSON.stringify(m))}catch{}}function Pa(u){const o=u.split("/").filter(Boolean);return o.length===0?u:o.slice(-2).join("/")}function La(u){if(u.provider==="codex"){const $=u.codexModel||"gpt-5.6-luna",T=xa[$];return{model:(T==null?void 0:T.label)||$}}if(u.provider==="opencode")return{model:u.opencodeModel||"opencode"};const o=u.model||"sonnet",m=_a[o],h=u.effort,y=h?ba[h]:void 0;return{model:(m==null?void 0:m.label)||o,effort:y==null?void 0:y.label}}function Ra(u,o){if(o.type==="rectangle"&&o.width&&o.height){const m=o.width/2,h=o.height/2;return u.x>=o.center.x-m&&u.x<=o.center.x+m&&u.z>=o.center.z-h&&u.z<=o.center.z+h}if(o.type==="circle"&&o.radius){const m=u.x-o.center.x,h=u.z-o.center.z;return m*m+h*h<=o.radius*o.radius}return!1}const $a=qn.memo(function({agentId:o,terminalViewMode:m,onTerminalViewModeChange:h,inspectorOpen:y,onToggleInspector:$,onImageClick:T,onFileClick:B,onBashClick:te,onViewMarkdown:w,onRequestClearSubordinates:F,keyboard:D,canNavigateBack:X,canNavigateForward:J,onNavigateBack:Q,onNavigateForward:oe,agentInfoOpen:Fe,onToggleAgentInfo:Ze,onHeaderContextMenu:ct,onBuildingContextMenu:K}){var it,bt;const b=tn(o),I=dn(),Je=Yn(),ne=a.useRef(null),We=a.useRef(null),{displayedAgentId:Re,fadingOut:Qe}=Kn(o),dt=tn(Re),He=!!Je.interactiveMode&&((b==null?void 0:b.provider)??"claude")==="claude"&&!!(b!=null&&b.sessionId),[fe,$e]=a.useState(!1);a.useEffect(()=>{$e(!1)},[o]),a.useEffect(()=>{!He&&fe&&$e(!1)},[He,fe]),a.useEffect(()=>{const n=We.current;if(!n)return;const r=d=>{d.button===3?(d.preventDefault(),d.stopPropagation(),Q()):d.button===4&&(d.preventDefault(),d.stopPropagation(),oe())},i=d=>{(d.button===3||d.button===4)&&d.preventDefault()};return n.addEventListener("mouseup",r),n.addEventListener("mousedown",i),()=>{n.removeEventListener("mouseup",r),n.removeEventListener("mousedown",i)}},[Q,oe]),a.useEffect(()=>{const n=We.current;if(!n)return;let r=0,i=0,d=0;const O=250,re=600,P=80,Le=1.5,Ye=L=>{let U=L instanceof HTMLElement?L:null;for(;U&&U!==n;){const wt=window.getComputedStyle(U).overflowX;if((wt==="auto"||wt==="scroll")&&U.scrollWidth>U.clientWidth)return!0;U=U.parentElement}return!1},_t=L=>{const U=Date.now();if(U<d){L.preventDefault();return}if(Math.abs(L.deltaX)<=Math.abs(L.deltaY)*Le){r=0;return}if(Ye(L.target)){r=0;return}U-i>O&&(r=0),i=U,r+=L.deltaX,r<=-P?(r=0,d=U+re,L.preventDefault(),Q()):r>=P&&(r=0,d=U+re,L.preventDefault(),oe())};return n.addEventListener("wheel",_t,{passive:!1}),()=>n.removeEventListener("wheel",_t)},[Q,oe]);const et=cn(),Se=a.useMemo(()=>{if(!b)return null;const n=new Set,r=[];for(const i of et.values())i.archived||i.directories.length===0||i.assignedAgentIds.includes(o)&&(n.add(i.id),r.push(i));for(const i of et.values())i.archived||i.directories.length===0||n.has(i.id)||Ra({x:b.position.x,z:b.position.z},i)&&(n.add(i.id),r.push(i));return r.length===0?null:r.flatMap(i=>i.directories.filter(d=>d&&d.trim().length>0).map(d=>({areaId:i.id,areaName:i.name,dir:d})))},[b,o,et]),{branches:Ee,fetchRemote:he,fetchingDirs:ge}=Zn(Se),Ue=a.useMemo(()=>{var i;const n=f.getAreaForAgent(o);if(!n)return[];const r=[];for(const d of I.values())d.type==="terminal"&&f.isPositionInArea(d.position,n)&&r.push({id:d.id,name:d.name,hasUrl:!!((i=d.terminalStatus)!=null&&i.url)});return r},[o,I]),Ve=a.useMemo(()=>{var i;const n=f.getAreaForAgent(o);if(!n)return[];const r=[];for(const d of I.values())d.type==="server"&&((i=d.pm2)!=null&&i.enabled)&&f.isPositionInArea(d.position,n)&&r.push({id:d.id,name:d.name});return r},[o,I]),xe=a.useMemo(()=>{const n=f.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of I.values())i.type==="database"&&i.database&&f.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,I]),Me=Jn(),ce=a.useMemo(()=>{const n=f.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of I.values())if(i.type==="tests"&&f.isPositionInArea(i.position,n)){const d=!!i.folderPath&&Me.some(O=>Qn(O,i.folderPath));r.push({id:i.id,name:i.name,working:d})}return r},[o,I,Me]),be=a.useMemo(()=>{const n=f.getAreaForAgent(o);if(!n)return[];const r=[];for(const i of I.values())i.type==="http"&&f.isPositionInArea(i.position,n)&&r.push({id:i.id,name:i.name});return r},[o,I]),[,de]=a.useReducer(n=>n+1,0),_e=((it=ne.current)==null?void 0:it.search.searchMode)??!1,Ie=a.useCallback(()=>{var n;(n=ne.current)==null||n.search.toggleSearch(),de()},[]),we=ea(),tt=we.isPending(sn),[C,ve]=a.useState(null),W=C?I.get(C.buildingId):null,[ut,Te]=a.useState(""),[Ce,At]=a.useState(()=>ta()),z=a.useMemo(()=>{var n;return((n=f.getAreaForAgent(o))==null?void 0:n.id)??null},[o,I]),De=a.useCallback((n,r)=>{Te(""),ve(i=>{const d=(i==null?void 0:i.buildingId)===r?null:{type:n,buildingId:r};return z&&Wt(z,d),d})},[z]),ae=a.useCallback(()=>{Te(""),ve(null),z&&Wt(z,null)},[z]);a.useEffect(()=>{if((C==null?void 0:C.type)!=="pm2-logs")return;const n=C.buildingId;return f.startLogStreaming(n,200),()=>f.stopLogStreaming(n)},[C]);const{height:St,onResizeStart:Et}=na(),{sidePanelWidth:Mt,handleSidePanelResizeStart:It}=aa(),[ze,pt]=a.useState(()=>Ht(E.GIT_PANEL_OPEN,!1)),[je,_]=a.useState(()=>Ht(E.BUILDINGS_PANEL_OPEN,!1)),[Oe,mt]=a.useState(!1),Ne=a.useCallback(()=>{mt(n=>{const r=!n;return r&&sa.setEnabled(!0),r})},[]),se=a.useCallback(()=>mt(!1),[]),Xe=a.useCallback(()=>{pt(n=>{const r=!n;return Ae(E.GIT_PANEL_OPEN,r),r})},[]),ft=a.useCallback(()=>{_(n=>{const r=!n;return Ae(E.BUILDINGS_PANEL_OPEN,r),r})},[]),Tt=a.useCallback(()=>{pt(!1),Ae(E.GIT_PANEL_OPEN,!1)},[]),Pt=a.useCallback(()=>{_(!1),Ae(E.BUILDINGS_PANEL_OPEN,!1)},[]),Lt=ia(),Pe=a.useMemo(()=>({terminal:Ue,"pm2-logs":Ve,database:xe,tests:ce,http:be}),[Ue,Ve,xe,ce,be]);a.useEffect(()=>{if(!C)return;Pe[C.type].some(r=>r.id===C.buildingId)||(Te(""),ve(null))},[C,Pe]);const Ge=a.useRef(void 0);a.useEffect(()=>{var r;if(Ge.current===z)return;Ge.current=z;const n=z?fn()[z]:void 0;Te(""),n&&((r=Pe[n.type])!=null&&r.some(i=>i.id===n.buildingId))?ve(n):ve(null)},[z,Pe]),a.useEffect(()=>{const n=r=>{var O;const i=r.detail;if(!(i!=null&&i.buildingId)||!(i!=null&&i.type)||!((O=Pe[i.type])!=null&&O.some(re=>re.id===i.buildingId)))return;i.handled=!0,Te("");const d={type:i.type,buildingId:i.buildingId};ve(d),z&&Wt(z,d)};return window.addEventListener("tide:dock-building-flat",n),()=>window.removeEventListener("tide:dock-building-flat",n)},[Pe,z]);const[ie,ue]=a.useState(!1),pe=a.useRef(null);if(a.useEffect(()=>{if(!ie)return;const n=r=>{pe.current&&!pe.current.contains(r.target)&&ue(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[ie]),!b)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 ye=b.contextStats,Z=!!ye,ke=ye?ye.totalTokens:b.contextUsed||0,ht=ye?ye.contextWindow:b.contextLimit||2e5,Rt=ye?ye.usedPercent:Math.round(ke/ht*100),me=Math.max(0,Math.min(100,Rt)),nt=Math.round(me*10)/10,$t=Math.round((100-me)*10)/10,gt=me>=80?"#ff4a4a":me>=60?"#ff9e4a":me>=40?"#ffd700":"#4aff9e",at=(ke/1e3).toFixed(1),ee=(ht/1e3).toFixed(1),le=b.cwd,st=le?Pa(le):null,qe=((bt=b.subordinateIds)==null?void 0:bt.length)||0,xt=qe>0;return e.jsxs("div",{ref:We,className:`flat-terminal-wrapper ${ze||je||Oe?"flat-terminal-wrapper--with-side-panel":""} ${Qe?"pane-fading-out":""}`,style:{"--guake-side-panel-width":`min(${Mt}px, 70%)`},children:[e.jsxs("div",{className:"flat-terminal-wrapper__header",children:[e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__header-main ${Fe?"flat-terminal-wrapper__header-main--active":""}`,onClick:Ze,onContextMenu:n=>{n.preventDefault(),n.stopPropagation(),ct({x:n.clientX,y:n.clientY})},title:Fe?"Hide agent info":"Show agent info","aria-pressed":Fe,children:[e.jsx(un,{agent:b,size:28}),e.jsxs("span",{className:"flat-terminal-wrapper__header-info",children:[e.jsx("span",{className:"flat-terminal-wrapper__header-name",children:b.name}),e.jsx("span",{className:"flat-terminal-wrapper__header-status",style:{color:pn(b.status)},children:b.status})]}),b.taskLabel&&e.jsxs("span",{className:"flat-terminal-wrapper__header-task",title:b.taskLabel,children:["📋 ",b.taskLabel]}),e.jsxs("span",{className:"flat-terminal-wrapper__header-model",children:[e.jsx("img",{src:b.provider==="codex"?"/assets/codex.png":b.provider==="opencode"?"/assets/opencode.png":"/assets/claude.png",alt:b.provider,className:"flat-terminal-wrapper__header-provider-icon",title:b.provider==="codex"?"Codex Agent":b.provider==="opencode"?"OpenCode Agent":"Claude Agent"}),(()=>{const{model:n,effort:r}=La(b);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.jsxs("div",{className:"flat-terminal-wrapper__view-mode",role:"group","aria-label":"Message view mode",children:[Ea.map(n=>e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__view-mode-btn ${!fe&&m===n?"flat-terminal-wrapper__view-mode-btn--active":""}`,onClick:()=>{$e(!1),h(n)},title:Ta[n],"aria-pressed":!fe&&m===n,children:[e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon","aria-hidden":"true",children:Ia[n]}),e.jsx("span",{className:"flat-terminal-wrapper__view-mode-label",children:Ma[n]})]},n)),He&&e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__view-mode-btn ${fe?"flat-terminal-wrapper__view-mode-btn--active":""}`,onClick:()=>$e(n=>!n),title:"Classic TUI — attach to the live interactive claude session in a terminal","aria-pressed":fe,children:[e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon","aria-hidden":"true",children:e.jsx(p,{name:"terminal",size:13})}),e.jsx("span",{className:"flat-terminal-wrapper__view-mode-label",children:"Classic TUI"})]})]}),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:Q,disabled:!X,title:"Back to previous agent","aria-label":"Back to previous agent",children:e.jsx(p,{name:"arrow-left",size:14})}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:oe,disabled:!J,title:"Forward to next agent","aria-label":"Forward to next agent",children:e.jsx(p,{name:"arrow-right",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${_e?"flat-terminal-wrapper__action-btn--active":""}`,onClick:Ie,title:_e?"Close search":"Search messages","aria-pressed":_e,children:e.jsx(p,{name:_e?"cross":"search",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn flat-terminal-wrapper__action-btn--danger ${tt?"flat-terminal-wrapper__action-btn--confirm":""}`,onClick:()=>we.handleClick(sn,()=>{var n;f.clearContext(o),(n=ne.current)==null||n.historyLoader.clearHistory()}),title:tt?"Click again to confirm clear context":"Clear context",children:e.jsx(p,{name:tt?"question":"clear",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ze?"flat-terminal-wrapper__action-btn--active":""}`,onClick:Xe,title:ze?"Hide git panel":"Show git changes","aria-pressed":ze,children:e.jsx(p,{name:"git-branch",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${je?"flat-terminal-wrapper__action-btn--active":""}`,onClick:ft,title:je?"Hide buildings panel":"Show area buildings","aria-pressed":je,children:e.jsx(p,{name:"buildings",size:14})}),e.jsxs("div",{className:"flat-terminal-wrapper__more",ref:pe,children:[e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${ie?"flat-terminal-wrapper__action-btn--active":""}`,onClick:()=>ue(n=>!n),title:"More actions","aria-expanded":ie,children:"⋮"}),ie&&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:()=>{Ne(),ue(!1)},title:Oe?"Hide Debug Panel":"Show Debug Panel",children:[e.jsx(p,{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:()=>{f.collapseContext(o),ue(!1)},disabled:b.status!=="idle",title:b.status!=="idle"?"Agent must be idle to collapse context":"Collapse context",children:[e.jsx(p,{name:"package",size:14}),e.jsx("span",{children:"Collapse context"})]}),xt&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{F(o,qe),ue(!1)},children:[e.jsx(p,{name:"crown",size:14}),e.jsxs("span",{children:["Clear ",qe," subordinate",qe===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:()=>{f.killAgent(o),ue(!1)},children:[e.jsx(p,{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:$,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:()=>f.deselectAll(),title:"Close chat","aria-label":"Close chat",children:e.jsx(p,{name:"cross",size:14})})]})]}),fe&&He?e.jsx(Na,{agentId:o}):Re&&dt?e.jsx(la,{ref:ne,agentId:Re,agent:dt,viewMode:m,isOpen:!0,onImageClick:T,onFileClick:B,onBashClick:te,onViewMarkdown:w,keyboard:D,hasModalOpen:!1},Re):null,C&&W&&(()=>{var O,re;const n=C.type,r={terminal:"terminal","pm2-logs":"scroll",database:"hard-drives",tests:"flask",http:"globe"},i=n==="terminal"&&!((O=W.terminalStatus)!=null&&O.url),d=!i;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"guake-bottom-terminal-resize",onMouseDown:Et,role:"separator","aria-orientation":"horizontal","aria-label":"Resize embedded panel"}),e.jsxs("div",{className:"flat-bottom-panel",role:"region","aria-label":`${W.name} panel`,style:{height:St},children:[e.jsxs("div",{className:"flat-bottom-panel__header",children:[e.jsxs("span",{className:"flat-bottom-panel__title",children:[e.jsx(p,{name:r[n],size:12}),e.jsx("span",{children:W.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:ut,onChange:P=>Te(P.target.value),placeholder:"Filter logs","aria-label":`Filter logs for ${W.name}`,spellCheck:!1}),e.jsx("select",{className:"guake-bottom-terminal-retention",value:Ce===null?"unlimited":String(Ce),onChange:P=>{const Le=P.target.value==="unlimited"?null:Number(P.target.value);At(Le),oa(Le)},"aria-label":`Max log retention for ${W.name}`,children:ra.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:()=>f.clearStreamingLogs(C.buildingId),title:"Clear logs",children:e.jsx(p,{name:"trash",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>f.sendBuildingCommand(C.buildingId,"restart"),title:"Restart",children:e.jsx(p,{name:"restart",size:12})})]}),d&&e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>{ae(),Ke(C.buildingId)},title:"Maximize — open as modal","aria-label":"Open as modal",children:e.jsx(p,{name:"fullscreen",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:ae,title:"Close panel","aria-label":"Close panel",children:e.jsx(p,{name:"cross",size:12})})]})]}),e.jsx("div",{className:"flat-bottom-panel__body",children:n==="terminal"?(re=W.terminalStatus)!=null&&re.url?e.jsx(on,{terminalUrl:W.terminalStatus.url,visible:!0}):e.jsx("div",{className:"flat-bottom-panel__placeholder",children:"Starting terminal..."}):n==="pm2-logs"?e.jsx(ca,{buildingId:C.buildingId,filterText:ut,maxRetention:Ce}):n==="database"?e.jsx(da,{building:W}):n==="tests"?e.jsx("div",{className:"tests-panel-host",children:e.jsx(ua,{building:W,autoFocusSearch:!1})}):e.jsx("div",{className:"http-requests-panel-host",children:e.jsx(pa,{building:W,autoFocusSearch:!1})})})]})]})})(),e.jsxs("div",{className:"flat-terminal-wrapper__statusbar",role:"contentinfo",children:[b.isDetached&&e.jsxs("span",{className:"flat-terminal-wrapper__detached",title:"Reattaching session...",children:[e.jsx(p,{name:"refresh",size:12}),e.jsx("span",{children:"Reattaching"})]}),le&&st&&e.jsxs("span",{className:"flat-terminal-wrapper__cwd",title:`Open in file explorer: ${le}`,"aria-label":`Open ${le} in file explorer`,role:"button",tabIndex:0,onClick:()=>f.openFileExplorer(le),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),f.openFileExplorer(le))},children:[e.jsx("span",{className:"flat-terminal-wrapper__cwd-icon",children:e.jsx(p,{name:"folder",size:12})}),e.jsx("span",{className:"flat-terminal-wrapper__cwd-text",children:st})]}),Se&&Se.map(({areaId:n,areaName:r,dir:i})=>{const d=Ee.get(i),O=ge.has(i),re=i.split("/").filter(Boolean).pop()||i;return e.jsxs("span",{className:"flat-terminal-wrapper__area-dir",title:`${r}: ${i}${d?` (${d.branch}${d.ahead?` ↑${d.ahead}`:""}${d.behind?` ↓${d.behind}`:""})`:""}`,onClick:()=>f.openFileExplorerForAreaFolder(n,i),children:[e.jsx(p,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-terminal-wrapper__area-dir-name",children:re}),d&&e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"flat-terminal-wrapper__area-dir-branch",children:[e.jsx(p,{name:"git-branch",size:10})," ",d.branch]}),d.ahead>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-ahead",title:`${d.ahead} ahead`,children:[e.jsx(p,{name:"arrow-up",size:9}),d.ahead]}),d.behind>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-behind",title:`${d.behind} behind`,children:[e.jsx(p,{name:"arrow-down",size:9}),d.behind]}),e.jsx("span",{className:`flat-terminal-wrapper__area-fetch ${O?"flat-terminal-wrapper__area-fetch--fetching":""}`,title:"Git fetch",onClick:P=>{P.stopPropagation(),he(i)},children:e.jsx(p,{name:O?"hourglass":"download",size:12})})]})]},`${n}:${i}`)}),e.jsx(Aa,{agentId:o,disabled:((b==null?void 0:b.provider)??"claude")!=="claude",contextSummary:Z?`Context: ${at}k / ${ee}k tokens (${nt}% used)`:void 0,children:e.jsxs("span",{className:"flat-terminal-wrapper__context",tabIndex:0,role:"button",onClick:()=>f.setContextModalAgentId(o),onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),f.setContextModalAgentId(o))},title:((b==null?void 0:b.provider)??"claude")!=="claude"?Z?`Context usage: ${at}k / ${ee}k tokens (${nt}% used). Click to view stats.`:"Click to fetch context stats":void 0,children:[e.jsx("span",{className:"flat-terminal-wrapper__context-icon",children:e.jsx(p,{name:"dashboard",size:12})}),e.jsx("span",{className:"flat-terminal-wrapper__context-label",children:"Ctx:"}),e.jsx("span",{className:"flat-terminal-wrapper__context-bar",children:e.jsx("span",{className:"flat-terminal-wrapper__context-bar-fill",style:{width:`${me}%`,backgroundColor:gt}})}),e.jsxs("span",{className:"flat-terminal-wrapper__context-tokens",style:{color:gt},children:[at,"k/",ee,"k"]}),e.jsxs("span",{className:"flat-terminal-wrapper__context-free",children:["(",$t,"% free)"]}),!Z&&e.jsx("span",{className:"flat-terminal-wrapper__context-warning",title:"No context stats yet",children:e.jsx(p,{name:"warn",size:12})})]})}),e.jsx("div",{className:"flat-terminal-wrapper__statusbar-spacer","aria-hidden":"true"}),Ue.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area terminals",children:Ue.map(n=>{const r=(C==null?void 0:C.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){ae();return}if(n.hasUrl&&rt(n.id)==="modal"){Ke(n.id);return}n.hasUrl||f.sendBuildingCommand(n.id,"start"),De("terminal",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),K(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(p,{name:"terminal",size:14})},n.id)})}),Ve.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area PM2 logs",children:Ve.map(n=>{const r=(C==null?void 0:C.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?ae():rt(n.id)==="modal"?Ke(n.id):De("pm2-logs",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),K(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(p,{name:"scroll",size:14})},n.id)})}),xe.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area databases",children:xe.map(n=>{const r=(C==null?void 0:C.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?ae():rt(n.id)==="modal"?Ke(n.id):De("database",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),K(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(p,{name:"hard-drives",size:14})},n.id)})}),ce.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area tests",children:ce.map(n=>{const r=(C==null?void 0:C.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?ae():rt(n.id)==="modal"?Ke(n.id):De("tests",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),K(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(p,{name:"flask",size:14})},n.id)})}),be.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area HTTP requests",children:be.map(n=>{const r=(C==null?void 0:C.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?ae():rt(n.id)==="modal"?Ke(n.id):De("http",n.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),K(n.id,{x:i.clientX,y:i.clientY})},children:e.jsx(p,{name:"globe",size:14})},n.id)})}),e.jsx("div",{className:"flat-terminal-wrapper__theme",children:e.jsx(ma,{})})]}),ze&&e.jsx(fa,{agentId:o,agents:Lt,onClose:Tt,branchInfoMap:Ee,fetchRemote:he,fetchingDirs:ge,onResizeStart:n=>It(n,"right")}),je&&e.jsx(ha,{agentId:o,onClose:Pt}),Oe&&e.jsx(ga,{agentId:o,onClose:se})]})}),Da={groups:[],gridCols:1,gridRows:1,positions:new Map};function Wa({onAgentClick:u,onBuildingClick:o,onBuildingDoubleClick:m,onBuildingPopup:h,onAreaContextMenu:y,onOpenSpawnModal:$,onOpenBossSpawnModal:T,onOpenAreaModal:B}){const{t:te}=Ut(["common"]),w=An(),F=Sn(),[D,X]=a.useState(null),[J,Q]=a.useState(null),[oe,Fe]=a.useState(null);En("flatview-image-modal",D!==null,()=>X(null));const[Ze,ct]=a.useState(null),[K,b]=a.useState(null),[I,Je]=a.useState(null),[ne,We]=a.useState(null),[Re,Qe]=a.useState(!1),dt=a.useCallback(()=>{Qe(t=>!t)},[]),He=a.useCallback(()=>{Qe(!1)},[]),[fe,$e]=a.useState(()=>{const t=Yt(E.VIEW_MODE);return t==="simple"||t==="chat"||t==="advanced"?t:"simple"}),et=a.useCallback(t=>{$e(t),Kt(E.VIEW_MODE,t)},[]);a.useEffect(()=>{const t=s=>{if(s.key!==E.VIEW_MODE)return;const l=s.newValue;(l==="simple"||l==="chat"||l==="advanced")&&$e(l)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const[Se,Ee]=a.useState(()=>Ht(E.FLAT_INSPECTOR_OPEN,!1)),[he,ge]=a.useState(!1),Ue=a.useCallback(()=>ge(t=>!t),[]),Ve=a.useCallback(()=>ge(!1),[]);a.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-agents-drawer-state",{detail:{open:he}}))},[he]),a.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-inspector-state",{detail:{open:Se}}))},[Se]),a.useEffect(()=>{const t=()=>ge(j=>!j),s=()=>{Ee(j=>{const k=!j;return Ae(E.FLAT_INSPECTOR_OPEN,k),k})},l=()=>{ge(!1),Ee(!1),Ae(E.FLAT_INSPECTOR_OPEN,!1)},g=()=>ge(!1),x=()=>{Ee(!1),Ae(E.FLAT_INSPECTOR_OPEN,!1)};return window.addEventListener("tide-toggle-flat-agents-drawer",t),window.addEventListener("tide-toggle-flat-inspector",s),window.addEventListener("tide-close-flat-side-views",l),window.addEventListener("tide-close-flat-agents-drawer-only",g),window.addEventListener("tide-close-flat-inspector-only",x),()=>{window.removeEventListener("tide-toggle-flat-agents-drawer",t),window.removeEventListener("tide-toggle-flat-inspector",s),window.removeEventListener("tide-close-flat-side-views",l),window.removeEventListener("tide-close-flat-agents-drawer-only",g),window.removeEventListener("tide-close-flat-inspector-only",x)}},[]);const xe=a.useRef(null),Me=a.useRef(null),[ce,be]=a.useState(()=>{const t=Zt(E.FLAT_MIDDLE_WIDTH,0);return t>=kt?t:null}),[de,_e]=a.useState(()=>{const t=Zt(E.FLAT_INSPECTOR_WIDTH,0);return t>=Ft?t:null}),Ie=a.useCallback(t=>{if(typeof window>"u")return t;const s=de!==null?yt+de:0,l=window.innerWidth-an-yt-nn-s;return Math.max(kt,Math.min(Math.max(l,kt),t))},[de]),we=a.useCallback(t=>{var x;if(typeof window>"u")return t;const s=(x=xe.current)==null?void 0:x.querySelector(".flat-middle"),l=(s==null?void 0:s.getBoundingClientRect().width)??kt,g=window.innerWidth-an-l-yt-nn-yt;return Math.max(Ft,Math.min(Math.max(g,Ft),t))},[]);a.useEffect(()=>{if(ce===null&&de===null)return;const t=()=>{be(s=>{if(s===null)return s;const l=Ie(s);return l===s?s:l}),_e(s=>{if(s===null)return s;const l=we(s);return l===s?s:l})};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[ce,de,Ie,we]);const tt=a.useCallback(t=>{var l;if(t.button!==0)return;const s=(l=xe.current)==null?void 0:l.querySelector(".flat-middle");s&&(t.currentTarget.setPointerCapture(t.pointerId),Me.current={kind:"middle",startX:t.clientX,startWidth:s.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),C=a.useCallback(t=>{var l;if(t.button!==0)return;const s=(l=xe.current)==null?void 0:l.querySelector(".flat-inspector");s&&(t.currentTarget.setPointerCapture(t.pointerId),Me.current={kind:"inspector",startX:t.clientX,startWidth:s.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),ve=a.useCallback(t=>{const s=Me.current;if(!s||t.pointerId!==s.pointerId)return;const l=t.clientX-s.startX;s.kind==="middle"?be(Ie(s.startWidth+l)):_e(we(s.startWidth-l))},[Ie,we]),W=a.useCallback(t=>{const s=Me.current;if(!s||t.pointerId!==s.pointerId)return;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}if(Me.current=null,document.body.classList.remove("flat-splitter-dragging"),!(Math.abs(t.clientX-s.startX)>2))return;const g=t.clientX-s.startX;if(s.kind==="middle"){const x=Ie(s.startWidth+g);be(x),Nt(E.FLAT_MIDDLE_WIDTH,x)}else{const x=we(s.startWidth-g);_e(x),Nt(E.FLAT_INSPECTOR_WIDTH,x)}},[Ie,we]),ut=a.useCallback(()=>{be(null),Nt(E.FLAT_MIDDLE_WIDTH,0)},[]),Te=a.useCallback(()=>{_e(null),Nt(E.FLAT_INSPECTOR_WIDTH,0)},[]),[Ce,At]=a.useState(()=>Yt(E.FLAT_INSPECTOR_VIEW)==="tracking"?"tracking":"agent"),z=a.useCallback(t=>{At(t),Kt(E.FLAT_INSPECTOR_VIEW,t)},[]),De=a.useCallback(()=>{Ee(t=>{const s=!t;return Ae(E.FLAT_INSPECTOR_OPEN,s),s})},[]),ae=a.useCallback(()=>{Ee(!1),Ae(E.FLAT_INSPECTOR_OPEN,!1)},[]),St=Mn(),Et=a.useCallback((t,s)=>{X({url:t,name:s})},[]),Mt=a.useCallback((t,s)=>{Q({command:t,output:s,isLive:!1})},[]),It=a.useCallback((t,s)=>{var x;const l=F.size>0?Array.from(F)[0]:null,g=l?(x=f.getState().agents.get(l))==null?void 0:x.cwd:void 0;f.setFileViewerPath(t,s,g)},[F]),ze=a.useCallback(t=>{Fe(t)},[]),pt=a.useCallback((t,s)=>{ct({agentId:t,count:s})},[]),je=a.useCallback(t=>{m?m(t):o(t)},[o,m]),_=a.useMemo(()=>F.size>0?Array.from(F)[0]:null,[F]),Oe=a.useCallback(t=>{_&&b({agentId:_,position:t})},[_]),mt=a.useCallback((t,s)=>{Je({buildingId:t,position:s})},[]);a.useEffect(()=>{Qe(!1)},[_]);const Ne=a.useRef([]),se=a.useRef(-1),Xe=a.useRef(!1),ft=a.useRef(null),[Tt,Pt]=a.useState(!1),[Lt,Pe]=a.useState(!1),Ge=a.useRef(!1),ie=a.useRef(null),ue=a.useRef(!1),pe=a.useMemo(()=>new Set(w.map(t=>t.id)),[w]),ye=a.useMemo(()=>{const t=new Map(w.map(l=>[l.id,l])),s=new Map;for(const l of w)if((l.isBoss||l.class==="boss")&&l.subordinateIds&&l.subordinateIds.length>0){const g=l.subordinateIds.map(x=>t.get(x)).filter(x=>x!==void 0);g.length>0&&s.set(l.id,g)}return s},[w]),Z=a.useCallback(()=>{const t=Ne.current,s=se.current;Pt(s>0),Pe(s>=0&&s<t.length-1)},[]),ke=a.useCallback(t=>{const s=Ne.current;if(s.length===0)return;let l=se.current+t;for(;l>=0&&l<s.length;){const g=s[l];if(pe.has(g)){Xe.current=!0,se.current=l,Z(),f.selectAgent(g);return}l+=t}},[pe,Z]),ht=a.useCallback(()=>ke(-1),[ke]),Rt=a.useCallback(()=>ke(1),[ke]);va(a.useCallback(()=>{const t=Ne.current,s=se.current;return t.length>0&&s>0?(ke(-1),"handled"):"exit"},[ke]));const me=a.useCallback((t,s)=>{if(typeof window>"u")return;const l=window.history.state,x={...typeof l=="object"&&l!==null?l:{},__flatAgentNav:{agentId:t}};s==="replace"?window.history.replaceState(x,"",window.location.href):window.history.pushState(x,"",window.location.href)},[]);a.useEffect(()=>{if(!_){Ge.current=!1,ie.current=null;return}if(!Ge.current){me(_,"replace"),Ge.current=!0,ie.current=_;return}if(ue.current){ue.current=!1,ie.current=_;return}ie.current!==_&&(me(_,"push"),ie.current=_)},[_,me]),a.useEffect(()=>{const t=s=>{var j,k;const l=(k=(j=s.state)==null?void 0:j.__flatAgentNav)==null?void 0:k.agentId;if(!l||typeof l!="string"||!pe.has(l)||l===_)return;ue.current=!0,Xe.current=!0;const g=Ne.current,x=g.lastIndexOf(l);x>=0?se.current=x:(g.push(l),se.current=g.length-1),Z(),f.selectAgent(l)};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[pe,_,Z]),a.useEffect(()=>{if(!_){Ne.current=[],se.current=-1,Z();return}if(ft.current=_,Xe.current){Xe.current=!1,Z();return}const t=Ne.current,s=se.current;if(s>=0&&t[s]===_){Z();return}const l=s<t.length-1?t.slice(0,s+1):t.slice();l.push(_),l.length>100&&l.shift(),Ne.current=l,se.current=l.length-1,Z()},[_,Z]);const nt=a.useCallback(t=>{u(t),ge(!1)},[u]),$t=_??"",gt=a.useCallback(()=>{},[]),at=a.useCallback(t=>{nt(t)},[nt]),ee=Se,[le,st]=a.useState(ee),[qe,xt]=a.useState(ee);a.useEffect(()=>{if(ee){st(!0);return}xt(!1);const t=setTimeout(()=>st(!1),240);return()=>clearTimeout(t)},[ee]),a.useEffect(()=>{if(!le||!ee)return;let t=0;const s=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>xt(!0))});return()=>{cancelAnimationFrame(s),cancelAnimationFrame(t)}},[le,ee]);const it=a.useRef(null);a.useEffect(()=>{if(_)return;const t=s=>{if(s.key!==" "&&s.key!=="Backspace")return;const l=s.target;if(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable)return;const g=ft.current;!g||!pe.has(g)||(s.preventDefault(),f.selectAgent(g))};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[_,pe]);const[bt,n]=a.useState(new Set),r=a.useCallback(t=>{n(s=>{const l=new Set(s);return l.has(t)?l.delete(t):l.add(t),l})},[]),[i,d]=a.useState(()=>typeof window<"u"&&window.matchMedia("(max-width: 768px)").matches);a.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(max-width: 768px)"),s=l=>d(l.matches);return t.addEventListener("change",s),()=>t.removeEventListener("change",s)},[]);const[O,re]=a.useState(null),P=a.useCallback(t=>{re(s=>s===t?null:t)},[]),Le=cn(),Ye=dn(),[_t]=In(),L=a.useMemo(()=>{if(_)return Da;const t=new Map,s=[];for(const v of w){const S=f.getAreaForAgent(v.id);if(!Jt((S==null?void 0:S.id)??null))continue;if(!S||S.archived){s.push(v);continue}const M=t.get(S.id);M?M.push(v):t.set(S.id,[v])}const l=new Map,g=[];for(const v of Ye.values()){let S=!1;for(const M of Le.values())if(!M.archived&&Qt(M.id)&&f.isPositionInArea(v.position,M)){const G=l.get(M.id);G?G.push(v):l.set(M.id,[v]),S=!0;break}!S&&Jt(null)&&g.push(v)}const x=[];for(const[,v]of Le){if(v.archived||!Qt(v.id))continue;const S=t.get(v.id),M=l.get(v.id)??[];(S&&S.length>0||M.length>0)&&x.push({area:v,agents:S??[],buildings:M})}(s.length>0||g.length>0)&&x.push({area:{id:"__unassigned__",name:"Unassigned",color:"#6272a4",center:{x:0,z:0},type:"circle",radius:0,directories:[],archived:!1,assignedAgentIds:[],zIndex:0},agents:s,buildings:g});const j=x.filter(v=>v.area.id!=="__unassigned__"),k=x.filter(v=>v.area.id==="__unassigned__");let c=1,A=1;const V=new Map;if(j.length>1){let v=1/0,S=-1/0,M=1/0,G=-1/0;for(const q of j)v=Math.min(v,q.area.center.x),S=Math.max(S,q.area.center.x),M=Math.min(M,q.area.center.z),G=Math.max(G,q.area.center.z);const vt=S-v||1,Ct=G-M||1;if(j.length<=4){c=j.length,A=1;const q=[...j].sort((Y,Dt)=>Y.area.center.x-Dt.area.center.x);for(let Y=0;Y<q.length;Y++)V.set(q[Y].area.id,{row:1,col:Y+1})}else{const q=[...j].sort((N,H)=>N.area.center.x-H.area.center.x),Y=[];for(let N=1;N<q.length;N++)Y.push(q[N].area.center.x-q[N-1].area.center.x);const Dt=Y.reduce((N,H)=>N+H,0)/Y.length||1;let Vt=1;for(const N of Y)N>Dt*1.3&&Vt++;c=Math.max(2,Math.min(Vt,j.length));const zt=[...j].sort((N,H)=>N.area.center.z-H.area.center.z),jt=[];for(let N=1;N<zt.length;N++)jt.push(zt[N].area.center.z-zt[N-1].area.center.z);const gn=jt.reduce((N,H)=>N+H,0)/jt.length||1;let Xt=1;for(const N of jt)N>gn*1.3&&Xt++;A=Math.max(2,Math.min(Xt,j.length)),c=Math.max(c,Math.ceil(j.length/A)),A=Math.max(A,Math.ceil(j.length/c));const xn=vt/c,bn=Ct/A,Ot=new Set;for(const N of j){let H=Math.min(c-1,Math.max(0,Math.floor((N.area.center.x-v)/xn))),Be=Math.min(A-1,Math.max(0,Math.floor((N.area.center.z-M)/bn))),lt=`${Be},${H}`,Gt=0;const _n=A*c;for(;Ot.has(lt)&&Gt<_n;)H++,H>=c&&(H=0,Be=(Be+1)%A),lt=`${Be},${H}`,Gt++;Ot.has(lt)&&(Be=A,H=0,lt=`${Be},${H}`,A++),Ot.add(lt),V.set(N.area.id,{row:Be+1,col:H+1})}}}const R=v=>{v.sort((S,M)=>{var vt,Ct,q,Y;const G=(((vt=S.position)==null?void 0:vt.z)??0)-(((Ct=M.position)==null?void 0:Ct.z)??0);return G!==0?G:(((q=S.position)==null?void 0:q.x)??0)-(((Y=M.position)==null?void 0:Y.x)??0)})};for(const v of j)R(v.agents);for(const v of k)R(v.agents);return{groups:[...j,...k],gridCols:c,gridRows:A,positions:V}},[w,Le,Ye,_t,_]),U=a.useMemo(()=>{if(!K)return[];const t=w.find(s=>s.id===K.agentId);return t?[{id:"edit-agent",label:"Edit Agent",icon:e.jsx(p,{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(p,{name:"chat",size:14}),onClick:()=>u(t.id)},{id:"clone-agent",label:"Clone Agent",icon:e.jsx(p,{name:"clipboard",size:14}),onClick:()=>f.cloneAgent(t.id)},{id:"fork-agent",label:"Fork Agent (with history)",icon:e.jsx(p,{name:"git-branch",size:14}),onClick:()=>f.forkAgent(t.id)},{id:"delete-agent",label:"Delete Agent",icon:e.jsx(p,{name:"trash",size:14}),danger:!0,onClick:()=>{We({agentId:t.id,name:t.name})}}]:[]},[K,w,u]),wt=a.useMemo(()=>{var j;if(!I)return[];const t=Ye.get(I.buildingId);if(!t)return[];const s=[],l=t.type==="server"||t.type==="docker"||t.type==="terminal",g=t.status==="running",x=t.type==="boss";if(s.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"&&((j=t.pm2)!=null&&j.enabled)?"View PM2 Logs":"Open",icon:e.jsx(p,{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:()=>je(t.id)}),l&&(g||s.push({id:"start",label:"Start",icon:e.jsx(p,{name:"play",size:14}),onClick:()=>f.sendBuildingCommand(t.id,"start")}),g&&(s.push({id:"restart",label:"Restart",icon:e.jsx(p,{name:"refresh",size:14}),onClick:()=>f.sendBuildingCommand(t.id,"restart")}),s.push({id:"stop",label:"Stop",icon:e.jsx(p,{name:"stop",size:14}),onClick:()=>f.sendBuildingCommand(t.id,"stop")}))),x&&t.subordinateBuildingIds&&t.subordinateBuildingIds.length>0&&(s.push({id:"start-all",label:"Start All Subordinates",icon:e.jsx(p,{name:"launch",size:14}),onClick:()=>{for(const k of t.subordinateBuildingIds)f.sendBuildingCommand(k,"start")}}),s.push({id:"stop-all",label:"Stop All Subordinates",icon:e.jsx(p,{name:"pause",size:14}),onClick:()=>{for(const k of t.subordinateBuildingIds)f.sendBuildingCommand(k,"stop")}}),s.push({id:"restart-all",label:"Restart All Subordinates",icon:e.jsx(p,{name:"restart",size:14}),onClick:()=>{for(const k of t.subordinateBuildingIds)f.sendBuildingCommand(k,"restart")}})),l&&s.push({id:"health-check",label:"Health Check",icon:e.jsx(p,{name:"health",size:14}),onClick:()=>f.sendBuildingCommand(t.id,"healthCheck")}),s.push({id:"divider-edit",label:"",divider:!0,onClick:()=>{}}),s.push({id:"edit",label:"Edit Building",icon:e.jsx(p,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:building-edit",{detail:{buildingId:t.id}}))}}),s.push({id:"clone",label:"Clone Building",icon:e.jsx(p,{name:"copy",size:14}),onClick:()=>{f.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 k of t.urls)s.push({id:`url-${k.label}`,label:k.label,icon:e.jsx(p,{name:"link",size:14}),onClick:()=>window.open(k.url,"_blank","noopener,noreferrer")});return s.push({id:"divider-danger",label:"",divider:!0,onClick:()=>{}}),s.push({id:"delete",label:"Delete Building",icon:e.jsx(p,{name:"trash",size:14}),danger:!0,onClick:()=>f.deleteBuilding(t.id)}),s},[I,Ye,je]),hn=a.useCallback(t=>{const s=new Set(L.groups.map(l=>l.area.id));s.delete(t),n(s),requestAnimationFrame(()=>{const l=it.current;if(!l)return;const g=l.querySelector(`[data-area-id="${t}"]`);if(!g)return;const x=l.getBoundingClientRect(),k=g.getBoundingClientRect().top-x.top+l.scrollTop-8;l.scrollTo({top:Math.max(0,k),behavior:"smooth"})})},[L]);return e.jsxs("div",{ref:xe,className:`flat-view ${ee?"flat-view--with-inspector":""} ${_?"flat-view--has-chat":""} ${he?"flat-view--mobile-sidebar-open":""}`,style:(()=>{if(ce===null&&de===null)return;const t={};return ce!==null&&(t["--flat-middle-width"]=`${ce}px`),de!==null&&(t["--flat-inspector-width"]=`${de}px`),t})(),children:[he&&e.jsx("div",{className:"flat-mobile-sidebar-backdrop",onClick:Ve,"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:$,title:"Create new agent",children:"+ Agent"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--boss",onClick:T,title:"Create new boss agent",children:"+ Boss"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--area",onClick:B,title:"Create new area",children:"+ Area"})]})}),e.jsx("div",{className:"flat-middle__content",children:e.jsx(Tn,{activeAgentId:$t,onClose:gt,onSelectAgent:at,collapsedAreas:bt,onToggleArea:r,agentListRef:it})})]}),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:tt,onPointerMove:ve,onPointerUp:W,onPointerCancel:W,onDoubleClick:ut}),e.jsxs("div",{className:"flat-right",children:[e.jsxs("button",{type:"button",className:"flat-mobile-sidebar-toggle","aria-label":he?"Close agents sidebar":"Open agents sidebar","aria-expanded":he,onClick:Ue,children:[e.jsx(p,{name:"list",size:18}),e.jsx("span",{className:"flat-mobile-sidebar-toggle__label",children:"Agents"})]}),_?e.jsx($a,{agentId:_,terminalViewMode:fe,onTerminalViewModeChange:et,inspectorOpen:Se,onToggleInspector:De,onImageClick:Et,onFileClick:It,onBashClick:Mt,onViewMarkdown:ze,onRequestClearSubordinates:pt,keyboard:St,canNavigateBack:Tt,canNavigateForward:Lt,onNavigateBack:ht,onNavigateForward:Rt,agentInfoOpen:Re,onToggleAgentInfo:dt,onHeaderContextMenu:Oe,onBuildingContextMenu:mt}):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.jsx(Sa,{className:"flat-map__view-mode"})]}),e.jsx("div",{className:"flat-map__grid",style:{gridTemplateColumns:`repeat(${L.gridCols}, 1fr)`},children:L.groups.length===0?e.jsx("div",{className:"flat-map__empty",children:e.jsx("span",{children:"No areas or agents yet"})}):(()=>{var s;const t=i&&O?((s=L.positions.get(O))==null?void 0:s.row)??null:null;return L.groups.map(l=>{var k;const g=l.area.id,x=L.positions.get(g),j=i&&O!==g;return i&&t!=null&&(x==null?void 0:x.row)===t&&g!==O?null:e.jsxs("div",{className:`flat-map-area-card${j?" flat-map-area-card--collapsed":""}`,style:{"--area-color":l.area.color,gridRow:x==null?void 0:x.row,gridColumn:x==null?void 0:x.col},onContextMenu:c=>{y&&(c.preventDefault(),c.stopPropagation(),y(g,{x:c.clientX,y:c.clientY}))},children:[((k=l.area.logo)==null?void 0:k.filename)&&e.jsx("img",{className:"flat-map-area-card__logo",src:wa(l.area.logo.filename),alt:"","aria-hidden":"true",onError:c=>{c.currentTarget.style.display="none"}}),e.jsxs("button",{type:"button",className:"flat-map-area-card__header",onClick:()=>i?P(g):hn(g),title:i?j?`Expand ${l.area.name}`:`Collapse ${l.area.name}`:`Focus ${l.area.name} in left panel`,"aria-expanded":i?!j:void 0,children:[e.jsx("span",{className:"flat-map-area-card__color",style:{background:l.area.color}}),e.jsx("span",{className:"flat-map-area-card__name",children:l.area.name}),e.jsx("span",{className:"flat-map-area-card__count",children:l.agents.length}),i&&e.jsx(p,{name:j?"caret-down":"caret-up",size:11,className:"flat-map-area-card__caret"})]}),e.jsx("div",{className:"flat-map-area-card__agents",children:l.agents.map(c=>{const A=c.isBoss||c.class==="boss",V=A?ye.get(c.id):void 0,R=Pn(c),v=R.usedPercent>=80?"#ff4a4a":R.usedPercent>=60?"#ff9e4a":R.usedPercent>=40?"#ffd700":"#4aff9e",S=`Context: ${(R.totalTokens/1e3).toFixed(1)}k / ${(R.contextWindow/1e3).toFixed(1)}k (${R.usedPercent}% used, ${R.freePercent}% free)`,M=c.latestTodos&&c.latestTodos.length>0||V&&V.length>0;return e.jsx(Ln,{todos:c.latestTodos,subordinates:V,position:"top",children:e.jsxs("button",{type:"button",className:`flat-map-agent-chip ${c.status}`,onClick:()=>u(c.id),onContextMenu:G=>{G.preventDefault(),G.stopPropagation(),b({agentId:c.id,position:{x:G.clientX,y:G.clientY}})},title:M?void 0:`${A?"Boss · ":""}Open chat with ${c.name}
2
- ${S}`,children:[e.jsx(un,{agent:c,size:16}),A&&e.jsx("span",{className:"flat-map-agent-chip__crown","aria-hidden":"true",children:e.jsx(p,{name:"crown",size:11,color:"#ffd700",weight:"fill"})}),e.jsx("span",{className:"flat-map-agent-chip__name",children:c.name}),e.jsx("img",{src:c.provider==="codex"?"/assets/codex.png":c.provider==="opencode"?"/assets/opencode.png":"/assets/claude.png",alt:c.provider,className:"flat-map-agent-chip__provider-icon",title:c.provider==="codex"?"Codex Agent":c.provider==="opencode"?"OpenCode Agent":"Claude Agent"}),e.jsx("span",{className:"flat-map-agent-chip__dot",style:{backgroundColor:pn(c.status)}}),c.latestTodos&&c.latestTodos.length>0&&e.jsx(Rn,{todos:c.latestTodos,maxDots:6}),A&&V&&V.length>0&&e.jsx($n,{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:`${R.usedPercent}%`,backgroundColor:v}})})]})},c.id)})}),l.area.directories.length>0&&e.jsx("div",{className:"flat-map-area-card__folders",role:"group","aria-label":`${l.area.name} folders`,children:l.area.directories.map(c=>{const A=c.split("/").filter(Boolean).pop()||c;return e.jsxs("button",{type:"button",className:"flat-map-folder-chip",onClick:V=>{V.stopPropagation(),f.openFileExplorerForAreaFolder(g,c)},title:`Open in file explorer: ${c}`,children:[e.jsx(p,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-map-folder-chip__name",children:A})]},c)})}),l.buildings.length>0&&e.jsx("div",{className:"flat-map-area-card__buildings",children:l.buildings.map(c=>{var V;const A=(V=Dn[c.type])==null?void 0:V.color;return e.jsxs("button",{type:"button",className:`flat-map-building-chip flat-map-building-chip--${c.status}`,style:A?{"--building-type-color":A}:void 0,onClick:R=>{if(h){const v=R.currentTarget.getBoundingClientRect();h(c.id,{x:v.right,y:v.top+v.height/2})}else je(c.id)},onContextMenu:R=>{R.preventDefault(),R.stopPropagation(),Je({buildingId:c.id,position:{x:R.clientX,y:R.clientY}})},title:`${c.name} · ${c.type} · ${c.status}`,children:[e.jsx(p,{name:zn(c.type),size:12,color:A}),e.jsx("span",{className:"flat-map-building-chip__name",children:c.name}),e.jsx("span",{className:"flat-map-building-chip__dot",style:{backgroundColor:On(c.status)}})]},c.id)})})]},g)})})()})]})})]}),ee&&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:C,onPointerMove:ve,onPointerUp:W,onPointerCancel:W,onDoubleClick:Te}),le&&e.jsxs("aside",{className:`flat-inspector ${qe?"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":Ce==="agent",className:`flat-inspector__tab ${Ce==="agent"?"flat-inspector__tab--active":""}`,onClick:()=>z("agent"),children:"Agent"}),e.jsx("button",{type:"button",role:"tab","aria-selected":Ce==="tracking",className:`flat-inspector__tab ${Ce==="tracking"?"flat-inspector__tab--active":""}`,onClick:()=>z("tracking"),children:"Tracking"})]}),e.jsx("button",{type:"button",className:"flat-inspector__close",onClick:ae,title:"Close inspector","aria-label":"Close inspector",children:"✕"})]}),e.jsx("div",{className:"flat-inspector__body",children:Ce==="tracking"?e.jsx(Bn,{activeAgentId:_??"",onSelectAgent:t=>{u(t),window.innerWidth<=768&&ae()}}):(()=>{if(!_)return e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Select an agent to inspect"})});const t=w.find(s=>s.id===_);return t?e.jsx(Fn,{agent:t,onFocusAgent:s=>{u(s),window.innerWidth<=768&&ae()},onKillAgent:s=>f.killAgent(s)}):e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Agent not found"})})})()})]}),D&&e.jsx(Wn,{url:D.url,name:D.name,onClose:()=>X(null)}),J&&e.jsx(Hn,{state:J,onClose:()=>Q(null)}),e.jsx(Un,{agent:_?w.find(t=>t.id===_)??null:null,content:oe,onClose:()=>Fe(null)}),Ze&&e.jsx(Vn,{action:"clear-subordinates",selectedAgentId:Ze.agentId,subordinateCount:Ze.count,onClose:()=>ct(null),onClearHistory:()=>{}}),e.jsx(Xn,{agent:_?w.find(t=>t.id===_)??null:null,isOpen:Re&&!!_,onClose:He}),e.jsx(en,{isOpen:K!==null,position:(K==null?void 0:K.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:U,onClose:()=>b(null)}),e.jsx(en,{isOpen:I!==null,position:(I==null?void 0:I.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:wt,onClose:()=>Je(null)}),e.jsx(Gn,{isOpen:ne!==null,title:te("common:confirm.removeAgentTitle"),message:te("common:confirm.removeAgentMessage",{name:(ne==null?void 0:ne.name)??""}),confirmLabel:te("common:buttons.remove"),cancelLabel:te("common:buttons.cancel"),variant:"danger",onConfirm:()=>{ne&&f.removeAgentFromServer(ne.agentId)},onClose:()=>We(null)})]})}export{Wa as FlatView};