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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`)}function Fe(s,a){return`${s}:${dt(a)}`}function ut(s,a,o,f){if(s.uuid&&a.has(s.uuid))return!1;const h=s.isUserPrompt?"user":"assistant",u=Fe(h,s.text),M=s.timestamp||0,N=o.get(u);return N!==void 0&&Math.abs(M-N)<=it?!1:M>f}function mt({isOpen:s,agents:a}){const o=_e(),[f,h]=t.useState(new Map),u=t.useRef(new Set);t.useRef(a);const M=t.useMemo(()=>Array.from(a.keys()).sort().join(","),[a]),N=t.useMemo(()=>Array.from(a.values()).map(x=>`${x.id}:${x.sessionId||""}`).sort().join(","),[a]);t.useEffect(()=>{s||(u.current.clear(),h(new Map))},[s]),t.useEffect(()=>{if(!s)return;const x=new Set(Array.from(a.keys()));for(const m of u.current)x.has(m)||u.current.delete(m);let w=null;o>0&&(w=I.preserveOutputs(),u.current.clear());const v=async(m,C,H=0)=>{if(u.current.add(m.id),H>0&&await new Promise(p=>setTimeout(p,H)),h(p=>{const A=new Map(p);return A.set(m.id,{agentId:m.id,messages:[],loading:!0,hasMore:!1,totalCount:0}),A}),!m.sessionId){C&&C.length>0&&I.mergeOutputsWithHistory(m.id,[],C),h(p=>{const A=new Map(p);return A.set(m.id,{agentId:m.id,messages:[],loading:!1,hasMore:!1,totalCount:0}),A});return}try{const A=await(await Be(Ee(`/api/agents/${m.id}/history?limit=${De}&offset=0`))).json(),E=A.messages||[],U=E.length>0?Math.max(...E.map(k=>k.timestamp?new Date(k.timestamp).getTime():0)):0,G=new Set(E.map(k=>k.uuid).filter(k=>!!k)),K=new Map;for(const k of E){if(k.type!=="user"&&k.type!=="assistant")continue;const c=Fe(k.type,k.content),_=k.timestamp?new Date(k.timestamp).getTime():0,L=K.get(c)??0;_>L&&K.set(c,_)}const W=I.getOutputs(m.id),Y=(C&&C.length>0?[...C,...W]:W).filter(k=>ut(k,G,K,U));I.clearOutputs(m.id);for(const k of Y)I.addOutput(m.id,k);h(k=>{const c=new Map(k);return c.set(m.id,{agentId:m.id,messages:E,loading:!1,hasMore:A.hasMore||!1,totalCount:A.totalCount||0}),c})}catch(p){if(console.error(`Failed to load history for ${m.name}:`,p),C&&C.length>0){I.clearOutputs(m.id);for(const A of C)I.addOutput(m.id,A)}h(A=>{const E=new Map(A);return E.set(m.id,{agentId:m.id,messages:[],loading:!1,hasMore:!1,totalCount:0}),E})}},i=o>0?500:0,
|
|
1
|
+
import{at as _e,r as t,s as I,l as Ee,au as De,W as Be,j as e,u as pe,av as Ue,aw as Ke,ax as $e,ay as We,az as Ve,m as ze,aA as Ge,aB as Pe,aC as qe,aD as Ye,aE as Je,aF as Xe,a4 as Ze,U as Me,S as ce,Z as Qe,V as et,C as tt,a2 as Ie,I as st,K as nt,aG as at,n as Z,aH as ot}from"./main-BsOvZp5M.js";import{F as ct}from"./index-CeMGJMtZ.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const Ne={status:"all",activity:"all",sort:"activity"},lt={"1h":3600*1e3,"6h":360*60*1e3,"24h":1440*60*1e3},Ae=20,fe=3,rt={idle:"#4aff9e",working:"#4a9eff",waiting:"#ff9e4a",waiting_permission:"#ffcc00",error:"#ff4a4a",offline:"#888888",orphaned:"#ff9e4a"},it=12e4;function dt(s){return s.trim().replace(/\r\n/g,`
|
|
2
|
+
`)}function Fe(s,a){return`${s}:${dt(a)}`}function ut(s,a,o,f){if(s.uuid&&a.has(s.uuid))return!1;const h=s.isUserPrompt?"user":"assistant",u=Fe(h,s.text),M=s.timestamp||0,N=o.get(u);return N!==void 0&&Math.abs(M-N)<=it?!1:M>f}function mt({isOpen:s,agents:a}){const o=_e(),[f,h]=t.useState(new Map),u=t.useRef(new Set);t.useRef(a);const M=t.useMemo(()=>Array.from(a.keys()).sort().join(","),[a]),N=t.useMemo(()=>Array.from(a.values()).map(x=>`${x.id}:${x.sessionId||""}`).sort().join(","),[a]);t.useEffect(()=>{s||(u.current.clear(),h(new Map))},[s]),t.useEffect(()=>{if(!s)return;const x=new Set(Array.from(a.keys()));for(const m of u.current)x.has(m)||u.current.delete(m);let w=null;o>0&&(w=I.preserveOutputs(),u.current.clear());const v=async(m,C,H=0)=>{if(u.current.add(m.id),H>0&&await new Promise(p=>setTimeout(p,H)),h(p=>{const A=new Map(p);return A.set(m.id,{agentId:m.id,messages:[],loading:!0,hasMore:!1,totalCount:0}),A}),!m.sessionId){C&&C.length>0&&I.mergeOutputsWithHistory(m.id,[],C),h(p=>{const A=new Map(p);return A.set(m.id,{agentId:m.id,messages:[],loading:!1,hasMore:!1,totalCount:0}),A});return}try{const A=await(await Be(Ee(`/api/agents/${m.id}/history?limit=${De}&offset=0`))).json(),E=A.messages||[],U=E.length>0?Math.max(...E.map(k=>k.timestamp?new Date(k.timestamp).getTime():0)):0,G=new Set(E.map(k=>k.uuid).filter(k=>!!k)),K=new Map;for(const k of E){if(k.type!=="user"&&k.type!=="assistant")continue;const c=Fe(k.type,k.content),_=k.timestamp?new Date(k.timestamp).getTime():0,L=K.get(c)??0;_>L&&K.set(c,_)}const W=I.getOutputs(m.id),Y=(C&&C.length>0?[...C,...W]:W).filter(k=>ut(k,G,K,U));I.clearOutputs(m.id);for(const k of Y)I.addOutput(m.id,k);h(k=>{const c=new Map(k);return c.set(m.id,{agentId:m.id,messages:E,loading:!1,hasMore:A.hasMore||!1,totalCount:A.totalCount||0}),c})}catch(p){if(console.error(`Failed to load history for ${m.name}:`,p),C&&C.length>0){I.clearOutputs(m.id);for(const A of C)I.addOutput(m.id,A)}h(A=>{const E=new Map(A);return E.set(m.id,{agentId:m.id,messages:[],loading:!1,hasMore:!1,totalCount:0}),E})}},i=o>0?500:0,y=Array.from(a.values());for(const m of y)if(!u.current.has(m.id)){const C=w==null?void 0:w.get(m.id);v(m,C,i)}},[s,M,N,o]);const R=t.useRef(a),S=t.useRef(f);R.current=a,S.current=f;const b=t.useCallback(async x=>{const w=R.current.get(x),v=S.current.get(x);if(!(w!=null&&w.sessionId)||!v||!v.hasMore)return;const i=v.messages.length;try{const m=await(await fetch(Ee(`/api/agents/${x}/history?limit=${De}&offset=${i}`))).json();m.messages&&m.messages.length>0&&h(C=>{const H=new Map(C),p=C.get(x);return p&&H.set(x,{...p,messages:[...m.messages,...p.messages],hasMore:m.hasMore||!1}),H})}catch(y){console.error(`Failed to load more history for agent ${x}:`,y)}},[]),D=t.useCallback(x=>{u.current.delete(x),h(w=>{const v=new Map(w),i=w.get(x);return i&&v.set(x,{...i,messages:[],hasMore:!1,totalCount:0,loading:!1}),v})},[]);return{histories:f,loadMoreHistory:b,clearAgentHistory:D}}function ft({command:s,onCommandChange:a,useTextarea:o,forceTextarea:f,onForceTextarea:h,onSend:u,canSend:M,attachedFiles:N,onAddFile:R,onRemoveFile:S,uploadFile:b,onAddPastedText:D,placeholder:x="Message...",className:w="",compact:v=!1,inputRef:i}){const y=t.useRef(null),m=t.useRef(null),C=t.useRef(o);t.useEffect(()=>{if(o&&!C.current&&m.current){const c=m.current;c.focus(),c.selectionStart=c.selectionEnd=c.value.length}C.current=o},[o]),t.useEffect(()=>{const c=m.current;if(!c||!o)return;c.style.height="auto";const _=v?120:180,L=Math.min(c.scrollHeight,_);c.style.height=`${L}px`},[s,o,v]);const H=t.useCallback(async c=>{const _=c.clipboardData.items;for(const B of _)if(B.type.startsWith("image/")){c.preventDefault();const F=B.getAsFile();if(F){const T=await b(F);T&&R(T)}return}const L=c.clipboardData.files;if(L.length>0){c.preventDefault();for(const B of L){const F=await b(B);F&&R(F)}return}const J=c.clipboardData.getData("text"),q=(J.match(/\n/g)||[]).length+1;if(q>5){c.preventDefault();const F=`[Pasted text #${D(J)} +${q} lines]`,T=c.target,V=T.selectionStart||0,se=T.selectionEnd||0,ne=s.slice(0,V)+F+s.slice(se);a(ne),o||h(!0)}},[s,a,o,h,b,R,D]),p=t.useCallback(async c=>{const _=c.target.files;if(_){for(const L of _){const J=await b(L);J&&R(J)}y.current&&(y.current.value="")}},[b,R]),A=t.useCallback(c=>{if(c.key==="Enter"&&c.shiftKey){o||(c.preventDefault(),h(!0));return}c.key==="Enter"&&(c.preventDefault(),u())},[o,h,u]),E=t.useCallback(c=>{},[]),U=t.useCallback(c=>{c.button===1&&(c.preventDefault(),c.stopPropagation())},[]),G=t.useCallback(c=>{m.current=c,i==null||i(c)},[i]),K=v?"agent-panel-input":"guake-input",W=v?"agent-panel-input-container":"guake-input-container",ee=v?"agent-panel-attach-btn":"guake-attach-btn",Y=v?"agent-panel-send-btn":"",k=o?v?"agent-panel-input-expanded":"guake-input-expanded":"";return e.jsxs(e.Fragment,{children:[N.length>0&&e.jsx("div",{className:v?"agent-panel-attachments":"guake-attachments",children:N.map(c=>e.jsxs("div",{className:`${v?"agent-panel-attachment":"guake-attachment"} ${c.isImage?"is-image":""}`,children:[e.jsx("span",{className:v?"agent-panel-attachment-icon":"guake-attachment-icon",children:c.isImage?"🖼️":"📎"}),e.jsx("span",{className:v?"agent-panel-attachment-name":"guake-attachment-name",title:c.path,children:c.name}),!v&&e.jsxs("span",{className:"guake-attachment-size",children:["(",Math.round(c.size/1024),"KB)"]}),e.jsx("button",{className:v?"agent-panel-attachment-remove":"guake-attachment-remove",onClick:()=>S(c.id),title:"Remove",children:"×"})]},c.id))}),e.jsxs("div",{className:`${K} ${k} ${w}`,children:[e.jsx("input",{ref:y,type:"file",multiple:!0,onChange:p,style:{display:"none"},accept:"*"}),e.jsxs("div",{className:W,onAuxClick:U,children:[e.jsx("button",{className:ee,onClick:()=>{var c;return(c=y.current)==null?void 0:c.click()},title:"Attach file (or paste image)",children:"📎"}),o?e.jsx("textarea",{ref:G,placeholder:x,value:s,onChange:c=>a(c.target.value),onKeyDown:A,onPaste:H,onMouseDown:E}):e.jsx("input",{ref:i,type:"text",placeholder:x,value:s,onChange:c=>a(c.target.value),onKeyDown:A,onPaste:H,onMouseDown:E}),e.jsx("button",{className:Y,onClick:u,disabled:!M,title:"Send",children:"➤"})]})]})]})}function pt(s){const a=Math.floor(s/1e3),o=Math.floor(a/60),f=a%60;return`${o}:${f.toString().padStart(2,"0")}`}const ht=t.memo(function({agentId:a,isWorking:o,timestamp:f}){const{t:h}=pe(["terminal"]),[u,M]=t.useState(0);return t.useEffect(()=>{if(!o||!f){M(0);return}M(Date.now()-f);const N=setInterval(()=>{M(Date.now()-f)},1e3);return()=>clearInterval(N)},[o,f]),o?e.jsxs("div",{className:"guake-stop-bar",children:[e.jsx("span",{className:"guake-elapsed-timer",children:pt(u)}),e.jsxs("button",{className:"guake-stop-btn",onClick:()=>I.stopAgent(a),title:h("terminal:input.stopOperation"),children:[e.jsx("span",{className:"stop-icon",children:"■"}),e.jsx("span",{className:"stop-label",children:h("terminal:input.stop")})]})]}):null});function gt({agent:s,history:a,outputs:o,isExpanded:f,isFocused:h,advancedView:u,onExpand:M,onFocus:N,inputRef:R,onLoadMore:S,onClearHistory:b}){const{t:D}=pe(["terminal","common"]),x=Ue(),w=Ke(s.id),v=t.useRef(null),[i,y]=t.useState(!1),m=t.useRef(0),C=t.useRef(!1),[H,p]=t.useState(!0),[A,E]=t.useState(!1),[U,G]=t.useState(null),[K,W]=t.useState(null),[ee,Y]=t.useState(null);$e(`commander-image-modal-${s.id}`,U!==null,()=>G(null));const{command:k,setCommand:c,forceTextarea:_,setForceTextarea:L,useTextarea:J,setPastedTexts:q,incrementPastedCount:B,resetPastedCount:F,attachedFiles:T,setAttachedFiles:V,removeAttachedFile:se,uploadFile:ne,expandPastedTexts:le}=We({selectedAgentId:s.id}),ae=k.trim().length>0||T.length>0,l=Ve({outputs:o,viewMode:u?"advanced":"simple"}),g=t.useMemo(()=>x!=null&&x.agentSummaries?x.agentSummaries.find(j=>j.agentId===s.id||j.agentName===s.name):null,[x,s.id,s.name]),d=t.useMemo(()=>{const j=ze(s);return{usedPercent:j.usedPercent,freePercent:j.freePercent,hasData:!!s.contextStats,totalTokens:j.totalTokens,contextWindow:j.contextWindow}},[s.contextStats,s.contextUsed,s.contextLimit]),P=t.useCallback(()=>{!i&&(a!=null&&a.hasMore)&&S&&(y(!0),m.current=v.current?v.current.scrollHeight-v.current.scrollTop:0,S())},[i,a==null?void 0:a.hasMore,S]);t.useEffect(()=>{i&&a&&!a.loading&&y(!1)},[a,i]);const te=t.useCallback(()=>{C.current=!0,p(!1)},[]),Q=t.useRef(f),z=t.useRef(h);t.useEffect(()=>{(f&&!Q.current||h&&!z.current)&&(C.current=!1,p(!0),E(!0)),Q.current=f,z.current=h},[f,h]);const re=t.useRef(a==null?void 0:a.loading);t.useEffect(()=>{re.current&&!(a!=null&&a.loading)&&(C.current=!1,p(!0),E(!0)),re.current=a==null?void 0:a.loading},[a==null?void 0:a.loading]),t.useEffect(()=>{if(!A)return;const j=v.current;if(!j)return;const $=performance.now();let O=0,me=-1,be;const ye=()=>{const{scrollTop:Le,scrollHeight:Se,clientHeight:He}=j,Oe=Se-Le-He<=2;if(Math.abs(Se-me)<=1&&Oe?O+=1:O=0,me=Se,O>=3){E(!1);return}if(performance.now()-$>5e3){E(!1);return}be=requestAnimationFrame(ye)};return be=requestAnimationFrame(ye),()=>cancelAnimationFrame(be)},[A]),t.useEffect(()=>{C.current||p(!0)},[l.length]);const he=t.useCallback(()=>!1,[]),ge=t.useCallback(j=>{const $=B();return q(O=>new Map(O).set($,j)),$},[B,q]),xe=t.useCallback(j=>{V($=>[...$,j])},[V]),ve=t.useCallback(()=>{if(!ae)return;if(k.trim()==="/clear"&&T.length===0){I.clearContext(s.id),b(),c(""),L(!1),q(new Map),V([]),F();return}let j=le(k.trim());if(T.length>0){const $=T.map(O=>O.isImage?`[Image: ${O.path}]`:`[File: ${O.path}]`).join(`
|
|
3
3
|
`);j=j?`${j}
|
|
4
4
|
|
|
5
|
-
${$}`:$}I.sendCommand(s.id,j),c(""),L(!1),q(new Map),V([]),F()},[s.id,k,ae,T,le,b,F,c,L,q,V]),we=t.useCallback((j,$)=>{G({url:j,name:$})},[]),Ce=t.useCallback((j,$)=>{const O=Ge(j,s.cwd),me=O.line?{...$||{},targetLine:O.line}:$;I.setFileViewerPath(O.path,me,s.cwd)},[s.cwd]),je=t.useCallback((j,$)=>{W({command:j,output:$,isLive:$==="Running..."})},[]),ke=t.useCallback(j=>{Y(j)},[]),r=t.useCallback(()=>{E(!1),C.current=!0,p(!1)},[]),X=t.useCallback(()=>G(null),[]),de=t.useCallback(()=>W(null),[]),ie=t.useCallback(()=>Y(null),[]),ue=t.useCallback(j=>{j.stopPropagation(),M()},[M]),Re=rt[s.status]||"#888888",oe=(a==null?void 0:a.messages)||[];return e.jsxs("div",{className:`agent-panel ${s.status==="working"?"working":""} ${f?"expanded":""} ${h?"focused":""}`,onClick:h?void 0:N,children:[e.jsxs("div",{className:"agent-panel-header",onClick:h?N:void 0,children:[e.jsxs("div",{className:"agent-panel-info",children:[e.jsx("span",{className:"agent-panel-status",style:{background:Re},title:s.status}),e.jsxs("span",{className:"agent-panel-name",children:[(s.isBoss||s.class==="boss")&&e.jsx("span",{className:"agent-panel-boss-crown",children:"👑"}),s.name]}),e.jsx("span",{className:`agent-panel-status-label ${s.status}`,children:s.status}),e.jsx("span",{className:"agent-panel-class",children:s.class}),e.jsx("span",{className:`agent-panel-provider ${s.provider==="codex"?"codex":s.provider==="opencode"?"opencode":"claude"}`,children:s.provider||"claude"}),e.jsxs("span",{className:"agent-panel-id",title:`ID: ${s.id}`,children:["[",s.id.substring(0,4),"]"]}),s.taskLabel?e.jsxs("div",{className:"agent-panel-task agent-panel-task-label",title:s.taskLabel,children:["📋 ",s.taskLabel]}):s.currentTask?e.jsxs("div",{className:"agent-panel-task",title:s.currentTask,children:[s.currentTask.substring(0,40),"..."]}):null]}),e.jsxs("div",{className:"agent-panel-context",title:`Context: ${Math.round(d.usedPercent)}% used (${Pe(d.totalTokens)} / ${Pe(d.contextWindow)})`,children:[e.jsx("div",{className:"agent-panel-context-bar",style:{background:d.freePercent<20?"#ff4a4a":d.freePercent<50?"#ff9e4a":"#4aff9e",width:`${d.freePercent}%`}}),e.jsxs("span",{className:"agent-panel-context-text",children:[Math.round(d.freePercent),"%"]})]}),e.jsx("div",{className:"agent-panel-actions",children:e.jsx("button",{className:"agent-panel-expand",onClick:ue,title:D(f?"commander.collapsePanel":"commander.expandPanel"),children:f?e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"4 14 10 14 10 20"}),e.jsx("polyline",{points:"20 10 14 10 14 4"}),e.jsx("line",{x1:"14",y1:"10",x2:"21",y2:"3"}),e.jsx("line",{x1:"3",y1:"21",x2:"10",y2:"14"})]}):e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"15 3 21 3 21 9"}),e.jsx("polyline",{points:"9 21 3 21 3 15"}),e.jsx("line",{x1:"21",y1:"3",x2:"14",y2:"10"}),e.jsx("line",{x1:"3",y1:"21",x2:"10",y2:"14"})]})})})]}),g&&e.jsx("div",{className:"agent-panel-supervisor-status",children:g.statusDescription}),e.jsx("div",{className:"agent-panel-content",ref:v,children:a!=null&&a.loading?e.jsx("div",{className:"agent-panel-loading",children:D("common:status.loading")}):e.jsx(e.Fragment,{children:!oe.length&&!l.length?e.jsxs("div",{className:"agent-panel-empty",children:[D("commander.noMessages"),!s.sessionId&&e.jsx("div",{style:{fontSize:"10px",color:"#666"},children:D("commander.noSessionId")})]}):e.jsx(qe,{historyMessages:oe,liveOutputs:l,agentId:s.id,viewMode:u?"advanced":"simple",selectedMessageIndex:null,isMessageSelected:he,onImageClick:we,onFileClick:Ce,onBashClick:je,onViewMarkdown:ke,scrollContainerRef:v,onScrollTopReached:P,isLoadingMore:i,hasMore:a==null?void 0:a.hasMore,shouldAutoScroll:H,onUserScroll:te,pinToBottom:A,onPinCancel:r,isLoadingHistory:a==null?void 0:a.loading})})}),e.jsxs("div",{className:`guake-input-wrapper ${s.status==="working"?"has-stop-btn is-working":""}`,children:[e.jsx(ht,{agentId:s.id,isWorking:s.status==="working",timestamp:w==null?void 0:w.timestamp}),e.jsx(ft,{command:k,onCommandChange:c,useTextarea:J,forceTextarea:_,onForceTextarea:L,onSend:ve,canSend:ae,attachedFiles:T,onAddFile:xe,onRemoveFile:se,uploadFile:ne,onAddPastedText:ge,placeholder:D("commander.command",{name:s.name}),compact:!1,inputRef:y})]}),U&&e.jsx(Ye,{url:U.url,name:U.name,onClose:X}),K&&e.jsx(Je,{state:K,onClose:de}),e.jsx(Xe,{agent:s,content:ee,onClose:ie})]})}function xt({currentArea:s,onClose:a}){const{t:o}=pe(["terminal","common"]),[f,h]=t.useState(()=>{const i=new Set(Array.from(I.getState().agents.values()).map(R=>R.name));return Qe.find(R=>!i.has(R))||`Agent-${Date.now().toString(36)}`}),[u,M]=t.useState(()=>Me(ce.LAST_CWD)),[N,y]=t.useState("scout"),[S,b]=t.useState("claude"),[D,x]=t.useState(!1),w=()=>{if(!f.trim()||!u.trim())return;x(!0),Ie(ce.LAST_CWD,u);let i;s&&(i={x:s.center.x,z:s.center.z}),I.spawnAgent(f.trim(),N,u.trim(),i,void 0,void 0,void 0,void 0,S),setTimeout(()=>{a()},500)},v=i=>{i.key==="Enter"&&!i.shiftKey&&(i.preventDefault(),w()),i.key==="Escape"&&a()};return e.jsx("div",{className:"commander-spawn-overlay",onClick:a,children:e.jsxs("div",{className:"commander-spawn-form",onClick:i=>i.stopPropagation(),children:[e.jsxs("div",{className:"commander-spawn-header",children:[e.jsx("h3",{children:o("spawn.addNewAgent")}),s&&e.jsxs("span",{className:"commander-spawn-area",children:[e.jsx("span",{className:"commander-spawn-area-dot",style:{background:s.color}}),s.name]})]}),e.jsxs("div",{className:"commander-spawn-body",children:[e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.name")}),e.jsx("input",{type:"text",value:f,onChange:i=>h(i.target.value),onKeyDown:v,autoFocus:!0})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.workingDirectory")}),e.jsx(Ze,{value:u,onChange:M,onSubmit:w,placeholder:o("spawn.workingDirPlaceholder"),directoriesOnly:!0})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.class")}),e.jsx("div",{className:"commander-spawn-classes",children:et.map(i=>{const R=tt[i.id];return e.jsxs("button",{className:`commander-spawn-class ${N===i.id?"selected":""}`,onClick:()=>y(i.id),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:R.icon}),e.jsx("span",{children:i.name})]},i.id)})})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.runtime")}),e.jsxs("div",{className:"commander-spawn-classes",children:[e.jsxs("button",{className:`commander-spawn-class ${S==="claude"?"selected":""}`,onClick:()=>b("claude"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"🧠"}),e.jsx("span",{children:"Claude"})]}),e.jsxs("button",{className:`commander-spawn-class ${S==="codex"?"selected":""}`,onClick:()=>b("codex"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"⚙️"}),e.jsx("span",{children:"Codex"})]}),e.jsxs("button",{className:`commander-spawn-class ${S==="opencode"?"selected":""}`,onClick:()=>b("opencode"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"🟢"}),e.jsx("span",{children:"OpenCode"})]})]})]})]}),e.jsxs("div",{className:"commander-spawn-footer",children:[e.jsx("button",{className:"commander-spawn-cancel",onClick:a,children:o("common:buttons.cancel")}),e.jsx("button",{className:"commander-spawn-submit",onClick:w,disabled:!f.trim()||!u.trim()||D,children:o(D?"common:buttons.deploying":"common:buttons.deploy")})]})]})})}const Te=t.memo(function({agent:a,history:o,isExpanded:f,isFocused:h,advancedView:u,index:M,onExpand:N,onCollapse:y,onFocus:S,onInputRef:b,onLoadMore:D,onClearHistory:x}){const w=ot(a.id),v=t.useCallback(()=>{f?y():N(a.id)},[a.id,f,N,y]),i=t.useCallback(()=>{S(h?-1:M)},[M,h,S]),R=t.useCallback(H=>{b(a.id,H)},[a.id,b]),m=t.useCallback(()=>{D(a.id)},[a.id,D]),C=t.useCallback(()=>{x(a.id)},[a.id,x]);return e.jsx(gt,{agent:a,history:o,outputs:w,isExpanded:f,isFocused:h,advancedView:u,onExpand:v,onFocus:i,inputRef:R,onLoadMore:m,onClearHistory:C})});function St({isOpen:s,onClose:a}){const{t:o}=pe(["terminal","common"]),f=st(),h=nt(),[u,M]=t.useState(()=>Me(ce.COMMANDER_TAB,"all")),[N,y]=t.useState(0),[S,b]=t.useState(null),D=t.useRef(null),[x,w]=t.useState(0),[v,i]=t.useState(!1),[R,m]=t.useState(null),[C,H]=t.useState(!1),[p,A]=t.useState(()=>{try{const n=Me(ce.COMMANDER_FILTERS,"");if(n)return{...Ne,...JSON.parse(n)}}catch{}return Ne}),E=t.useRef(new Map),U=t.useRef([]),G=t.useRef(0),K=t.useRef([]),W=t.useRef(u),{histories:ee,loadMoreHistory:Y,clearAgentHistory:k}=mt({isOpen:s,agents:f});t.useEffect(()=>{s||(b(null),w(0),i(!1))},[s]);const c=t.useMemo(()=>{const n=Array.from(h.values()).sort((g,d)=>g.name.localeCompare(d.name)),l=[{id:"all",name:o("common:labels.all")}];for(const g of n)l.push({id:g.id,name:g.name,color:g.color});return l.push({id:"unassigned",name:o("commander.unassigned")}),l},[h]),_=t.useMemo(()=>u==="all"||u==="unassigned"?null:h.get(u)||null,[u,h]),L=t.useMemo(()=>{const n=new Map;n.set("all",f.size);let l=0;for(const g of f.values()){const d=I.getAreaForAgent(g.id);d?n.set(d.id,(n.get(d.id)||0)+1):l++}return n.set("unassigned",l),n},[f]),J=p.status!=="all"||p.activity!=="all"||p.sort!=="activity",q=(p.status!=="all"?1:0)+(p.activity!=="all"?1:0)+(p.sort!=="activity"?1:0),B=t.useMemo(()=>{const n=d=>d.isBoss===!0||d.class==="boss",l=Date.now();let g=Array.from(f.values());if(u==="unassigned"?g=g.filter(d=>!I.getAreaForAgent(d.id)):u!=="all"&&(g=g.filter(d=>{const P=I.getAreaForAgent(d.id);return(P==null?void 0:P.id)===u})),p.status!=="all"&&(g=g.filter(d=>{switch(p.status){case"working":return d.status==="working";case"idle":return d.status==="idle";case"error":return d.status==="error"||d.status==="waiting"||d.status==="waiting_permission";case"offline":return d.status==="offline"||d.status==="orphaned";default:return!0}})),p.activity!=="all"){const d=lt[p.activity];g=g.filter(P=>l-(P.lastActivity||0)<d)}return g.sort((d,P)=>{var te,Z;if(n(d)&&!n(P))return-1;if(!n(d)&&n(P))return 1;switch(p.sort){case"activity":return(P.lastActivity||0)-(d.lastActivity||0);case"name":return d.name.localeCompare(P.name);case"created":return(d.createdAt||0)-(P.createdAt||0);case"context":{const z=((te=d.contextStats)==null?void 0:te.usedPercent)??(d.contextUsed||0)/(d.contextLimit||2e5)*100;return(((Z=P.contextStats)==null?void 0:Z.usedPercent)??(P.contextUsed||0)/(P.contextLimit||2e5)*100)-z}default:return(P.lastActivity||0)-(d.lastActivity||0)}}),g},[f,u,p]),F=Math.ceil(B.length/Ae),T=t.useMemo(()=>B.slice(N*Ae,(N+1)*Ae),[B,N]);U.current=T,D.current=S,G.current=x,K.current=c,W.current=u,$e("commander-expanded",S!==null,()=>b(null));const V=at();t.useEffect(()=>{s&&V&&(b(V),I.clearCommanderExpandRequest())},[s,V]);const se=t.useCallback(()=>b(null),[]),ne=t.useCallback(n=>b(n),[]),le=t.useCallback(n=>w(n),[]),ae=t.useCallback((n,l)=>{l?E.current.set(n,l):E.current.delete(n)},[]);return t.useEffect(()=>{y(0),Ie(ce.COMMANDER_TAB,u)},[u]),t.useEffect(()=>{Ie(ce.COMMANDER_FILTERS,JSON.stringify(p)),y(0)},[p]),t.useEffect(()=>{var l;if(!s||window.matchMedia("(pointer: coarse)").matches)return;const n=S||((l=U.current[x])==null?void 0:l.id);if(n){const g=E.current.get(n);g&&document.activeElement!==g&&setTimeout(()=>g.focus(),50)}},[s,x,S]),t.useEffect(()=>{if(!s)return;const n=l=>{const g=I.getShortcuts(),d=l.target,P=d.tagName==="INPUT"||d.tagName==="TEXTAREA",te=U.current,Z=te.length-1,z=D.current,re=g.find(r=>r.id==="commander-close");if(Q(l,re)){const{fileViewerPath:r,contextModalAgentId:X}=I.getState();if(r||X)return;l.preventDefault(),l.stopImmediatePropagation(),z?b(null):a();return}const he=g.find(r=>r.id==="commander-vim-left");if(Q(l,he)&&!z){l.preventDefault(),w(r=>r>0?r-1:r);return}const ge=g.find(r=>r.id==="commander-vim-right");if(Q(l,ge)&&!z){l.preventDefault(),w(r=>r<Z?r+1:r);return}const xe=g.find(r=>r.id==="commander-vim-up");if(Q(l,xe)&&!z){l.preventDefault(),w(r=>r>=fe?r-fe:r);return}const ve=g.find(r=>r.id==="commander-vim-down");if(Q(l,ve)&&!z){l.preventDefault(),w(r=>r+fe<=Z?r+fe:r);return}const we=g.find(r=>r.id==="commander-expand");if(Q(l,we)){if(l.preventDefault(),z)b(null);else{const r=te[G.current];r&&b(r.id)}return}const Ce=g.find(r=>r.id==="commander-new-agent");if(Q(l,Ce)){l.preventDefault(),i(!0);return}const je=g.find(r=>r.id==="commander-next-tab"),ke=g.find(r=>r.id==="commander-prev-tab");if(!P){const r=K.current;if(Q(l,je)){const X=I.getState().latestNotificationAgentId;if(X){if(l.preventDefault(),l.stopPropagation(),!I.getState().agents.get(X)){I.setLatestNotificationAgentId(null);return}const oe=I.getAreaForAgent(X);oe&&r.some(j=>j.id===oe.id)?M(oe.id):M("unassigned"),b(X),w(0),y(0),I.setLatestNotificationAgentId(null);return}l.preventDefault(),l.stopPropagation();const ie=(r.findIndex(ue=>ue.id===W.current)+1)%r.length;M(r[ie].id),w(0);return}if(Q(l,ke)){l.preventDefault(),l.stopPropagation();const de=(r.findIndex(ie=>ie.id===W.current)-1+r.length)%r.length;M(r[de].id),w(0);return}}};return document.addEventListener("keydown",n,!0),()=>document.removeEventListener("keydown",n,!0)},[s,a]),s?e.jsx("div",{className:"commander-overlay",onClick:a,children:e.jsxs("div",{className:"commander-view",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"commander-header",children:[e.jsxs("div",{className:"commander-title-section",children:[e.jsx("h2",{className:"commander-title",children:o("commander.title")}),e.jsx("span",{className:"commander-shortcuts",children:o("commander.shortcuts")})]}),e.jsxs("div",{className:"commander-controls",children:[e.jsx("button",{className:`commander-view-toggle ${C?"active":""}`,onClick:()=>H(!C),title:o(C?"commander.simple":"commander.advanced"),children:C?`◉ ${o("commander.advanced")}`:`○ ${o("commander.simple")}`}),e.jsx("button",{className:"commander-add-btn",onClick:()=>i(!0),title:o("commander.addAgent"),children:o("commander.addAgent")}),e.jsx("button",{className:"commander-close",onClick:a,children:o("commander.close")})]})]}),e.jsx("div",{className:"commander-tabs",children:c.map(n=>{const l=n.id!=="all"&&n.id!=="unassigned"?h.get(n.id):null,g=l&&l.directories&&l.directories.length>0;return e.jsxs("button",{className:`commander-tab ${u===n.id?"active":""}`,onClick:()=>{M(n.id),w(0)},style:n.color?{borderBottomColor:u===n.id?n.color:"transparent"}:void 0,children:[n.color&&e.jsx("span",{className:"commander-tab-dot",style:{background:n.color}}),e.jsx("span",{children:n.name}),e.jsx("span",{className:"commander-tab-count",children:L.get(n.id)||0}),g&&e.jsx("span",{className:"commander-tab-folder",onClick:d=>{d.stopPropagation(),m(n.id)},title:o("commander.openFileExplorer"),children:"📁"})]},n.id)})}),e.jsxs("div",{className:"commander-filters",children:[e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.status")}),["all","working","idle","error","offline"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.status===n?"active":""}`,onClick:()=>A(l=>({...l,status:n})),children:n==="all"?o("commander.filters.all"):n==="error"?o("commander.filters.needsAttn"):n.charAt(0).toUpperCase()+n.slice(1)},n))]}),e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.active")}),["all","1h","6h","24h"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.activity===n?"active":""}`,onClick:()=>A(l=>({...l,activity:n})),children:n==="all"?o("commander.filters.any"):`< ${n}`},n))]}),e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.sort")}),["activity","name","created","context"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.sort===n?"active":""}`,onClick:()=>A(l=>({...l,sort:n})),children:n==="activity"?o("commander.filters.recent"):n==="context"?o("commander.filters.context"):n.charAt(0).toUpperCase()+n.slice(1)},n))]}),J&&e.jsx("button",{className:"commander-filter-clear",onClick:()=>A(Ne),title:o("commander.clearFilters"),children:o("commander.filters.clearFilters",{count:q})})]}),F>1&&e.jsxs("div",{className:"commander-pagination",children:[e.jsxs("button",{className:"commander-page-btn",onClick:()=>y(n=>Math.max(0,n-1)),disabled:N===0,children:["← ",o("commander.prev")]}),e.jsx("span",{className:"commander-page-info",children:o("commander.page",{current:N+1,total:F,count:B.length})}),e.jsxs("button",{className:"commander-page-btn",onClick:()=>y(n=>Math.min(F-1,n+1)),disabled:N===F-1,children:[o("commander.next")," →"]})]}),e.jsx("div",{className:`commander-grid ${S?"has-expanded":""}`,"data-agent-count":S?1:T.length,children:T.length===0?e.jsx("div",{className:"commander-empty",children:o(u==="all"?"commander.noAgentsAll":u==="unassigned"?"commander.noAgentsUnassigned":"commander.noAgentsArea")}):S?(()=>{const n=f.get(S);return n?e.jsx(Te,{agent:n,history:ee.get(n.id),isExpanded:!0,isFocused:!0,advancedView:C,index:0,onExpand:ne,onCollapse:se,onFocus:le,onInputRef:ae,onLoadMore:Y,onClearHistory:k},n.id):null})():T.map((n,l)=>e.jsx(Te,{agent:n,history:ee.get(n.id),isExpanded:!1,isFocused:l===x,advancedView:C,index:l,onExpand:ne,onCollapse:se,onFocus:le,onInputRef:ae,onLoadMore:Y,onClearHistory:k},n.id))}),v&&e.jsx(xt,{currentArea:_,onClose:()=>i(!1)}),R&&e.jsx(ct,{isOpen:!0,areaId:R,onClose:()=>m(null),onChangeArea:n=>m(n)})]})}):null}export{St as CommanderView};
|
|
5
|
+
${$}`:$}I.sendCommand(s.id,j),c(""),L(!1),q(new Map),V([]),F()},[s.id,k,ae,T,le,b,F,c,L,q,V]),we=t.useCallback((j,$)=>{G({url:j,name:$})},[]),Ce=t.useCallback((j,$)=>{const O=Ge(j,s.cwd),me=O.line?{...$||{},targetLine:O.line}:$;I.setFileViewerPath(O.path,me,s.cwd)},[s.cwd]),je=t.useCallback((j,$)=>{W({command:j,output:$,isLive:$==="Running..."})},[]),ke=t.useCallback(j=>{Y(j)},[]),r=t.useCallback(()=>{E(!1),C.current=!0,p(!1)},[]),X=t.useCallback(()=>G(null),[]),de=t.useCallback(()=>W(null),[]),ie=t.useCallback(()=>Y(null),[]),ue=t.useCallback(j=>{j.stopPropagation(),M()},[M]),Re=rt[s.status]||"#888888",oe=(a==null?void 0:a.messages)||[];return e.jsxs("div",{className:`agent-panel ${s.status==="working"?"working":""} ${f?"expanded":""} ${h?"focused":""}`,onClick:h?void 0:N,children:[e.jsxs("div",{className:"agent-panel-header",onClick:h?N:void 0,children:[e.jsxs("div",{className:"agent-panel-info",children:[e.jsx("span",{className:"agent-panel-status",style:{background:Re},title:s.status}),e.jsxs("span",{className:"agent-panel-name",children:[(s.isBoss||s.class==="boss")&&e.jsx("span",{className:"agent-panel-boss-crown",children:"👑"}),s.name]}),e.jsx("span",{className:`agent-panel-status-label ${s.status}`,children:s.status}),e.jsx("span",{className:"agent-panel-class",children:s.class}),e.jsx("span",{className:`agent-panel-provider ${s.provider==="codex"?"codex":s.provider==="opencode"?"opencode":"claude"}`,children:s.provider||"claude"}),e.jsxs("span",{className:"agent-panel-id",title:`ID: ${s.id}`,children:["[",s.id.substring(0,4),"]"]}),s.taskLabel?e.jsxs("div",{className:"agent-panel-task agent-panel-task-label",title:s.taskLabel,children:["📋 ",s.taskLabel]}):s.currentTask?e.jsxs("div",{className:"agent-panel-task",title:s.currentTask,children:[s.currentTask.substring(0,40),"..."]}):null]}),e.jsxs("div",{className:"agent-panel-context",title:`Context: ${Math.round(d.usedPercent)}% used (${Pe(d.totalTokens)} / ${Pe(d.contextWindow)})`,children:[e.jsx("div",{className:"agent-panel-context-bar",style:{background:d.freePercent<20?"#ff4a4a":d.freePercent<50?"#ff9e4a":"#4aff9e",width:`${d.freePercent}%`}}),e.jsxs("span",{className:"agent-panel-context-text",children:[Math.round(d.freePercent),"%"]})]}),e.jsx("div",{className:"agent-panel-actions",children:e.jsx("button",{className:"agent-panel-expand",onClick:ue,title:D(f?"commander.collapsePanel":"commander.expandPanel"),children:f?e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"4 14 10 14 10 20"}),e.jsx("polyline",{points:"20 10 14 10 14 4"}),e.jsx("line",{x1:"14",y1:"10",x2:"21",y2:"3"}),e.jsx("line",{x1:"3",y1:"21",x2:"10",y2:"14"})]}):e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("polyline",{points:"15 3 21 3 21 9"}),e.jsx("polyline",{points:"9 21 3 21 3 15"}),e.jsx("line",{x1:"21",y1:"3",x2:"14",y2:"10"}),e.jsx("line",{x1:"3",y1:"21",x2:"10",y2:"14"})]})})})]}),g&&e.jsx("div",{className:"agent-panel-supervisor-status",children:g.statusDescription}),e.jsx("div",{className:"agent-panel-content",ref:v,children:a!=null&&a.loading?e.jsx("div",{className:"agent-panel-loading",children:D("common:status.loading")}):e.jsx(e.Fragment,{children:!oe.length&&!l.length?e.jsxs("div",{className:"agent-panel-empty",children:[D("commander.noMessages"),!s.sessionId&&e.jsx("div",{style:{fontSize:"10px",color:"#666"},children:D("commander.noSessionId")})]}):e.jsx(qe,{historyMessages:oe,liveOutputs:l,agentId:s.id,viewMode:u?"advanced":"simple",selectedMessageIndex:null,isMessageSelected:he,onImageClick:we,onFileClick:Ce,onBashClick:je,onViewMarkdown:ke,scrollContainerRef:v,onScrollTopReached:P,isLoadingMore:i,hasMore:a==null?void 0:a.hasMore,shouldAutoScroll:H,onUserScroll:te,pinToBottom:A,onPinCancel:r,isLoadingHistory:a==null?void 0:a.loading})})}),e.jsxs("div",{className:`guake-input-wrapper ${s.status==="working"?"has-stop-btn is-working":""}`,children:[e.jsx(ht,{agentId:s.id,isWorking:s.status==="working",timestamp:w==null?void 0:w.timestamp}),e.jsx(ft,{command:k,onCommandChange:c,useTextarea:J,forceTextarea:_,onForceTextarea:L,onSend:ve,canSend:ae,attachedFiles:T,onAddFile:xe,onRemoveFile:se,uploadFile:ne,onAddPastedText:ge,placeholder:D("commander.command",{name:s.name}),compact:!1,inputRef:R})]}),U&&e.jsx(Ye,{url:U.url,name:U.name,onClose:X}),K&&e.jsx(Je,{state:K,onClose:de}),e.jsx(Xe,{agent:s,content:ee,onClose:ie})]})}function xt({currentArea:s,onClose:a}){const{t:o}=pe(["terminal","common"]),[f,h]=t.useState(()=>{const i=new Set(Array.from(I.getState().agents.values()).map(y=>y.name));return Ze.find(y=>!i.has(y))||`Agent-${Date.now().toString(36)}`}),[u,M]=t.useState(()=>Me(ce.LAST_CWD)),[N,R]=t.useState("scout"),[S,b]=t.useState("claude"),[D,x]=t.useState(!1),w=()=>{if(!f.trim()||!u.trim())return;x(!0),Ie(ce.LAST_CWD,u);let i;s&&(i={x:s.center.x,z:s.center.z}),I.spawnAgent(f.trim(),N,u.trim(),i,void 0,void 0,void 0,void 0,S),setTimeout(()=>{a()},500)},v=i=>{i.key==="Enter"&&!i.shiftKey&&(i.preventDefault(),w()),i.key==="Escape"&&a()};return e.jsx("div",{className:"commander-spawn-overlay",onClick:a,children:e.jsxs("div",{className:"commander-spawn-form",onClick:i=>i.stopPropagation(),children:[e.jsxs("div",{className:"commander-spawn-header",children:[e.jsx("h3",{children:o("spawn.addNewAgent")}),s&&e.jsxs("span",{className:"commander-spawn-area",children:[e.jsx("span",{className:"commander-spawn-area-dot",style:{background:s.color}}),s.name]})]}),e.jsxs("div",{className:"commander-spawn-body",children:[e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.name")}),e.jsx("input",{type:"text",value:f,onChange:i=>h(i.target.value),onKeyDown:v,autoFocus:!0})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.workingDirectory")}),e.jsx(Qe,{value:u,onChange:M,onSubmit:w,placeholder:o("spawn.workingDirPlaceholder"),directoriesOnly:!0})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.class")}),e.jsx("div",{className:"commander-spawn-classes",children:et.map(i=>e.jsxs("button",{className:`commander-spawn-class ${N===i.id?"selected":""}`,onClick:()=>R(i.id),children:[e.jsx(tt,{classId:i.id,size:18,className:"commander-spawn-class-icon"}),e.jsx("span",{children:i.name})]},i.id))})]}),e.jsxs("div",{className:"commander-spawn-field",children:[e.jsx("label",{children:o("common:labels.runtime")}),e.jsxs("div",{className:"commander-spawn-classes",children:[e.jsxs("button",{className:`commander-spawn-class ${S==="claude"?"selected":""}`,onClick:()=>b("claude"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"🧠"}),e.jsx("span",{children:"Claude"})]}),e.jsxs("button",{className:`commander-spawn-class ${S==="codex"?"selected":""}`,onClick:()=>b("codex"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"⚙️"}),e.jsx("span",{children:"Codex"})]}),e.jsxs("button",{className:`commander-spawn-class ${S==="opencode"?"selected":""}`,onClick:()=>b("opencode"),children:[e.jsx("span",{className:"commander-spawn-class-icon",children:"🟢"}),e.jsx("span",{children:"OpenCode"})]})]})]})]}),e.jsxs("div",{className:"commander-spawn-footer",children:[e.jsx("button",{className:"commander-spawn-cancel",onClick:a,children:o("common:buttons.cancel")}),e.jsx("button",{className:"commander-spawn-submit",onClick:w,disabled:!f.trim()||!u.trim()||D,children:o(D?"common:buttons.deploying":"common:buttons.deploy")})]})]})})}const Te=t.memo(function({agent:a,history:o,isExpanded:f,isFocused:h,advancedView:u,index:M,onExpand:N,onCollapse:R,onFocus:S,onInputRef:b,onLoadMore:D,onClearHistory:x}){const w=ot(a.id),v=t.useCallback(()=>{f?R():N(a.id)},[a.id,f,N,R]),i=t.useCallback(()=>{S(h?-1:M)},[M,h,S]),y=t.useCallback(H=>{b(a.id,H)},[a.id,b]),m=t.useCallback(()=>{D(a.id)},[a.id,D]),C=t.useCallback(()=>{x(a.id)},[a.id,x]);return e.jsx(gt,{agent:a,history:o,outputs:w,isExpanded:f,isFocused:h,advancedView:u,onExpand:v,onFocus:i,inputRef:y,onLoadMore:m,onClearHistory:C})});function St({isOpen:s,onClose:a}){const{t:o}=pe(["terminal","common"]),f=st(),h=nt(),[u,M]=t.useState(()=>Me(ce.COMMANDER_TAB,"all")),[N,R]=t.useState(0),[S,b]=t.useState(null),D=t.useRef(null),[x,w]=t.useState(0),[v,i]=t.useState(!1),[y,m]=t.useState(null),[C,H]=t.useState(!1),[p,A]=t.useState(()=>{try{const n=Me(ce.COMMANDER_FILTERS,"");if(n)return{...Ne,...JSON.parse(n)}}catch{}return Ne}),E=t.useRef(new Map),U=t.useRef([]),G=t.useRef(0),K=t.useRef([]),W=t.useRef(u),{histories:ee,loadMoreHistory:Y,clearAgentHistory:k}=mt({isOpen:s,agents:f});t.useEffect(()=>{s||(b(null),w(0),i(!1))},[s]);const c=t.useMemo(()=>{const n=Array.from(h.values()).sort((g,d)=>g.name.localeCompare(d.name)),l=[{id:"all",name:o("common:labels.all")}];for(const g of n)l.push({id:g.id,name:g.name,color:g.color});return l.push({id:"unassigned",name:o("commander.unassigned")}),l},[h]),_=t.useMemo(()=>u==="all"||u==="unassigned"?null:h.get(u)||null,[u,h]),L=t.useMemo(()=>{const n=new Map;n.set("all",f.size);let l=0;for(const g of f.values()){const d=I.getAreaForAgent(g.id);d?n.set(d.id,(n.get(d.id)||0)+1):l++}return n.set("unassigned",l),n},[f]),J=p.status!=="all"||p.activity!=="all"||p.sort!=="activity",q=(p.status!=="all"?1:0)+(p.activity!=="all"?1:0)+(p.sort!=="activity"?1:0),B=t.useMemo(()=>{const n=d=>d.isBoss===!0||d.class==="boss",l=Date.now();let g=Array.from(f.values());if(u==="unassigned"?g=g.filter(d=>!I.getAreaForAgent(d.id)):u!=="all"&&(g=g.filter(d=>{const P=I.getAreaForAgent(d.id);return(P==null?void 0:P.id)===u})),p.status!=="all"&&(g=g.filter(d=>{switch(p.status){case"working":return d.status==="working";case"idle":return d.status==="idle";case"error":return d.status==="error"||d.status==="waiting"||d.status==="waiting_permission";case"offline":return d.status==="offline"||d.status==="orphaned";default:return!0}})),p.activity!=="all"){const d=lt[p.activity];g=g.filter(P=>l-(P.lastActivity||0)<d)}return g.sort((d,P)=>{var te,Q;if(n(d)&&!n(P))return-1;if(!n(d)&&n(P))return 1;switch(p.sort){case"activity":return(P.lastActivity||0)-(d.lastActivity||0);case"name":return d.name.localeCompare(P.name);case"created":return(d.createdAt||0)-(P.createdAt||0);case"context":{const z=((te=d.contextStats)==null?void 0:te.usedPercent)??(d.contextUsed||0)/(d.contextLimit||2e5)*100;return(((Q=P.contextStats)==null?void 0:Q.usedPercent)??(P.contextUsed||0)/(P.contextLimit||2e5)*100)-z}default:return(P.lastActivity||0)-(d.lastActivity||0)}}),g},[f,u,p]),F=Math.ceil(B.length/Ae),T=t.useMemo(()=>B.slice(N*Ae,(N+1)*Ae),[B,N]);U.current=T,D.current=S,G.current=x,K.current=c,W.current=u,$e("commander-expanded",S!==null,()=>b(null));const V=at();t.useEffect(()=>{s&&V&&(b(V),I.clearCommanderExpandRequest())},[s,V]);const se=t.useCallback(()=>b(null),[]),ne=t.useCallback(n=>b(n),[]),le=t.useCallback(n=>w(n),[]),ae=t.useCallback((n,l)=>{l?E.current.set(n,l):E.current.delete(n)},[]);return t.useEffect(()=>{R(0),Ie(ce.COMMANDER_TAB,u)},[u]),t.useEffect(()=>{Ie(ce.COMMANDER_FILTERS,JSON.stringify(p)),R(0)},[p]),t.useEffect(()=>{var l;if(!s||window.matchMedia("(pointer: coarse)").matches)return;const n=S||((l=U.current[x])==null?void 0:l.id);if(n){const g=E.current.get(n);g&&document.activeElement!==g&&setTimeout(()=>g.focus(),50)}},[s,x,S]),t.useEffect(()=>{if(!s)return;const n=l=>{const g=I.getShortcuts(),d=l.target,P=d.tagName==="INPUT"||d.tagName==="TEXTAREA",te=U.current,Q=te.length-1,z=D.current,re=g.find(r=>r.id==="commander-close");if(Z(l,re)){const{fileViewerPath:r,contextModalAgentId:X}=I.getState();if(r||X)return;l.preventDefault(),l.stopImmediatePropagation(),z?b(null):a();return}const he=g.find(r=>r.id==="commander-vim-left");if(Z(l,he)&&!z){l.preventDefault(),w(r=>r>0?r-1:r);return}const ge=g.find(r=>r.id==="commander-vim-right");if(Z(l,ge)&&!z){l.preventDefault(),w(r=>r<Q?r+1:r);return}const xe=g.find(r=>r.id==="commander-vim-up");if(Z(l,xe)&&!z){l.preventDefault(),w(r=>r>=fe?r-fe:r);return}const ve=g.find(r=>r.id==="commander-vim-down");if(Z(l,ve)&&!z){l.preventDefault(),w(r=>r+fe<=Q?r+fe:r);return}const we=g.find(r=>r.id==="commander-expand");if(Z(l,we)){if(l.preventDefault(),z)b(null);else{const r=te[G.current];r&&b(r.id)}return}const Ce=g.find(r=>r.id==="commander-new-agent");if(Z(l,Ce)){l.preventDefault(),i(!0);return}const je=g.find(r=>r.id==="commander-next-tab"),ke=g.find(r=>r.id==="commander-prev-tab");if(!P){const r=K.current;if(Z(l,je)){const X=I.getState().latestNotificationAgentId;if(X){if(l.preventDefault(),l.stopPropagation(),!I.getState().agents.get(X)){I.setLatestNotificationAgentId(null);return}const oe=I.getAreaForAgent(X);oe&&r.some(j=>j.id===oe.id)?M(oe.id):M("unassigned"),b(X),w(0),R(0),I.setLatestNotificationAgentId(null);return}l.preventDefault(),l.stopPropagation();const ie=(r.findIndex(ue=>ue.id===W.current)+1)%r.length;M(r[ie].id),w(0);return}if(Z(l,ke)){l.preventDefault(),l.stopPropagation();const de=(r.findIndex(ie=>ie.id===W.current)-1+r.length)%r.length;M(r[de].id),w(0);return}}};return document.addEventListener("keydown",n,!0),()=>document.removeEventListener("keydown",n,!0)},[s,a]),s?e.jsx("div",{className:"commander-overlay",onClick:a,children:e.jsxs("div",{className:"commander-view",onClick:n=>n.stopPropagation(),children:[e.jsxs("div",{className:"commander-header",children:[e.jsxs("div",{className:"commander-title-section",children:[e.jsx("h2",{className:"commander-title",children:o("commander.title")}),e.jsx("span",{className:"commander-shortcuts",children:o("commander.shortcuts")})]}),e.jsxs("div",{className:"commander-controls",children:[e.jsx("button",{className:`commander-view-toggle ${C?"active":""}`,onClick:()=>H(!C),title:o(C?"commander.simple":"commander.advanced"),children:C?`◉ ${o("commander.advanced")}`:`○ ${o("commander.simple")}`}),e.jsx("button",{className:"commander-add-btn",onClick:()=>i(!0),title:o("commander.addAgent"),children:o("commander.addAgent")}),e.jsx("button",{className:"commander-close",onClick:a,children:o("commander.close")})]})]}),e.jsx("div",{className:"commander-tabs",children:c.map(n=>{const l=n.id!=="all"&&n.id!=="unassigned"?h.get(n.id):null,g=l&&l.directories&&l.directories.length>0;return e.jsxs("button",{className:`commander-tab ${u===n.id?"active":""}`,onClick:()=>{M(n.id),w(0)},style:n.color?{borderBottomColor:u===n.id?n.color:"transparent"}:void 0,children:[n.color&&e.jsx("span",{className:"commander-tab-dot",style:{background:n.color}}),e.jsx("span",{children:n.name}),e.jsx("span",{className:"commander-tab-count",children:L.get(n.id)||0}),g&&e.jsx("span",{className:"commander-tab-folder",onClick:d=>{d.stopPropagation(),m(n.id)},title:o("commander.openFileExplorer"),children:"📁"})]},n.id)})}),e.jsxs("div",{className:"commander-filters",children:[e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.status")}),["all","working","idle","error","offline"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.status===n?"active":""}`,onClick:()=>A(l=>({...l,status:n})),children:n==="all"?o("commander.filters.all"):n==="error"?o("commander.filters.needsAttn"):n.charAt(0).toUpperCase()+n.slice(1)},n))]}),e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.active")}),["all","1h","6h","24h"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.activity===n?"active":""}`,onClick:()=>A(l=>({...l,activity:n})),children:n==="all"?o("commander.filters.any"):`< ${n}`},n))]}),e.jsxs("div",{className:"commander-filter-group",children:[e.jsx("span",{className:"commander-filter-label",children:o("commander.filters.sort")}),["activity","name","created","context"].map(n=>e.jsx("button",{className:`commander-filter-btn ${p.sort===n?"active":""}`,onClick:()=>A(l=>({...l,sort:n})),children:n==="activity"?o("commander.filters.recent"):n==="context"?o("commander.filters.context"):n.charAt(0).toUpperCase()+n.slice(1)},n))]}),J&&e.jsx("button",{className:"commander-filter-clear",onClick:()=>A(Ne),title:o("commander.clearFilters"),children:o("commander.filters.clearFilters",{count:q})})]}),F>1&&e.jsxs("div",{className:"commander-pagination",children:[e.jsxs("button",{className:"commander-page-btn",onClick:()=>R(n=>Math.max(0,n-1)),disabled:N===0,children:["← ",o("commander.prev")]}),e.jsx("span",{className:"commander-page-info",children:o("commander.page",{current:N+1,total:F,count:B.length})}),e.jsxs("button",{className:"commander-page-btn",onClick:()=>R(n=>Math.min(F-1,n+1)),disabled:N===F-1,children:[o("commander.next")," →"]})]}),e.jsx("div",{className:`commander-grid ${S?"has-expanded":""}`,"data-agent-count":S?1:T.length,children:T.length===0?e.jsx("div",{className:"commander-empty",children:o(u==="all"?"commander.noAgentsAll":u==="unassigned"?"commander.noAgentsUnassigned":"commander.noAgentsArea")}):S?(()=>{const n=f.get(S);return n?e.jsx(Te,{agent:n,history:ee.get(n.id),isExpanded:!0,isFocused:!0,advancedView:C,index:0,onExpand:ne,onCollapse:se,onFocus:le,onInputRef:ae,onLoadMore:Y,onClearHistory:k},n.id):null})():T.map((n,l)=>e.jsx(Te,{agent:n,history:ee.get(n.id),isExpanded:!1,isFocused:l===x,advancedView:C,index:l,onExpand:ne,onCollapse:se,onFocus:le,onInputRef:ae,onLoadMore:Y,onClearHistory:k},n.id))}),v&&e.jsx(xt,{currentArea:_,onClose:()=>i(!1)}),y&&e.jsx(ct,{isOpen:!0,areaId:y,onClose:()=>m(null),onChangeArea:n=>m(n)})]})}):null}export{St as CommanderView};
|