tide-commander 1.45.0 → 1.47.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/dist/assets/{BossLogsModal-N4CnX-0x.js → BossLogsModal-BEZSJWBV.js} +1 -1
- package/dist/assets/BossSpawnModal-BknVJp2f.js +1 -0
- package/dist/assets/{ControlsModal-Cr5klRxS.js → ControlsModal-BZKmtLz7.js} +1 -1
- package/dist/assets/{DockerLogsModal-D6U9obTe.js → DockerLogsModal-DD8gRVu6.js} +1 -1
- package/dist/assets/{EmbeddedEditor-Bnm-9Q73.js → EmbeddedEditor-DMcKiZ5q.js} +1 -1
- package/dist/assets/{GmailOAuthSetup-GoKvyYWS.js → GmailOAuthSetup-CO2LqLvU.js} +1 -1
- package/dist/assets/{GoogleOAuthSetup-D3sAGlZq.js → GoogleOAuthSetup-OVzavssB.js} +1 -1
- package/dist/assets/{IframeModal-DQqev6_V.js → IframeModal-DJn-dNqr.js} +1 -1
- package/dist/assets/IntegrationsPanel-C0JSiDOw.js +2 -0
- package/dist/assets/{LogViewerModal-DB0xx-oB.js → LogViewerModal-BgIfdR-l.js} +1 -1
- package/dist/assets/{MonitoringModal-BspW74kP.js → MonitoringModal-Dm8wbcHY.js} +1 -1
- package/dist/assets/{PM2LogsModal-Cz4GZtyl.js → PM2LogsModal-CDULU4yk.js} +1 -1
- package/dist/assets/{RestoreArchivedAreaModal-KCCSJy3B.js → RestoreArchivedAreaModal-DLuiZj6S.js} +1 -1
- package/dist/assets/{SaveSnapshotModal-DqZ1JedM.js → SaveSnapshotModal-CbfjHVJz.js} +1 -1
- package/dist/assets/Scene2DCanvas-Dw9o4Fk8.js +1 -0
- package/dist/assets/{SceneManager-DggU0iAh.js → SceneManager-KAhHYpUf.js} +1 -1
- package/dist/assets/SkillsPanel-BYy3W8hd.js +28 -0
- package/dist/assets/SnapshotManager-LxlHIjaa.js +1 -0
- package/dist/assets/SpawnModal-Ch7yKsdS.js +1 -0
- package/dist/assets/SubordinateAssignmentModal-zuSTZAqj.js +1 -0
- package/dist/assets/{SupervisorPanel-CxId5lI7.js → SupervisorPanel-tTfMa-0x.js} +1 -1
- package/dist/assets/{TriggerManagerPanel-BCzGGCPD.js → TriggerManagerPanel-BoHdbpqk.js} +2 -2
- package/dist/assets/{WorkflowEditorPanel-BmNCGmxP.js → WorkflowEditorPanel-Cusd-51G.js} +2 -2
- package/dist/assets/{index-8WVMR823.js → index-BPn1NjZ5.js} +1 -1
- package/dist/assets/{index-CvJuv-ho.js → index-BoFICHSl.js} +2 -2
- package/dist/assets/{index-Sej69v19.js → index-C_3LXJYS.js} +3 -3
- package/dist/assets/{index-Bhb-rse9.js → index-CeMGJMtZ.js} +3 -3
- package/dist/assets/{index-COBkxsEU.js → index-ChZ1qMl3.js} +1 -1
- package/dist/assets/{index-C9B8kaWK.js → index-Cxx3kFoj.js} +1 -1
- package/dist/assets/{index-CcYTUJp1.js → index-D3KwWKEv.js} +4 -4
- package/dist/assets/index-ifiZ65Cu.js +1 -0
- package/dist/assets/main-3GpIvzEr.css +1 -0
- package/dist/assets/main-BsOvZp5M.js +153 -0
- package/dist/assets/{web-RTEsf66y.js → web-B5moyGVG.js} +1 -1
- package/dist/assets/{web-CrUhsC9T.js → web-BYzo_b4X.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/src/packages/server/data/index.js +25 -0
- package/dist/src/packages/server/routes/config.js +7 -0
- package/dist/src/packages/server/routes/custom-class-icons.js +138 -0
- package/dist/src/packages/server/routes/index.js +2 -0
- package/dist/src/packages/server/services/custom-class-service.js +7 -2
- package/package.json +1 -1
- package/dist/assets/BossSpawnModal-4CPjS2xn.js +0 -1
- package/dist/assets/IntegrationsPanel-C9hWD7mO.js +0 -2
- package/dist/assets/Scene2DCanvas-MRhWT6EA.js +0 -1
- package/dist/assets/SkillsPanel-DZC0Im2z.js +0 -28
- package/dist/assets/SnapshotManager-3LQMRFLh.js +0 -1
- package/dist/assets/SpawnModal-C_e6q2uv.js +0 -1
- package/dist/assets/SubordinateAssignmentModal-BZdSk9WL.js +0 -1
- package/dist/assets/index-B8SWRPUd.js +0 -1
- package/dist/assets/main-6CnCKW13.js +0 -153
- package/dist/assets/main-DjGrMNoB.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as ts,u as ns,B as _s,j as e,C as Is,E as Ms,G as Es,H as $s,r as g,I as Ds,J as Ss,K as Ls,L as Xs,s as U,n as Z}from"./main-BsOvZp5M.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const Rs=1,gs=Rs*2.5;function Ps(s,v,d){const l=v.filter(o=>o.position&&!isNaN(o.position.x)&&!isNaN(o.position.z));let t,i,n,u;if(s.type==="rectangle"){const o=(s.width||10)/2,b=(s.height||10)/2;t=s.center.x-o,i=s.center.x+o,n=s.center.z-b,u=s.center.z+b}else{const o=s.radius||5;t=s.center.x-o,i=s.center.x+o,n=s.center.z-o,u=s.center.z+o}const p=2;if(t+=p,i-=p,n+=p,u-=p,d){const o={...d};if(o.x=Math.max(t,Math.min(i,o.x)),o.z=Math.max(n,Math.min(u,o.z)),fs(o,l,s))return o}const N=(t+i)/2,S=(n+u)/2,j=Math.min(i-N,u-S);for(let o=0;o<j;o+=gs*.5)for(let b=0;b<Math.PI*2;b+=Math.PI/8){const z=N+Math.cos(b)*o,M=S+Math.sin(b)*o,_={x:z,z:M};if(_.x=Math.max(t,Math.min(i,_.x)),_.z=Math.max(n,Math.min(u,_.z)),fs(_,l,s))return _}return{x:N,z:S}}function fs(s,v,d){for(const l of v){if(!l.position)continue;if(Math.hypot(s.x-l.position.x,s.z-l.position.z)<gs)return!1}if(d.type==="rectangle"){const l=(d.width||10)/2,t=(d.height||10)/2,i=s.x>=d.center.x-l+1&&s.x<=d.center.x+l-1,n=s.z>=d.center.z-t+1&&s.z<=d.center.z+t-1;return i&&n}else{const l=(d.radius||5)-1;return Math.hypot(s.x-d.center.x,s.z-d.center.z)<=l}}function vs(s){switch(s){case"idle":case"running":return"healthy";case"working":case"waiting":case"waiting_permission":case"starting":case"stopping":return"working";case"error":case"offline":case"orphaned":case"stopped":return"error";default:return"unknown"}}function Us(s){switch(s){case"server":return"🖥️";case"link":return"🔗";case"database":return"🗄️";case"docker":return"🐳";case"monitor":return"📊";case"folder":return"📁";case"boss":return"🏰";default:return"🏢"}}function Ys(s,v){const d=[],l=new Set;for(const i of v.values()){if(i.archived)continue;const n=[];for(const u of i.assignedAgentIds){const p=s.get(u);p&&(n.push(p),l.add(u))}d.push({area:i,agents:n,label:i.name,color:i.color})}d.sort((i,n)=>i.label.localeCompare(n.label));const t=[];for(const i of s.values())l.has(i.id)||t.push(i);return t.length>0&&d.push({area:null,agents:t,label:"Unassigned",color:"#555"}),d}function Gs(s,v){const d=[],l=[],t=[];for(const n of s.values())n.status==="working"||n.status==="waiting"||n.status==="waiting_permission"?d.push(n):n.status==="error"||n.status==="offline"||n.status==="orphaned"?t.push(n):v&&v.has(n.id)?d.push(n):l.push(n);const i=[];return t.length>0&&i.push({area:null,agents:t,label:"Errors",color:"#d64545"}),d.length>0&&i.push({area:null,agents:d,label:"Working & Unseen",color:"#f5d76e"}),l.length>0&&i.push({area:null,agents:l,label:"Idle",color:"#5cb88a"}),i}function Hs(s){const v=Date.now(),l=[...Array.from(s.values())].sort((o,b)=>(b.lastActivity||0)-(o.lastActivity||0)),t=[],i=[],n=[],u=[],p=300*1e3,N=3600*1e3,S=1440*60*1e3;for(const o of l){const b=v-(o.lastActivity||0);b<p?t.push(o):b<N?i.push(o):b<S?n.push(o):u.push(o)}const j=[];return t.length>0&&j.push({area:null,agents:t,label:"Just Now (< 5m)",color:"#4ade80"}),i.length>0&&j.push({area:null,agents:i,label:"Recent (5m - 1h)",color:"#60a5fa"}),n.length>0&&j.push({area:null,agents:n,label:"Stale (1h - 1d)",color:"#facc15"}),u.length>0&&j.push({area:null,agents:u,label:"Very Stale (> 1d)",color:"#f87171"}),j}function Zs(s){return s.contextLimit<=0?0:Math.round(s.contextUsed/s.contextLimit*100)}function Bs(s){return s>=80?"red":s>=50?"yellow":"green"}function ms(s){return as(s)}function as(s,v={}){const{prioritizeRecentlyIdle:d=!1}=v;return[...s].sort((l,t)=>{const i={error:0,offline:0,orphaned:0,working:1,waiting:1,waiting_permission:1,idle:2},n=i[l.status]??3,u=i[t.status]??3;if(n!==u)return n-u;if(d&&l.status==="idle"&&t.status==="idle"){const p=!!l.taskLabel,N=!!t.taskLabel;return p!==N?p?-1:1:(t.lastActivity||0)-(l.lastActivity||0)}return l.name.localeCompare(t.name)})}const ps=ts.memo(({agent:s,isSelected:v,isKeyboardFocused:d=!1,onSelect:l,onDoubleClick:t,onChat:i,onFocus:n,onKill:u,onDragStart:p})=>{const{t:N}=ns(["dashboard","common"]),j=_s().has(s.id),o=vs(s.status),b=Zs(s),z=Bs(b),M=s.taskLabel?`📋 ${s.taskLabel}`:s.currentTask||s.lastAssignedTask,_=s.status==="idle"&&s.lastActivity>0,[,B]=ts.useState(0);return ts.useEffect(()=>{if(!_)return;const A=window.setInterval(()=>B(q=>q+1),15e3);return()=>window.clearInterval(A)},[_]),e.jsxs("div",{className:`dash-card dash-card--${o} ${v?"dash-card--selected":""} ${d?"dash-card--keyboard-focused":""}`,"data-agent-id":s.id,onClick:l,onDoubleClick:A=>{A.stopPropagation(),t()},onDragStart:A=>{p==null||p(s),A.dataTransfer.effectAllowed="move"},draggable:!0,title:N("cards.doubleClickHint"),children:[e.jsxs("div",{className:"dash-card__row1",children:[e.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${o}`}),e.jsx("span",{className:"dash-card__name",children:s.name}),e.jsxs("span",{className:"dash-card__class",children:[e.jsx(Is,{agent:s,size:14})," ",s.class]}),e.jsxs("span",{className:`dash-card__provider dash-card__provider--${s.provider}`,children:[s.provider==="codex"?"🔸":s.provider==="opencode"?"🟢":"🤖"," ",s.provider]}),j&&e.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),e.jsxs("div",{className:"dash-card__row2",children:[e.jsx("span",{className:`dash-card__status dash-card__status--${o}`,children:j?"Unseen":s.status}),e.jsxs("div",{className:"dash-card__context",children:[e.jsx("div",{className:"dash-card__context-bar",children:e.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${z}`,style:{width:`${b}%`}})}),e.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${z}`,children:[b,"%"]})]})]}),e.jsxs("div",{className:"dash-card__row3",children:[e.jsxs("span",{className:"dash-card__workdir",title:s.cwd,children:["📁 ",s.cwd.split("/").pop()||s.cwd]}),_&&e.jsxs("span",{className:"dash-card__idle-time",style:{color:$s(s.lastActivity)},title:Es(s.lastActivity),children:["⏱ ",Ms(s.lastActivity)]})]}),M&&e.jsx("div",{className:"dash-card__row4",children:e.jsx("span",{className:"dash-card__task",children:M})}),e.jsxs("div",{className:"dash-card__actions",children:[i&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:A=>{A.stopPropagation(),i()},title:N("cards.openTerminal"),children:N("cards.chat")}),u&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:A=>{A.stopPropagation(),u()},title:N("cards.killAgent"),children:N("cards.stop")})]})]})});ps.displayName="AgentCard";const bs=({buildings:s,onSelectBuilding:v})=>{const{t:d}=ns(["dashboard"]),l=g.useMemo(()=>Array.from(s.values()).sort((t,i)=>t.name.localeCompare(i.name)),[s]);return e.jsxs("div",{className:"dashboard-view__buildings",children:[e.jsxs("div",{className:"dashboard-view__buildings-header",children:[e.jsx("span",{className:"dashboard-view__buildings-title",children:d("buildings.title")}),e.jsx("span",{className:"dashboard-view__buildings-count",children:l.length})]}),e.jsx("div",{className:"dashboard-view__buildings-row",children:l.map(t=>{const i=vs(t.status),n=Us(t.type);return e.jsxs("button",{className:`dash-pill dash-pill--${i}`,onClick:()=>v==null?void 0:v(t.id),title:`${t.name} (${t.type}) - ${t.status}`,children:[e.jsx("span",{className:"dash-pill__icon",children:n}),e.jsx("span",{className:"dash-pill__name",children:t.name}),e.jsx("span",{className:`dash-pill__dot dash-pill__dot--${i}`})]},t.id)})})]})};bs.displayName="BuildingPills";function Ks({onSelectAgent:s,onFocusAgent:v,onKillAgent:d,onSelectBuilding:l,onOpenTerminal:t,onFocusZone:i}){const{t:n}=ns(["dashboard","common"]),u=Ds(),p=Ss(),N=Ls(),S=Xs(),j=_s(),[o,b]=g.useState(""),[z,M]=g.useState("all"),[_,B]=g.useState("zone"),[A,q]=g.useState(new Set),[E,J]=g.useState(null),[ws,T]=g.useState(null),[Y,Q]=g.useState(!1),[I,F]=g.useState(null),V=g.useMemo(()=>{const a=Array.from(u.values());return{total:a.length,working:a.filter(h=>h.status==="working"||h.status==="waiting"||h.status==="waiting_permission").length,idle:a.filter(h=>h.status==="idle").length,error:a.filter(h=>h.status==="error"||h.status==="offline"||h.status==="orphaned").length}},[u]),rs=g.useMemo(()=>_==="zone"?Ys(u,N):_==="status"?Gs(u,j):Hs(u),[u,N,_,j]),W=g.useMemo(()=>{const a=o.toLowerCase().trim(),h=rs.map(w=>({...w,agents:w.agents.filter(k=>{if(z==="working"){if(k.status!=="working"&&k.status!=="waiting"&&k.status!=="waiting_permission")return!1}else if(z==="error"&&k.status!=="error"&&k.status!=="offline"&&k.status!=="orphaned")return!1;return!(a&&!k.name.toLowerCase().includes(a)&&!k.class.toLowerCase().includes(a))})}));return _==="zone"?h:h.filter(w=>w.agents.length>0)},[rs,z,o,_]),O=g.useCallback(a=>a.area?`area:${a.area.id}`:`${_}:${a.label}`,[_]),$=g.useMemo(()=>{const a=[];return W.forEach(h=>{const w=O(h);if(A.has(w))return;const k=_==="status"?as(h.agents,{prioritizeRecentlyIdle:!0}):ms(h.agents);a.push(...k)}),a},[W,A,_,O]),xs=g.useCallback(a=>{q(h=>{const w=new Set(h);return w.has(a)?w.delete(a):w.add(a),w})},[]),Ns=g.useCallback(a=>{t==null||t(a)},[t]),ks=g.useCallback(a=>{J(a)},[]),js=g.useCallback((a,h)=>{a.preventDefault(),a.dataTransfer.dropEffect="move",T(h)},[]),ys=g.useCallback(()=>{T(null)},[]),As=g.useCallback(a=>{if(!E)return;if(a===null){const X=U.getState(),r=Array.from(X.areas.values()).find(c=>c.assignedAgentIds.includes(E.id));r&&U.unassignAgentFromArea(E.id,r.id),J(null),T(null);return}const h=N.get(a);if(!h)return;const w=Array.from(u.values()),k=Ps(h,w,E.position);U.updateAgent({...E,position:{...E.position,x:k.x,z:k.z}}),U.assignAgentToArea(E.id,a),J(null),T(null)},[E,N,u]);return g.useEffect(()=>{if($.length===0){Q(!1),F(null);return}Y&&(!I||!$.some(a=>a.id===I))&&(F($[0].id),s==null||s($[0].id))},[$,Y,I,s]),g.useEffect(()=>{const a=r=>r instanceof HTMLElement?r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.tagName==="SELECT"||r.isContentEditable:!1,h=r=>r instanceof HTMLElement?!!r.closest(".guake-terminal")||r.classList.contains("guake-input")||r.classList.contains("agent-panel-input"):!1,w=r=>{const c=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(L=>L.dataset.agentId===r);c==null||c.scrollIntoView({block:"nearest",inline:"nearest"})},k=(r,c)=>{var os,cs,ds,ls,us,hs;const L=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(f=>{const x=f.dataset.agentId;if(!x)return null;const D=f.getBoundingClientRect();return{id:x,centerX:D.left+D.width/2,centerY:D.top+D.height/2,height:D.height}}).filter(f=>f!==null).sort((f,x)=>f.centerY-x.centerY||f.centerX-x.centerX);if(L.length===0)return r;const ss=L.reduce((f,x)=>f+x.height,0)/L.length,es=Math.max(18,ss*.6),C=[];for(const f of L){const x=C[C.length-1];if(!x){C.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}]);continue}const D=x.reduce((Cs,zs)=>Cs+zs.centerY,0)/x.length;Math.abs(f.centerY-D)<=es?x.push({id:f.id,centerX:f.centerX,centerY:f.centerY}):C.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}])}C.forEach(f=>f.sort((x,D)=>x.centerX-D.centerX));const G=C.findIndex(f=>f.some(x=>x.id===r));if(G===-1)return((cs=(os=C[0])==null?void 0:os[0])==null?void 0:cs.id)??r;const R=C[G],y=R.findIndex(f=>f.id===r);if(y===-1)return((ls=(ds=C[0])==null?void 0:ds[0])==null?void 0:ls.id)??r;if(c==="left")return((us=R[Math.max(0,y-1)])==null?void 0:us.id)??r;if(c==="right")return((hs=R[Math.min(R.length-1,y+1)])==null?void 0:hs.id)??r;const K=c==="up"?Math.max(0,G-1):Math.min(C.length-1,G+1),m=C[K],H=R[y].centerX;let P=m[0],is=Math.abs(P.centerX-H);for(const f of m){const x=Math.abs(f.centerX-H);x<is&&(P=f,is=x)}return(P==null?void 0:P.id)??r},X=r=>{const c=U.getShortcuts(),L=c.find(m=>m.id==="dashboard-selector-toggle"),ss=c.find(m=>m.id==="dashboard-vim-left"),es=c.find(m=>m.id==="dashboard-vim-down"),C=c.find(m=>m.id==="dashboard-vim-up"),G=c.find(m=>m.id==="dashboard-vim-right"),R=c.find(m=>m.id==="open-terminal"),y=U.getState();if(a(r.target))if(!y.terminalOpen&&h(r.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(Z(r,L)){if($.length===0)return;r.preventDefault(),r.stopPropagation(),Q(!0),F(m=>{const H=m&&$.some(P=>P.id===m)?m:$[0].id;return s==null||s(H),window.setTimeout(()=>w(H),0),H});return}const K=Z(r,ss)||r.key==="ArrowLeft"?"left":Z(r,es)||r.key==="ArrowDown"?"down":Z(r,C)||r.key==="ArrowUp"?"up":Z(r,G)||r.key==="ArrowRight"?"right":null;if(K&&Y&&I){r.preventDefault(),r.stopPropagation();const m=k(I,K);m!==I&&(F(m),s==null||s(m),window.setTimeout(()=>w(m),0));return}if(Z(r,R)){if(y.terminalOpen)return;if(Y&&I&&y.agents.has(I)){r.preventDefault(),t==null||t(I);return}if(y.selectedAgentIds.size===1){r.preventDefault();const m=Array.from(y.selectedAgentIds)[0];t==null||t(m);return}if(y.lastSelectedAgentId&&y.agents.has(y.lastSelectedAgentId)){r.preventDefault(),t==null||t(y.lastSelectedAgentId);return}}};return document.addEventListener("keydown",X,!0),()=>document.removeEventListener("keydown",X,!0)},[$,Y,I,t,s]),g.useEffect(()=>{const a=document.activeElement;a instanceof HTMLElement&&a.closest(".guake-terminal")&&!U.getState().terminalOpen&&a.blur()},[]),e.jsxs("div",{className:"dashboard-view",children:[e.jsxs("div",{className:"dashboard-view__topbar",children:[e.jsxs("div",{className:"dashboard-view__metrics",children:[e.jsxs("button",{className:`dashboard-view__metric-btn ${z==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.total}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:labels.agents")})]}),e.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${z==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("working"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.working}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.working")})]}),e.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>M("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.idle}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.idle")})]}),e.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${z==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("error"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.error}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.error")})]})]}),e.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:n("searchPlaceholder"),value:o,onChange:a=>b(a.target.value)})]}),e.jsxs("div",{className:"dashboard-view__grouping",children:[e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("zone"),children:n("grouping.byZone")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("status"),children:n("grouping.byStatus")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("activity"),children:n("grouping.byActivity")})]}),e.jsxs("div",{className:"dashboard-view__content",children:[W.map(a=>{const h=O(a),w=A.has(h),k=_==="status"?as(a.agents,{prioritizeRecentlyIdle:!0}):ms(a.agents),X=a.agents.filter(c=>c.status==="working"||c.status==="waiting"||c.status==="waiting_permission").length,r=a.agents.filter(c=>j.has(c.id)).length;return e.jsxs("div",{className:`dashboard-view__zone ${ws===(a.area?a.area.id:null)&&E?"dashboard-view__zone--drag-over":""}`,onDragOver:c=>js(c,a.area?a.area.id:null),onDragLeave:ys,onDrop:()=>As(a.area?a.area.id:null),children:[e.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>xs(h),children:[e.jsxs("div",{className:"dashboard-view__zone-left",children:[e.jsx("span",{className:`dashboard-view__zone-chevron ${w?"dashboard-view__zone-chevron--collapsed":""}`,children:"▼"}),e.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:a.color}}),e.jsx("span",{className:"dashboard-view__zone-name",children:a.label}),e.jsxs("span",{className:"dashboard-view__zone-count",children:[n("agentCount",{count:a.agents.length}),X>0&&e.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",X," ",n("working")]}),r>0&&e.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",r," Unseen"]})]})]}),a.area&&i&&e.jsx("button",{className:"dashboard-view__zone-focus",onClick:c=>{c.stopPropagation(),i(a.area.id)},title:n("focusZone"),children:n("focusZone")})]}),!w&&e.jsx("div",{className:"dashboard-view__zone-grid",children:k.map(c=>e.jsx(ps,{agent:c,isSelected:S.has(c.id),isKeyboardFocused:Y&&I===c.id,onSelect:()=>{s==null||s(c.id),Q(!0),F(c.id)},onDoubleClick:()=>Ns(c.id),onChat:()=>t==null?void 0:t(c.id),onFocus:v?()=>v(c.id):void 0,onKill:d?()=>d(c.id):void 0,onDragStart:ks},c.id))})]},h)}),W.length===0&&e.jsx("div",{className:"dashboard-view__empty",children:o?n("noAgentsMatching",{search:o}):n("noAgentsSpawned")}),p.size>0&&e.jsx(bs,{buildings:p,onSelectBuilding:l})]})]})}export{Ks as DashboardView};
|