tide-commander 1.40.4 → 1.41.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 (39) hide show
  1. package/dist/assets/{BossLogsModal-CehuxNwV.js → BossLogsModal-gE17BBT9.js} +1 -1
  2. package/dist/assets/{BossSpawnModal-Cohl0WaH.js → BossSpawnModal-SPvzti1i.js} +1 -1
  3. package/dist/assets/{ControlsModal-CAVkg9mM.js → ControlsModal-A489_yUU.js} +1 -1
  4. package/dist/assets/{DockerLogsModal-BXv9Hzg-.js → DockerLogsModal-Bexhv2Eo.js} +1 -1
  5. package/dist/assets/{EmbeddedEditor-CTlTVKdD.js → EmbeddedEditor-BdrKX9Ef.js} +1 -1
  6. package/dist/assets/{GmailOAuthSetup-B1zQWbRR.js → GmailOAuthSetup-BRDLCsnz.js} +1 -1
  7. package/dist/assets/{GoogleOAuthSetup-CmayoZ-D.js → GoogleOAuthSetup-8tWGRN1a.js} +1 -1
  8. package/dist/assets/{IframeModal-DlS7y7PK.js → IframeModal-AIthNZLG.js} +1 -1
  9. package/dist/assets/{IntegrationsPanel-BPKoNwZm.js → IntegrationsPanel-D4rlShHL.js} +2 -2
  10. package/dist/assets/{LogViewerModal-Bx9IDiFM.js → LogViewerModal-CWASeq5k.js} +1 -1
  11. package/dist/assets/{MonitoringModal-DzqEa0fQ.js → MonitoringModal-GCxQ22tf.js} +1 -1
  12. package/dist/assets/{PM2LogsModal-DZXPRV5-.js → PM2LogsModal-BFJ1_6O0.js} +1 -1
  13. package/dist/assets/{RestoreArchivedAreaModal-BajWqtWn.js → RestoreArchivedAreaModal-BtuMbJVE.js} +1 -1
  14. package/dist/assets/{SaveSnapshotModal-LqaLezB-.js → SaveSnapshotModal-BUn9mntc.js} +1 -1
  15. package/dist/assets/{Scene2DCanvas-DWDmyh_y.js → Scene2DCanvas-CToncCYk.js} +1 -1
  16. package/dist/assets/{SceneManager-BgkqWsDb.js → SceneManager-BivL9Mu6.js} +1 -1
  17. package/dist/assets/{SkillsPanel-CO-Zt0Tq.js → SkillsPanel-IE07LIWC.js} +1 -1
  18. package/dist/assets/{SnapshotManager-D4Uzw6Tp.js → SnapshotManager-Cs7fZ_aA.js} +1 -1
  19. package/dist/assets/{SpawnModal-BdCgTKpM.js → SpawnModal-DbfTe3y2.js} +1 -1
  20. package/dist/assets/{SubordinateAssignmentModal-BoaofULj.js → SubordinateAssignmentModal-DdANoM7g.js} +1 -1
  21. package/dist/assets/{SupervisorPanel-D8Cp77my.js → SupervisorPanel-CE7sMgHN.js} +1 -1
  22. package/dist/assets/{TriggerManagerPanel-CFf3Tud5.js → TriggerManagerPanel-Cyb1Sf8s.js} +1 -1
  23. package/dist/assets/{WorkflowEditorPanel-EtzhBZWw.js → WorkflowEditorPanel-BM9nnUIT.js} +1 -1
  24. package/dist/assets/{index-CDAtstMx.js → index-B_0CIcus.js} +1 -1
  25. package/dist/assets/{index-BKRKKMPQ.js → index-CvetF6vL.js} +3 -3
  26. package/dist/assets/{index-DBpmD8r7.js → index-DESPWRkl.js} +2 -2
  27. package/dist/assets/{index-2YWd58Wh.js → index-DahUmubU.js} +1 -1
  28. package/dist/assets/{index-BgTRovwT.js → index-DlFukYeW.js} +1 -1
  29. package/dist/assets/{index-BiJ_hIit.js → index-Ez0uF12M.js} +1 -1
  30. package/dist/assets/{index-DByGRjfY.js → index-bXLSkGdM.js} +1 -1
  31. package/dist/assets/{index-VO6fNr63.js → index-dnQQyjiL.js} +1 -1
  32. package/dist/assets/main-BL6u5aPD.js +153 -0
  33. package/dist/assets/main-CVYa_fKP.css +1 -0
  34. package/dist/assets/{web-1BwWjkKM.js → web-CwCZTch8.js} +1 -1
  35. package/dist/assets/{web-BXQj42md.js → web-DGZ9VJ1o.js} +1 -1
  36. package/dist/index.html +2 -2
  37. package/package.json +1 -1
  38. package/dist/assets/main-BFSqr5mR.css +0 -1
  39. package/dist/assets/main-BSyGZK2z.js +0 -152
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-BXQj42md.js","assets/main-BSyGZK2z.js","assets/modulepreload-polyfill-B5Qt9EMX.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-Chj50gSY.js","assets/main-BFSqr5mR.css"])))=>i.map(i=>d[i]);
2
- import{bm as e,aN as o}from"./main-BSyGZK2z.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";var i;(function(r){r.Heavy="HEAVY",r.Medium="MEDIUM",r.Light="LIGHT"})(i||(i={}));var t;(function(r){r.Success="SUCCESS",r.Warning="WARNING",r.Error="ERROR"})(t||(t={}));const p=e("Haptics",{web:()=>o(()=>import("./web-BXQj42md.js"),__vite__mapDeps([0,1,2,3,4,5])).then(r=>new r.HapticsWeb)});export{p as Haptics,i as ImpactStyle,t as NotificationType};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-DGZ9VJ1o.js","assets/main-BL6u5aPD.js","assets/modulepreload-polyfill-B5Qt9EMX.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-Chj50gSY.js","assets/main-CVYa_fKP.css"])))=>i.map(i=>d[i]);
2
+ import{bm as e,aN as o}from"./main-BL6u5aPD.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";var i;(function(r){r.Heavy="HEAVY",r.Medium="MEDIUM",r.Light="LIGHT"})(i||(i={}));var t;(function(r){r.Success="SUCCESS",r.Warning="WARNING",r.Error="ERROR"})(t||(t={}));const p=e("Haptics",{web:()=>o(()=>import("./web-DGZ9VJ1o.js"),__vite__mapDeps([0,1,2,3,4,5])).then(r=>new r.HapticsWeb)});export{p as Haptics,i as ImpactStyle,t as NotificationType};
@@ -1 +1 @@
1
- import{u as J,a as Z,r as n,s as b,j as e,D as re,b as le,c as ce,d as ie,g as de,e as oe,Q as ue,R as be}from"./main-BSyGZK2z.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const me=({building:a,connections:p,activeConnectionId:l,activeDatabase:i,collapsed:y,onToggleCollapse:x,onConnectionChange:$,onDatabaseChange:N,onInsertTable:Q,onSelectTableQuery:P})=>{const{t:d}=J(["terminal"]),w=Z(a.id),[M,r]=n.useState(new Set),[o,v]=n.useState(""),[S,F]=n.useState(""),[H,k]=n.useState(!1),[U,R]=n.useState(null),O=n.useRef(null),q=n.useRef(null),A=n.useRef(null),j=l?w.databases.get(l)??[]:[],G=l&&i?`${l}:${i}`:"",f=G?w.tables.get(G)??[]:[],_=l?w.connectionStatus.get(l):void 0,D=n.useMemo(()=>{if(!o.trim())return j;const t=o.toLowerCase();return j.filter(u=>u.toLowerCase().includes(t))},[j,o]),h=n.useMemo(()=>{if(!S.trim())return f;const t=S.toLowerCase();return f.filter(u=>u.name.toLowerCase().includes(t))},[f,S]);n.useEffect(()=>{const t=u=>{q.current&&!q.current.contains(u.target)&&k(!1)};return H&&document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[H]),n.useEffect(()=>{l&&!_&&b.testDatabaseConnection(a.id,l)},[a.id,l,_]),n.useEffect(()=>{l&&(_!=null&&_.connected)&&j.length===0&&b.listDatabases(a.id,l)},[a.id,l,_==null?void 0:_.connected,j.length]),n.useEffect(()=>{l&&i&&f.length===0&&b.listTables(a.id,l,i)},[a.id,l,i,f.length]),n.useEffect(()=>{R(null),F("")},[l,i]);const C=n.useCallback(t=>{r(u=>{const g=new Set(u);if(g.has(t))g.delete(t);else if(g.add(t),l&&i){const T=`${l}:${i}:${t}`;w.tableSchemas.has(T)||b.getTableSchema(a.id,l,i,t)}return g})},[a.id,l,i,w.tableSchemas]),K=t=>{if(!l||!i)return null;const u=`${l}:${i}:${t}`;return w.tableSchemas.get(u)};return y?e.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.expandSidebar"),children:"»"})}):e.jsxs("div",{className:"database-sidebar",children:[e.jsxs("div",{className:"database-sidebar__header",children:[e.jsx("span",{children:d("terminal:database.explorer")}),e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.collapseSidebar"),children:"«"})]}),e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.connection")}),e.jsx("select",{className:"database-sidebar__select",value:l||"",onChange:t=>$(t.target.value),children:p.length===0?e.jsx("option",{value:"",children:d("terminal:database.noConnections")}):p.map(t=>{var u;return e.jsxs("option",{value:t.id,children:[((u=re[t.engine])==null?void 0:u.icon)??"🗄️"," ",t.name]},t.id)})}),_&&e.jsx("div",{className:`database-sidebar__status ${_.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:_.connected?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),d("terminal:database.connected"),_.serverVersion&&e.jsxs("span",{className:"database-sidebar__version",children:["(",_.serverVersion,")"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),_.error||d("terminal:database.disconnected")]})})]}),j.length>0&&e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.databaseTitle")}),e.jsxs("div",{className:"database-sidebar__searchable-select",ref:q,children:[e.jsx("input",{ref:O,className:"database-sidebar__search-input",type:"text",value:H?o:i||"",placeholder:d("terminal:database.selectDatabase"),onChange:t=>{v(t.target.value),H||k(!0)},onFocus:()=>{k(!0),v("")},onKeyDown:t=>{var u,g;t.key==="Escape"?(k(!1),v(""),(u=O.current)==null||u.blur()):t.key==="Enter"&&D.length===1&&(N(D[0]),k(!1),v(""),(g=O.current)==null||g.blur())}}),H&&e.jsx("div",{className:"database-sidebar__dropdown",children:D.length===0?e.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):D.map(t=>e.jsx("div",{className:`database-sidebar__dropdown-item ${t===i?"database-sidebar__dropdown-item--active":""}`,onMouseDown:u=>{u.preventDefault(),N(t),k(!1),v("")},children:t},t))})]})]}),f.length>0&&e.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[e.jsx("div",{className:"database-sidebar__section-title",children:S.trim()?d("terminal:database.tablesCount",{count:h.length})+` / ${f.length}`:d("terminal:database.tablesCount",{count:f.length})}),e.jsxs("div",{className:"database-sidebar__table-filter",children:[e.jsx("input",{ref:A,className:"database-sidebar__table-filter-input",type:"text",value:S,placeholder:d("terminal:database.filterTables"),onChange:t=>F(t.target.value),onKeyDown:t=>{var u;t.key==="Escape"&&(S?F(""):(u=A.current)==null||u.blur(),t.stopPropagation())}}),S&&e.jsx("button",{className:"database-sidebar__table-filter-clear",onClick:()=>{var t;F(""),(t=A.current)==null||t.focus()},title:"Clear filter",children:"×"})]}),e.jsxs("div",{className:"database-sidebar__tables",children:[S.trim()&&h.length===0&&e.jsx("div",{className:"database-sidebar__tables-empty",children:d("terminal:database.noTablesMatch")}),h.map(t=>{const u=M.has(t.name),g=u?K(t.name):null;return e.jsxs("div",{className:"database-sidebar__table",children:[e.jsxs("div",{className:"database-sidebar__table-header",children:[e.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>C(t.name),title:u?"Collapse table schema":"Expand table schema",children:u?"▼":"▶"}),e.jsx("span",{className:"database-sidebar__table-icon",children:t.type==="view"?"👁":"📋"}),e.jsx("span",{className:`database-sidebar__table-name ${U===t.name?"database-sidebar__table-name--selected":""}`,onClick:()=>R(t.name),onDoubleClick:()=>{R(t.name),P(t.name)},children:t.name}),e.jsx("button",{className:"database-sidebar__table-insert",onClick:T=>{T.stopPropagation(),Q(t.name)},title:d("terminal:database.insertTableName"),children:"+"})]}),u&&g&&e.jsx("div",{className:"database-sidebar__table-columns",children:g.columns.map(T=>e.jsxs("div",{className:"database-sidebar__column",onClick:()=>Q(T.name),title:`${T.type}${T.nullable?" NULL":" NOT NULL"}${T.primaryKey?" PK":""}`,children:[e.jsx("span",{className:"database-sidebar__column-icon",children:T.primaryKey?"🔑":""}),e.jsx("span",{className:"database-sidebar__column-name",children:T.name}),e.jsx("span",{className:"database-sidebar__column-type",children:T.type})]},T.name))})]},t.name)})]})]})]})},he=({buildingId:a,history:p,onLoadQuery:l})=>{const{t:i}=J(["terminal"]),[y,x]=n.useState(""),[$,N]=n.useState(!1),Q=n.useMemo(()=>{let r=p;if($&&(r=r.filter(o=>o.favorite)),y.trim()){const o=y.toLowerCase();r=r.filter(v=>v.query.toLowerCase().includes(o)||v.database.toLowerCase().includes(o))}return r},[p,$,y]),P=r=>{const o=new Date(r),S=new Date().getTime()-o.getTime();return S<1440*60*1e3?o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):S<10080*60*1e3?o.toLocaleDateString([],{weekday:"short"})+" "+o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):o.toLocaleDateString([],{month:"short",day:"numeric"})},d=n.useCallback((r,o)=>{o.stopPropagation(),b.toggleQueryFavorite(a,r)},[a]),w=n.useCallback((r,o)=>{o.stopPropagation(),b.deleteQueryFromHistory(a,r)},[a]),M=n.useCallback(()=>{confirm(i("terminal:database.confirmClearHistory"))&&b.clearQueryHistory(a)},[a,i]);return p.length===0?e.jsxs("div",{className:"query-history query-history--empty",children:[e.jsx("p",{children:i("terminal:database.noHistory")}),e.jsx("p",{children:i("terminal:database.queriesAppearHere")})]}):e.jsxs("div",{className:"query-history",children:[e.jsxs("div",{className:"query-history__toolbar",children:[e.jsx("input",{type:"text",className:"query-history__search",placeholder:i("terminal:database.searchQueries"),value:y,onChange:r=>x(r.target.value)}),e.jsxs("label",{className:"query-history__filter",children:[e.jsx("input",{type:"checkbox",checked:$,onChange:r=>N(r.target.checked)}),i("terminal:database.favoritesOnly")]}),e.jsx("button",{className:"query-history__clear",onClick:M,title:i("terminal:database.clearAll"),children:i("terminal:database.clearAll")})]}),e.jsxs("div",{className:"query-history__list",children:[Q.map(r=>e.jsxs("div",{className:`query-history__item ${r.status==="error"?"query-history__item--error":""}`,onClick:()=>l(r.query),children:[e.jsxs("div",{className:"query-history__item-header",children:[e.jsx("span",{className:`query-history__status ${r.status==="success"?"query-history__status--success":"query-history__status--error"}`,children:r.status==="success"?"✓":"✗"}),e.jsx("span",{className:"query-history__database",children:r.database}),e.jsx("span",{className:"query-history__date",children:P(r.executedAt)}),e.jsxs("span",{className:"query-history__duration",children:[r.duration,"ms"]}),r.rowCount!==void 0&&e.jsx("span",{className:"query-history__row-count",children:i("terminal:database.rowCount",{count:r.rowCount})})]}),e.jsx("div",{className:"query-history__query",children:e.jsx("code",{children:r.query.length>200?r.query.substring(0,200)+"...":r.query})}),r.error&&e.jsx("div",{className:"query-history__error",children:r.error}),e.jsxs("div",{className:"query-history__actions",children:[e.jsx("button",{className:`query-history__favorite ${r.favorite?"query-history__favorite--active":""}`,onClick:o=>d(r.id,o),title:r.favorite?i("terminal:database.removeFromFavorites"):i("terminal:database.addToFavorites"),children:r.favorite?"★":"☆"}),e.jsx("button",{className:"query-history__delete",onClick:o=>w(r.id,o),title:i("terminal:database.deleteFromHistory"),children:"🗑"})]})]},r.id)),Q.length===0&&e.jsx("div",{className:"query-history__no-results",children:i("terminal:database.noQueriesMatch")})]})]})},_e=({tabs:a,activeTabId:p,onTabClick:l,onTabClose:i})=>{const{t:y}=J(["terminal"]);return e.jsx("div",{className:"database-tabs",children:a.map(x=>e.jsxs("div",{className:`database-tabs__tab ${p===x.id?"database-tabs__tab--active":""}`,children:[e.jsxs("button",{className:"database-tabs__tab-label",onClick:()=>l(x),title:`${x.connectionName} / ${x.database}`,children:[x.database,e.jsx("span",{className:"database-tabs__tab-connection",children:x.connectionName})]}),e.jsx("button",{className:"database-tabs__tab-close",onClick:()=>i(x.id),title:y("terminal:database.closeTab"),"aria-label":`Close ${x.database} tab`,children:"×"})]},x.id))})},I=a=>`db-panel-${a}`;function pe(a){try{const p=localStorage.getItem(I(a));return p?JSON.parse(p):{}}catch{return{}}}function xe(a,p){try{localStorage.setItem(I(a),JSON.stringify(p))}catch{}}const ve=({building:a,onClose:p})=>{var B,Y,W,X;const{t:l}=J(["terminal","common"]),i=Z(a.id),y=le(a.id),x=ce(a.id),$=ie(a.id),N=n.useRef(pe(a.id)),Q=n.useRef(null),P=n.useRef(0),d=((B=a.database)==null?void 0:B.connections)??[],w=(s,c)=>`${s}:${c}`,M=s=>s?(N.current.queries??{})[s]??"":N.current.generalQuery??"",[r,o]=n.useState("results"),[v,S]=n.useState(0),[F,H]=n.useState(!1),[k,U]=n.useState(!1),[R,O]=n.useState(()=>(N.current.openTabs??[]).map(c=>{var m;return{id:`${c.connectionId}:${c.database}`,connectionId:c.connectionId,connectionName:((m=d.find(L=>L.id===c.connectionId))==null?void 0:m.name)??c.connectionId,database:c.database}})),[q,A]=n.useState(N.current.activeTabId??null),[j,G]=n.useState(()=>{const s=N.current.queries??{};return N.current.generalQuery,s}),[f,_]=n.useState(M(q)),D=n.useCallback(s=>{_(c=>{const m=typeof s=="function"?s(c):s;return G(L=>{const E={...L};return q&&(E[q]=m),E}),m})},[q]),h=i.activeConnectionId??N.current.connectionId??((Y=a.database)==null?void 0:Y.activeConnectionId)??((W=d[0])==null?void 0:W.id),C=i.activeDatabase??N.current.database??((X=a.database)==null?void 0:X.activeDatabase),K=d.find(s=>s.id===h),t=n.useCallback((s,c)=>{var E;const m=w(s,c),L=((E=d.find(z=>z.id===s))==null?void 0:E.name)??s;O(z=>{if(z.some(ne=>ne.id===m))return z;const te={id:m,connectionId:s,connectionName:L,database:c};return[...z,te]}),A(m),_(j[m]??""),b.setActiveConnection(a.id,s),b.setActiveDatabase(a.id,c)},[a.id,d,j]),u=n.useCallback(s=>{O(c=>c.filter(m=>m.id!==s)),q===s&&O(c=>{if(c.length>0){const m=c[0];A(m.id),_(j[m.id]??""),b.setActiveConnection(a.id,m.connectionId),b.setActiveDatabase(a.id,m.database)}else A(null),_("");return c})},[q,a.id,j]),g=n.useCallback(s=>{A(s.id),_(j[s.id]??""),b.setActiveConnection(a.id,s.connectionId),b.setActiveDatabase(a.id,s.database)},[a.id,j]);n.useEffect(()=>{if(!k&&d.length>0){const s=N.current;s.connectionId&&d.some(c=>c.id===s.connectionId)&&(b.setActiveConnection(a.id,s.connectionId),b.listDatabases(a.id,s.connectionId),s.database&&(b.setActiveDatabase(a.id,s.database),b.listTables(a.id,s.connectionId,s.database))),U(!0)}},[a.id,d,k]),n.useEffect(()=>{b.requestQueryHistory(a.id)},[a.id]),n.useEffect(()=>{const s=c=>{c.key==="Escape"&&(c.preventDefault(),c.stopPropagation(),p())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[p]),n.useEffect(()=>{k&&h&&xe(a.id,{connectionId:h,database:C,lastQuery:f,queries:j,generalQuery:"",openTabs:R.map(s=>({connectionId:s.connectionId,database:s.database})),activeTabId:q??void 0})},[a.id,h,C,f,k,R,q,j]);const T=n.useCallback(s=>{var c;if(!(!h||!C||!f.trim()||$))if(s==="cursor"){const m=(c=Q.current)==null?void 0:c.querySelector(".query-editor__textarea"),L=(m==null?void 0:m.selectionStart)??P.current,E=de(f,L);E&&b.executeQuery(a.id,h,C,E)}else{const m=oe(f);m.length<=1?b.executeQuery(a.id,h,C,f.trim()):m.forEach((L,E)=>{setTimeout(()=>{b.executeQuery(a.id,h,C,L.sql)},E*150)})}},[a.id,h,C,f,$]),ee=n.useCallback(s=>{D(s),o("results")},[]),ae=n.useCallback(s=>{b.setActiveConnection(a.id,s),b.listDatabases(a.id,s)},[a.id]),se=n.useCallback(s=>{h&&(t(h,s),b.listTables(a.id,h,s))},[a.id,h,t]),V=y[v];return d.length===0?e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:"🗄️"}),e.jsx("span",{className:"database-panel__name",children:a.name})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsx("div",{className:"database-panel__body",children:e.jsxs("div",{className:"database-panel__no-connections",children:[e.jsx("div",{className:"database-panel__no-connections-icon",children:"🔌"}),e.jsx("h3",{children:l("terminal:database.noConnections")}),e.jsx("p",{children:l("terminal:database.noConnectionsDesc")}),e.jsx("p",{children:l("terminal:database.toGetStarted")}),e.jsxs("ol",{children:[e.jsx("li",{children:l("terminal:database.step1Close")}),e.jsx("li",{children:l("terminal:database.step2Settings")}),e.jsx("li",{children:l("terminal:database.step3AddConnection")}),e.jsx("li",{children:l("terminal:database.step4Reopen")})]})]})})]}):e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:(K==null?void 0:K.engine)==="mysql"?"🐬":"🐘"}),e.jsx("span",{className:"database-panel__name",children:a.name}),K&&e.jsxs("span",{className:"database-panel__connection-info",children:[K.name," / ",C||l("terminal:database.noDatabaseSelected")]})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsxs("div",{className:"database-panel__body",children:[e.jsx(me,{building:a,connections:d,activeConnectionId:h,activeDatabase:C,collapsed:F,onToggleCollapse:()=>H(!F),onConnectionChange:ae,onDatabaseChange:se,onInsertTable:s=>D(c=>c+` ${s}`),onSelectTableQuery:s=>{const c=`SELECT * FROM ${s}`;D(c),h&&C&&b.executeQuery(a.id,h,C,c)}}),e.jsxs("div",{className:"database-panel__main",children:[R.length>0&&e.jsx(_e,{tabs:R,activeTabId:q,onTabClick:g,onTabClose:u}),e.jsx(ue,{query:f,onChange:D,onExecute:T,isExecuting:$,disabled:!h||!C}),e.jsxs("div",{className:"database-panel__tabs",children:[e.jsxs("button",{className:`database-panel__tab ${r==="results"?"database-panel__tab--active":""}`,onClick:()=>o("results"),children:[l("terminal:database.results"),y.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:y.length})]}),e.jsxs("button",{className:`database-panel__tab ${r==="history"?"database-panel__tab--active":""}`,onClick:()=>o("history"),children:[l("terminal:database.history"),x.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:x.length})]}),r==="results"&&y.length>1&&e.jsxs("div",{className:"database-panel__result-nav",children:[e.jsxs("button",{disabled:v>=y.length-1,onClick:()=>S(s=>s+1),children:["← ",l("terminal:database.older")]}),e.jsxs("span",{children:[v+1," / ",y.length]}),e.jsxs("button",{disabled:v<=0,onClick:()=>S(s=>s-1),children:[l("terminal:database.newer")," →"]})]})]}),e.jsx("div",{className:"database-panel__tab-content",children:r==="results"?V?e.jsx(be,{result:V,buildingId:a.id,building:a}):e.jsxs("div",{className:"database-panel__empty",children:[e.jsx("p",{children:l("terminal:database.noResultsYet")}),e.jsx("p",{children:l("terminal:database.selectDbAndRun")})]}):e.jsx(he,{buildingId:a.id,history:x,onLoadQuery:ee})})]})]})]})};export{ve as DatabasePanel,me as DatabaseSidebar,_e as DatabaseTabs,ue as QueryEditor,he as QueryHistoryPanel,be as ResultsTable};
1
+ import{u as J,a as Z,r as n,s as b,j as e,D as re,b as le,c as ce,d as ie,g as de,e as oe,Q as ue,R as be}from"./main-BL6u5aPD.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const me=({building:a,connections:p,activeConnectionId:l,activeDatabase:i,collapsed:y,onToggleCollapse:x,onConnectionChange:$,onDatabaseChange:N,onInsertTable:Q,onSelectTableQuery:P})=>{const{t:d}=J(["terminal"]),w=Z(a.id),[M,r]=n.useState(new Set),[o,v]=n.useState(""),[S,F]=n.useState(""),[H,k]=n.useState(!1),[U,R]=n.useState(null),O=n.useRef(null),q=n.useRef(null),A=n.useRef(null),j=l?w.databases.get(l)??[]:[],G=l&&i?`${l}:${i}`:"",f=G?w.tables.get(G)??[]:[],_=l?w.connectionStatus.get(l):void 0,D=n.useMemo(()=>{if(!o.trim())return j;const t=o.toLowerCase();return j.filter(u=>u.toLowerCase().includes(t))},[j,o]),h=n.useMemo(()=>{if(!S.trim())return f;const t=S.toLowerCase();return f.filter(u=>u.name.toLowerCase().includes(t))},[f,S]);n.useEffect(()=>{const t=u=>{q.current&&!q.current.contains(u.target)&&k(!1)};return H&&document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[H]),n.useEffect(()=>{l&&!_&&b.testDatabaseConnection(a.id,l)},[a.id,l,_]),n.useEffect(()=>{l&&(_!=null&&_.connected)&&j.length===0&&b.listDatabases(a.id,l)},[a.id,l,_==null?void 0:_.connected,j.length]),n.useEffect(()=>{l&&i&&f.length===0&&b.listTables(a.id,l,i)},[a.id,l,i,f.length]),n.useEffect(()=>{R(null),F("")},[l,i]);const C=n.useCallback(t=>{r(u=>{const g=new Set(u);if(g.has(t))g.delete(t);else if(g.add(t),l&&i){const T=`${l}:${i}:${t}`;w.tableSchemas.has(T)||b.getTableSchema(a.id,l,i,t)}return g})},[a.id,l,i,w.tableSchemas]),K=t=>{if(!l||!i)return null;const u=`${l}:${i}:${t}`;return w.tableSchemas.get(u)};return y?e.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.expandSidebar"),children:"»"})}):e.jsxs("div",{className:"database-sidebar",children:[e.jsxs("div",{className:"database-sidebar__header",children:[e.jsx("span",{children:d("terminal:database.explorer")}),e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.collapseSidebar"),children:"«"})]}),e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.connection")}),e.jsx("select",{className:"database-sidebar__select",value:l||"",onChange:t=>$(t.target.value),children:p.length===0?e.jsx("option",{value:"",children:d("terminal:database.noConnections")}):p.map(t=>{var u;return e.jsxs("option",{value:t.id,children:[((u=re[t.engine])==null?void 0:u.icon)??"🗄️"," ",t.name]},t.id)})}),_&&e.jsx("div",{className:`database-sidebar__status ${_.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:_.connected?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),d("terminal:database.connected"),_.serverVersion&&e.jsxs("span",{className:"database-sidebar__version",children:["(",_.serverVersion,")"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),_.error||d("terminal:database.disconnected")]})})]}),j.length>0&&e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.databaseTitle")}),e.jsxs("div",{className:"database-sidebar__searchable-select",ref:q,children:[e.jsx("input",{ref:O,className:"database-sidebar__search-input",type:"text",value:H?o:i||"",placeholder:d("terminal:database.selectDatabase"),onChange:t=>{v(t.target.value),H||k(!0)},onFocus:()=>{k(!0),v("")},onKeyDown:t=>{var u,g;t.key==="Escape"?(k(!1),v(""),(u=O.current)==null||u.blur()):t.key==="Enter"&&D.length===1&&(N(D[0]),k(!1),v(""),(g=O.current)==null||g.blur())}}),H&&e.jsx("div",{className:"database-sidebar__dropdown",children:D.length===0?e.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):D.map(t=>e.jsx("div",{className:`database-sidebar__dropdown-item ${t===i?"database-sidebar__dropdown-item--active":""}`,onMouseDown:u=>{u.preventDefault(),N(t),k(!1),v("")},children:t},t))})]})]}),f.length>0&&e.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[e.jsx("div",{className:"database-sidebar__section-title",children:S.trim()?d("terminal:database.tablesCount",{count:h.length})+` / ${f.length}`:d("terminal:database.tablesCount",{count:f.length})}),e.jsxs("div",{className:"database-sidebar__table-filter",children:[e.jsx("input",{ref:A,className:"database-sidebar__table-filter-input",type:"text",value:S,placeholder:d("terminal:database.filterTables"),onChange:t=>F(t.target.value),onKeyDown:t=>{var u;t.key==="Escape"&&(S?F(""):(u=A.current)==null||u.blur(),t.stopPropagation())}}),S&&e.jsx("button",{className:"database-sidebar__table-filter-clear",onClick:()=>{var t;F(""),(t=A.current)==null||t.focus()},title:"Clear filter",children:"×"})]}),e.jsxs("div",{className:"database-sidebar__tables",children:[S.trim()&&h.length===0&&e.jsx("div",{className:"database-sidebar__tables-empty",children:d("terminal:database.noTablesMatch")}),h.map(t=>{const u=M.has(t.name),g=u?K(t.name):null;return e.jsxs("div",{className:"database-sidebar__table",children:[e.jsxs("div",{className:"database-sidebar__table-header",children:[e.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>C(t.name),title:u?"Collapse table schema":"Expand table schema",children:u?"▼":"▶"}),e.jsx("span",{className:"database-sidebar__table-icon",children:t.type==="view"?"👁":"📋"}),e.jsx("span",{className:`database-sidebar__table-name ${U===t.name?"database-sidebar__table-name--selected":""}`,onClick:()=>R(t.name),onDoubleClick:()=>{R(t.name),P(t.name)},children:t.name}),e.jsx("button",{className:"database-sidebar__table-insert",onClick:T=>{T.stopPropagation(),Q(t.name)},title:d("terminal:database.insertTableName"),children:"+"})]}),u&&g&&e.jsx("div",{className:"database-sidebar__table-columns",children:g.columns.map(T=>e.jsxs("div",{className:"database-sidebar__column",onClick:()=>Q(T.name),title:`${T.type}${T.nullable?" NULL":" NOT NULL"}${T.primaryKey?" PK":""}`,children:[e.jsx("span",{className:"database-sidebar__column-icon",children:T.primaryKey?"🔑":""}),e.jsx("span",{className:"database-sidebar__column-name",children:T.name}),e.jsx("span",{className:"database-sidebar__column-type",children:T.type})]},T.name))})]},t.name)})]})]})]})},he=({buildingId:a,history:p,onLoadQuery:l})=>{const{t:i}=J(["terminal"]),[y,x]=n.useState(""),[$,N]=n.useState(!1),Q=n.useMemo(()=>{let r=p;if($&&(r=r.filter(o=>o.favorite)),y.trim()){const o=y.toLowerCase();r=r.filter(v=>v.query.toLowerCase().includes(o)||v.database.toLowerCase().includes(o))}return r},[p,$,y]),P=r=>{const o=new Date(r),S=new Date().getTime()-o.getTime();return S<1440*60*1e3?o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):S<10080*60*1e3?o.toLocaleDateString([],{weekday:"short"})+" "+o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):o.toLocaleDateString([],{month:"short",day:"numeric"})},d=n.useCallback((r,o)=>{o.stopPropagation(),b.toggleQueryFavorite(a,r)},[a]),w=n.useCallback((r,o)=>{o.stopPropagation(),b.deleteQueryFromHistory(a,r)},[a]),M=n.useCallback(()=>{confirm(i("terminal:database.confirmClearHistory"))&&b.clearQueryHistory(a)},[a,i]);return p.length===0?e.jsxs("div",{className:"query-history query-history--empty",children:[e.jsx("p",{children:i("terminal:database.noHistory")}),e.jsx("p",{children:i("terminal:database.queriesAppearHere")})]}):e.jsxs("div",{className:"query-history",children:[e.jsxs("div",{className:"query-history__toolbar",children:[e.jsx("input",{type:"text",className:"query-history__search",placeholder:i("terminal:database.searchQueries"),value:y,onChange:r=>x(r.target.value)}),e.jsxs("label",{className:"query-history__filter",children:[e.jsx("input",{type:"checkbox",checked:$,onChange:r=>N(r.target.checked)}),i("terminal:database.favoritesOnly")]}),e.jsx("button",{className:"query-history__clear",onClick:M,title:i("terminal:database.clearAll"),children:i("terminal:database.clearAll")})]}),e.jsxs("div",{className:"query-history__list",children:[Q.map(r=>e.jsxs("div",{className:`query-history__item ${r.status==="error"?"query-history__item--error":""}`,onClick:()=>l(r.query),children:[e.jsxs("div",{className:"query-history__item-header",children:[e.jsx("span",{className:`query-history__status ${r.status==="success"?"query-history__status--success":"query-history__status--error"}`,children:r.status==="success"?"✓":"✗"}),e.jsx("span",{className:"query-history__database",children:r.database}),e.jsx("span",{className:"query-history__date",children:P(r.executedAt)}),e.jsxs("span",{className:"query-history__duration",children:[r.duration,"ms"]}),r.rowCount!==void 0&&e.jsx("span",{className:"query-history__row-count",children:i("terminal:database.rowCount",{count:r.rowCount})})]}),e.jsx("div",{className:"query-history__query",children:e.jsx("code",{children:r.query.length>200?r.query.substring(0,200)+"...":r.query})}),r.error&&e.jsx("div",{className:"query-history__error",children:r.error}),e.jsxs("div",{className:"query-history__actions",children:[e.jsx("button",{className:`query-history__favorite ${r.favorite?"query-history__favorite--active":""}`,onClick:o=>d(r.id,o),title:r.favorite?i("terminal:database.removeFromFavorites"):i("terminal:database.addToFavorites"),children:r.favorite?"★":"☆"}),e.jsx("button",{className:"query-history__delete",onClick:o=>w(r.id,o),title:i("terminal:database.deleteFromHistory"),children:"🗑"})]})]},r.id)),Q.length===0&&e.jsx("div",{className:"query-history__no-results",children:i("terminal:database.noQueriesMatch")})]})]})},_e=({tabs:a,activeTabId:p,onTabClick:l,onTabClose:i})=>{const{t:y}=J(["terminal"]);return e.jsx("div",{className:"database-tabs",children:a.map(x=>e.jsxs("div",{className:`database-tabs__tab ${p===x.id?"database-tabs__tab--active":""}`,children:[e.jsxs("button",{className:"database-tabs__tab-label",onClick:()=>l(x),title:`${x.connectionName} / ${x.database}`,children:[x.database,e.jsx("span",{className:"database-tabs__tab-connection",children:x.connectionName})]}),e.jsx("button",{className:"database-tabs__tab-close",onClick:()=>i(x.id),title:y("terminal:database.closeTab"),"aria-label":`Close ${x.database} tab`,children:"×"})]},x.id))})},I=a=>`db-panel-${a}`;function pe(a){try{const p=localStorage.getItem(I(a));return p?JSON.parse(p):{}}catch{return{}}}function xe(a,p){try{localStorage.setItem(I(a),JSON.stringify(p))}catch{}}const ve=({building:a,onClose:p})=>{var B,Y,W,X;const{t:l}=J(["terminal","common"]),i=Z(a.id),y=le(a.id),x=ce(a.id),$=ie(a.id),N=n.useRef(pe(a.id)),Q=n.useRef(null),P=n.useRef(0),d=((B=a.database)==null?void 0:B.connections)??[],w=(s,c)=>`${s}:${c}`,M=s=>s?(N.current.queries??{})[s]??"":N.current.generalQuery??"",[r,o]=n.useState("results"),[v,S]=n.useState(0),[F,H]=n.useState(!1),[k,U]=n.useState(!1),[R,O]=n.useState(()=>(N.current.openTabs??[]).map(c=>{var m;return{id:`${c.connectionId}:${c.database}`,connectionId:c.connectionId,connectionName:((m=d.find(L=>L.id===c.connectionId))==null?void 0:m.name)??c.connectionId,database:c.database}})),[q,A]=n.useState(N.current.activeTabId??null),[j,G]=n.useState(()=>{const s=N.current.queries??{};return N.current.generalQuery,s}),[f,_]=n.useState(M(q)),D=n.useCallback(s=>{_(c=>{const m=typeof s=="function"?s(c):s;return G(L=>{const E={...L};return q&&(E[q]=m),E}),m})},[q]),h=i.activeConnectionId??N.current.connectionId??((Y=a.database)==null?void 0:Y.activeConnectionId)??((W=d[0])==null?void 0:W.id),C=i.activeDatabase??N.current.database??((X=a.database)==null?void 0:X.activeDatabase),K=d.find(s=>s.id===h),t=n.useCallback((s,c)=>{var E;const m=w(s,c),L=((E=d.find(z=>z.id===s))==null?void 0:E.name)??s;O(z=>{if(z.some(ne=>ne.id===m))return z;const te={id:m,connectionId:s,connectionName:L,database:c};return[...z,te]}),A(m),_(j[m]??""),b.setActiveConnection(a.id,s),b.setActiveDatabase(a.id,c)},[a.id,d,j]),u=n.useCallback(s=>{O(c=>c.filter(m=>m.id!==s)),q===s&&O(c=>{if(c.length>0){const m=c[0];A(m.id),_(j[m.id]??""),b.setActiveConnection(a.id,m.connectionId),b.setActiveDatabase(a.id,m.database)}else A(null),_("");return c})},[q,a.id,j]),g=n.useCallback(s=>{A(s.id),_(j[s.id]??""),b.setActiveConnection(a.id,s.connectionId),b.setActiveDatabase(a.id,s.database)},[a.id,j]);n.useEffect(()=>{if(!k&&d.length>0){const s=N.current;s.connectionId&&d.some(c=>c.id===s.connectionId)&&(b.setActiveConnection(a.id,s.connectionId),b.listDatabases(a.id,s.connectionId),s.database&&(b.setActiveDatabase(a.id,s.database),b.listTables(a.id,s.connectionId,s.database))),U(!0)}},[a.id,d,k]),n.useEffect(()=>{b.requestQueryHistory(a.id)},[a.id]),n.useEffect(()=>{const s=c=>{c.key==="Escape"&&(c.preventDefault(),c.stopPropagation(),p())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[p]),n.useEffect(()=>{k&&h&&xe(a.id,{connectionId:h,database:C,lastQuery:f,queries:j,generalQuery:"",openTabs:R.map(s=>({connectionId:s.connectionId,database:s.database})),activeTabId:q??void 0})},[a.id,h,C,f,k,R,q,j]);const T=n.useCallback(s=>{var c;if(!(!h||!C||!f.trim()||$))if(s==="cursor"){const m=(c=Q.current)==null?void 0:c.querySelector(".query-editor__textarea"),L=(m==null?void 0:m.selectionStart)??P.current,E=de(f,L);E&&b.executeQuery(a.id,h,C,E)}else{const m=oe(f);m.length<=1?b.executeQuery(a.id,h,C,f.trim()):m.forEach((L,E)=>{setTimeout(()=>{b.executeQuery(a.id,h,C,L.sql)},E*150)})}},[a.id,h,C,f,$]),ee=n.useCallback(s=>{D(s),o("results")},[]),ae=n.useCallback(s=>{b.setActiveConnection(a.id,s),b.listDatabases(a.id,s)},[a.id]),se=n.useCallback(s=>{h&&(t(h,s),b.listTables(a.id,h,s))},[a.id,h,t]),V=y[v];return d.length===0?e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:"🗄️"}),e.jsx("span",{className:"database-panel__name",children:a.name})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsx("div",{className:"database-panel__body",children:e.jsxs("div",{className:"database-panel__no-connections",children:[e.jsx("div",{className:"database-panel__no-connections-icon",children:"🔌"}),e.jsx("h3",{children:l("terminal:database.noConnections")}),e.jsx("p",{children:l("terminal:database.noConnectionsDesc")}),e.jsx("p",{children:l("terminal:database.toGetStarted")}),e.jsxs("ol",{children:[e.jsx("li",{children:l("terminal:database.step1Close")}),e.jsx("li",{children:l("terminal:database.step2Settings")}),e.jsx("li",{children:l("terminal:database.step3AddConnection")}),e.jsx("li",{children:l("terminal:database.step4Reopen")})]})]})})]}):e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:(K==null?void 0:K.engine)==="mysql"?"🐬":"🐘"}),e.jsx("span",{className:"database-panel__name",children:a.name}),K&&e.jsxs("span",{className:"database-panel__connection-info",children:[K.name," / ",C||l("terminal:database.noDatabaseSelected")]})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsxs("div",{className:"database-panel__body",children:[e.jsx(me,{building:a,connections:d,activeConnectionId:h,activeDatabase:C,collapsed:F,onToggleCollapse:()=>H(!F),onConnectionChange:ae,onDatabaseChange:se,onInsertTable:s=>D(c=>c+` ${s}`),onSelectTableQuery:s=>{const c=`SELECT * FROM ${s}`;D(c),h&&C&&b.executeQuery(a.id,h,C,c)}}),e.jsxs("div",{className:"database-panel__main",children:[R.length>0&&e.jsx(_e,{tabs:R,activeTabId:q,onTabClick:g,onTabClose:u}),e.jsx(ue,{query:f,onChange:D,onExecute:T,isExecuting:$,disabled:!h||!C}),e.jsxs("div",{className:"database-panel__tabs",children:[e.jsxs("button",{className:`database-panel__tab ${r==="results"?"database-panel__tab--active":""}`,onClick:()=>o("results"),children:[l("terminal:database.results"),y.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:y.length})]}),e.jsxs("button",{className:`database-panel__tab ${r==="history"?"database-panel__tab--active":""}`,onClick:()=>o("history"),children:[l("terminal:database.history"),x.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:x.length})]}),r==="results"&&y.length>1&&e.jsxs("div",{className:"database-panel__result-nav",children:[e.jsxs("button",{disabled:v>=y.length-1,onClick:()=>S(s=>s+1),children:["← ",l("terminal:database.older")]}),e.jsxs("span",{children:[v+1," / ",y.length]}),e.jsxs("button",{disabled:v<=0,onClick:()=>S(s=>s-1),children:[l("terminal:database.newer")," →"]})]})]}),e.jsx("div",{className:"database-panel__tab-content",children:r==="results"?V?e.jsx(be,{result:V,buildingId:a.id,building:a}):e.jsxs("div",{className:"database-panel__empty",children:[e.jsx("p",{children:l("terminal:database.noResultsYet")}),e.jsx("p",{children:l("terminal:database.selectDbAndRun")})]}):e.jsx(he,{buildingId:a.id,history:x,onLoadQuery:ee})})]})]})]})};export{ve as DatabasePanel,me as DatabaseSidebar,_e as DatabaseTabs,ue as QueryEditor,he as QueryHistoryPanel,be as ResultsTable};
@@ -1,4 +1,4 @@
1
- import{as as _e,r as t,s as I,w as Ee,at as De,V as Be,j as e,u as pe,au as Ue,av as Ke,aw as $e,ax as We,ay as Ve,k as ze,az as Ge,aA as Pe,aB as qe,aC as Ye,aD as Je,aE as Xe,a3 as Qe,P as Me,S as ce,Y as Ze,U as et,A as tt,a1 as Ie,H as st,J as nt,aF as at,m as Q,aG as ot}from"./main-BSyGZK2z.js";import{F as ct}from"./index-BKRKKMPQ.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,`
1
+ import{as as _e,r as t,s as I,w as Ee,at as De,V as Be,j as e,u as pe,au as Ue,av as Ke,aw as $e,ax as We,ay as Ve,k as ze,az as Ge,aA as Pe,aB as qe,aC as Ye,aD as Je,aE as Xe,a3 as Qe,P as Me,S as ce,Y as Ze,U as et,A as tt,a1 as Ie,H as st,J as nt,aF as at,m as Q,aG as ot}from"./main-BL6u5aPD.js";import{F as ct}from"./index-CvetF6vL.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
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,R=Array.from(a.values());for(const m of R)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 y=t.useRef(a),S=t.useRef(f);y.current=a,S.current=f;const b=t.useCallback(async x=>{const w=y.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(R){console.error(`Failed to load more history for agent ${x}:`,R)}},[]),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:y,onRemoveFile:S,uploadFile:b,onAddPastedText:D,placeholder:x="Message...",className:w="",compact:v=!1,inputRef:i}){const R=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&&y(T)}return}const L=c.clipboardData.files;if(L.length>0){c.preventDefault();for(const B of L){const F=await b(B);F&&y(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,y,D]),p=t.useCallback(async c=>{const _=c.target.files;if(_){for(const L of _){const J=await b(L);J&&y(J)}R.current&&(R.current.value="")}},[b,y]),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:R,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=R.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:y,onLoadMore:S,onClearHistory:b}){const{t:D}=pe(["terminal","common"]),x=Ue(),w=Ke(s.id),v=t.useRef(null),[i,R]=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&&(R(!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&&R(!1)},[a,i]);const te=t.useCallback(()=>{C.current=!0,p(!1)},[]),Z=t.useRef(f),z=t.useRef(h);t.useEffect(()=>{(f&&!Z.current||h&&!z.current)&&(C.current=!1,p(!0),E(!0)),Z.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
 
@@ -1,4 +1,4 @@
1
- import{al as sa,u as E,j as e,X as v,ao as Fs,ap as $s,Y as He,s as P,aq as Ms,D as V,a7 as ee,a8 as Ge,f as aa,ar as ta,r as o,P as na,S as la,h as ia,a9 as Ke}from"./main-BSyGZK2z.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const ra=[{value:"",labelKey:"terminal:building.colorDefault"},{value:"#2a2a3a",labelKey:"terminal:building.colorDarkGray"},{value:"#3a2a2a",labelKey:"terminal:building.colorDarkRed"},{value:"#2a3a2a",labelKey:"terminal:building.colorDarkGreen"},{value:"#2a2a4a",labelKey:"terminal:building.colorDarkBlue"},{value:"#3a3a2a",labelKey:"terminal:building.colorDarkYellow"},{value:"#3a2a3a",labelKey:"terminal:building.colorDarkPurple"},{value:"#2a3a3a",labelKey:"terminal:building.colorDarkCyan"},{value:"#4a3a3a",labelKey:"terminal:building.colorWarmBrown"},{value:"#3a4a4a",labelKey:"terminal:building.colorCoolSteel"}];function oa(a){return sa.t(a)}function qe(a){if(a===0)return"0 B";const l=1024,c=["B","KB","MB","GB"],h=Math.floor(Math.log(a)/Math.log(l));return parseFloat((a/Math.pow(l,h)).toFixed(1))+" "+c[h]}function ca(a){const c=Date.now()-a,h=Math.floor(c/(1e3*60*60)),t=Math.floor(c%(1e3*60*60)/(1e3*60));return h>0?`${h}h ${t}m`:`${t}m`}const Us={30:"#1a1a1a",31:"#e74c3c",32:"#2ecc71",33:"#f39c12",34:"#3498db",35:"#9b59b6",36:"#00bcd4",37:"#ecf0f1",90:"#7f8c8d",91:"#ff6b6b",92:"#4ade80",93:"#fbbf24",94:"#60a5fa",95:"#c084fc",96:"#22d3ee",97:"#ffffff"};function Ks(a){const l=[],c=/\x1B\[([0-9;]*)m/g;let h=0,t=null,r;for(;(r=c.exec(a))!==null;){if(r.index>h){const m=a.slice(h,r.index);t?l.push(e.jsx("span",{style:{color:t},children:m},l.length)):l.push(m)}const g=r[1].split(";").map(Number);for(const m of g)m===0||m===39?t=null:Us[m]&&(t=Us[m]);h=c.lastIndex}if(h<a.length){const g=a.slice(h);t?l.push(e.jsx("span",{style:{color:t},children:g},l.length)):l.push(g)}return l.length>0?l:[a]}function ma({buildingName:a,onClose:l,onConfirm:c}){const{t:h}=E(["terminal","common"]);return e.jsx("div",{className:"modal-overlay visible",onClick:l,children:e.jsxs("div",{className:"modal confirm-modal",onClick:t=>t.stopPropagation(),children:[e.jsx("div",{className:"modal-header",children:h("terminal:building.deleteBuilding")}),e.jsxs("div",{className:"modal-body confirm-modal-body",children:[e.jsx("p",{children:h("terminal:building.deleteConfirm",{name:a})}),e.jsx("p",{className:"confirm-modal-note",children:h("terminal:building.deleteNote")})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{className:"btn btn-secondary",onClick:l,children:h("common:buttons.cancel")}),e.jsx("button",{className:"btn btn-danger",onClick:c,autoFocus:!0,children:h("common:buttons.delete")})]})]})})}function da({usePM2:a,setUsePM2:l}){const{t:c}=E(["terminal"]);return e.jsxs("div",{className:"form-section pm2-toggle-section",children:[e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",className:"toggle-input",checked:a,onChange:h=>l(h.target.checked)}),e.jsx("span",{className:"toggle-track",children:e.jsx("span",{className:"toggle-thumb"})}),e.jsxs("span",{className:"toggle-label",children:[e.jsx("span",{className:"pm2-badge",children:"PM2"}),c("terminal:building.usePM2")]})]}),e.jsx("div",{className:"form-hint",children:c("terminal:building.pm2Hint")})]})}function ua({usePM2:a,pm2Script:l,setPm2Script:c,pm2Args:h,setPm2Args:t,pm2Interpreter:r,setPm2Interpreter:g,pm2InterpreterArgs:m,setPm2InterpreterArgs:d,pm2Env:s,setPm2Env:u,isEditMode:b,building:x,handleCommand:N}){var y;const{t:p}=E(["terminal","common"]);return a?e.jsxs("div",{className:"form-section pm2-config-section",children:[e.jsx("label",{className:"form-label",children:p("terminal:building.pm2Configuration")}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Script"),e.jsx(v,{text:p("terminal:building.helpPm2Script"),title:p("terminal:building.pm2Script"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:l,onChange:j=>c(j.target.value),placeholder:"npm, java, python, ./app.js",required:a})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Arguments"),e.jsx(v,{text:p("terminal:building.helpPm2Arguments"),title:p("terminal:building.pm2Arguments"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:h,onChange:j=>t(j.target.value),placeholder:"run dev, -jar app.jar, app.py"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Interpreter"),e.jsx(v,{text:p("terminal:building.helpPm2Interpreter"),title:p("terminal:building.pm2Interpreter"),position:"top",size:"sm"})]}),e.jsx("select",{className:"form-input form-select",value:r,onChange:j=>g(j.target.value),children:Object.keys(Fs).map(j=>e.jsx("option",{value:j,children:Fs[j].label},j))})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2InterpArgs"),e.jsx(v,{text:p("terminal:building.helpPm2InterpArgs"),title:p("terminal:building.pm2InterpArgs"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:m,onChange:j=>d(j.target.value),placeholder:"-jar (for Java)"})]}),e.jsxs("div",{className:"command-row env-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Environment"),e.jsx(v,{text:p("terminal:building.helpPm2Environment"),title:p("terminal:building.pm2Environment"),position:"top",size:"sm"})]}),e.jsx("textarea",{className:"form-input form-textarea",value:s,onChange:j=>u(j.target.value),placeholder:`KEY=value
1
+ import{al as sa,u as E,j as e,X as v,ao as Fs,ap as $s,Y as He,s as P,aq as Ms,D as V,a7 as ee,a8 as Ge,f as aa,ar as ta,r as o,P as na,S as la,h as ia,a9 as Ke}from"./main-BL6u5aPD.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const ra=[{value:"",labelKey:"terminal:building.colorDefault"},{value:"#2a2a3a",labelKey:"terminal:building.colorDarkGray"},{value:"#3a2a2a",labelKey:"terminal:building.colorDarkRed"},{value:"#2a3a2a",labelKey:"terminal:building.colorDarkGreen"},{value:"#2a2a4a",labelKey:"terminal:building.colorDarkBlue"},{value:"#3a3a2a",labelKey:"terminal:building.colorDarkYellow"},{value:"#3a2a3a",labelKey:"terminal:building.colorDarkPurple"},{value:"#2a3a3a",labelKey:"terminal:building.colorDarkCyan"},{value:"#4a3a3a",labelKey:"terminal:building.colorWarmBrown"},{value:"#3a4a4a",labelKey:"terminal:building.colorCoolSteel"}];function oa(a){return sa.t(a)}function qe(a){if(a===0)return"0 B";const l=1024,c=["B","KB","MB","GB"],h=Math.floor(Math.log(a)/Math.log(l));return parseFloat((a/Math.pow(l,h)).toFixed(1))+" "+c[h]}function ca(a){const c=Date.now()-a,h=Math.floor(c/(1e3*60*60)),t=Math.floor(c%(1e3*60*60)/(1e3*60));return h>0?`${h}h ${t}m`:`${t}m`}const Us={30:"#1a1a1a",31:"#e74c3c",32:"#2ecc71",33:"#f39c12",34:"#3498db",35:"#9b59b6",36:"#00bcd4",37:"#ecf0f1",90:"#7f8c8d",91:"#ff6b6b",92:"#4ade80",93:"#fbbf24",94:"#60a5fa",95:"#c084fc",96:"#22d3ee",97:"#ffffff"};function Ks(a){const l=[],c=/\x1B\[([0-9;]*)m/g;let h=0,t=null,r;for(;(r=c.exec(a))!==null;){if(r.index>h){const m=a.slice(h,r.index);t?l.push(e.jsx("span",{style:{color:t},children:m},l.length)):l.push(m)}const g=r[1].split(";").map(Number);for(const m of g)m===0||m===39?t=null:Us[m]&&(t=Us[m]);h=c.lastIndex}if(h<a.length){const g=a.slice(h);t?l.push(e.jsx("span",{style:{color:t},children:g},l.length)):l.push(g)}return l.length>0?l:[a]}function ma({buildingName:a,onClose:l,onConfirm:c}){const{t:h}=E(["terminal","common"]);return e.jsx("div",{className:"modal-overlay visible",onClick:l,children:e.jsxs("div",{className:"modal confirm-modal",onClick:t=>t.stopPropagation(),children:[e.jsx("div",{className:"modal-header",children:h("terminal:building.deleteBuilding")}),e.jsxs("div",{className:"modal-body confirm-modal-body",children:[e.jsx("p",{children:h("terminal:building.deleteConfirm",{name:a})}),e.jsx("p",{className:"confirm-modal-note",children:h("terminal:building.deleteNote")})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{className:"btn btn-secondary",onClick:l,children:h("common:buttons.cancel")}),e.jsx("button",{className:"btn btn-danger",onClick:c,autoFocus:!0,children:h("common:buttons.delete")})]})]})})}function da({usePM2:a,setUsePM2:l}){const{t:c}=E(["terminal"]);return e.jsxs("div",{className:"form-section pm2-toggle-section",children:[e.jsxs("label",{className:"toggle-switch",children:[e.jsx("input",{type:"checkbox",className:"toggle-input",checked:a,onChange:h=>l(h.target.checked)}),e.jsx("span",{className:"toggle-track",children:e.jsx("span",{className:"toggle-thumb"})}),e.jsxs("span",{className:"toggle-label",children:[e.jsx("span",{className:"pm2-badge",children:"PM2"}),c("terminal:building.usePM2")]})]}),e.jsx("div",{className:"form-hint",children:c("terminal:building.pm2Hint")})]})}function ua({usePM2:a,pm2Script:l,setPm2Script:c,pm2Args:h,setPm2Args:t,pm2Interpreter:r,setPm2Interpreter:g,pm2InterpreterArgs:m,setPm2InterpreterArgs:d,pm2Env:s,setPm2Env:u,isEditMode:b,building:x,handleCommand:N}){var y;const{t:p}=E(["terminal","common"]);return a?e.jsxs("div",{className:"form-section pm2-config-section",children:[e.jsx("label",{className:"form-label",children:p("terminal:building.pm2Configuration")}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Script"),e.jsx(v,{text:p("terminal:building.helpPm2Script"),title:p("terminal:building.pm2Script"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:l,onChange:j=>c(j.target.value),placeholder:"npm, java, python, ./app.js",required:a})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Arguments"),e.jsx(v,{text:p("terminal:building.helpPm2Arguments"),title:p("terminal:building.pm2Arguments"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:h,onChange:j=>t(j.target.value),placeholder:"run dev, -jar app.jar, app.py"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Interpreter"),e.jsx(v,{text:p("terminal:building.helpPm2Interpreter"),title:p("terminal:building.pm2Interpreter"),position:"top",size:"sm"})]}),e.jsx("select",{className:"form-input form-select",value:r,onChange:j=>g(j.target.value),children:Object.keys(Fs).map(j=>e.jsx("option",{value:j,children:Fs[j].label},j))})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2InterpArgs"),e.jsx(v,{text:p("terminal:building.helpPm2InterpArgs"),title:p("terminal:building.pm2InterpArgs"),position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:m,onChange:j=>d(j.target.value),placeholder:"-jar (for Java)"})]}),e.jsxs("div",{className:"command-row env-row",children:[e.jsxs("span",{className:"command-label",children:[p("terminal:building.pm2Environment"),e.jsx(v,{text:p("terminal:building.helpPm2Environment"),title:p("terminal:building.pm2Environment"),position:"top",size:"sm"})]}),e.jsx("textarea",{className:"form-input form-textarea",value:s,onChange:j=>u(j.target.value),placeholder:`KEY=value
2
2
  SERVER_PORT=7201
3
3
  NODE_ENV=production`,rows:3})]}),e.jsx("div",{className:"pm2-examples",children:e.jsxs("details",{children:[e.jsx("summary",{children:p("terminal:building.pm2Examples")}),e.jsxs("div",{className:"pm2-examples-content",children:[e.jsxs("div",{className:"pm2-example",children:[e.jsx("strong",{children:"Node.js:"})," Script: ",e.jsx("code",{children:"npm"}),", Args: ",e.jsx("code",{children:"run dev"})]}),e.jsxs("div",{className:"pm2-example",children:[e.jsx("strong",{children:"Symfony:"})," Script: ",e.jsx("code",{children:"symfony"}),", Args: ",e.jsx("code",{children:"serve --no-daemon"}),", Interpreter: ",e.jsx("code",{children:"None"})]}),e.jsxs("div",{className:"pm2-example",children:[e.jsx("strong",{children:"Java JAR:"})," Script: ",e.jsx("code",{children:"app.jar"}),", Interpreter: ",e.jsx("code",{children:"Java"}),", Interp. Args: ",e.jsx("code",{children:"-jar"})]}),e.jsxs("div",{className:"pm2-example",children:[e.jsx("strong",{children:"Python:"})," Script: ",e.jsx("code",{children:"app.py"}),", Interpreter: ",e.jsx("code",{children:"Python 3"})]})]})]})}),b&&(x==null?void 0:x.pm2Status)&&e.jsx("div",{className:"pm2-status-display",children:e.jsxs("div",{className:"pm2-status-row",children:[e.jsxs("span",{className:"pm2-metric",children:[e.jsx("span",{className:"pm2-metric-label",children:"PID"}),e.jsx("span",{className:"pm2-metric-value",children:x.pm2Status.pid||"-"})]}),e.jsxs("span",{className:"pm2-metric",children:[e.jsx("span",{className:"pm2-metric-label",children:"CPU"}),e.jsxs("span",{className:"pm2-metric-value",children:[((y=x.pm2Status.cpu)==null?void 0:y.toFixed(1))||"0","%"]})]}),e.jsxs("span",{className:"pm2-metric",children:[e.jsx("span",{className:"pm2-metric-label",children:"MEM"}),e.jsx("span",{className:"pm2-metric-value",children:qe(x.pm2Status.memory||0)})]}),e.jsxs("span",{className:"pm2-metric",children:[e.jsx("span",{className:"pm2-metric-label",children:"Restarts"}),e.jsx("span",{className:"pm2-metric-value",children:x.pm2Status.restarts||0})]}),x.pm2Status.uptime&&e.jsxs("span",{className:"pm2-metric",children:[e.jsx("span",{className:"pm2-metric-label",children:"Uptime"}),e.jsx("span",{className:"pm2-metric-value",children:ca(x.pm2Status.uptime)})]})]})}),b&&e.jsxs("div",{className:"pm2-actions",children:[e.jsx("button",{type:"button",className:"btn btn-sm btn-success",onClick:()=>N("start"),children:p("common:buttons.start")}),e.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>N("stop"),children:p("common:buttons.stop")}),e.jsx("button",{type:"button",className:"btn btn-sm btn-warning",onClick:()=>N("restart"),children:p("terminal:buildingAction.restart")}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>N("logs"),children:p("terminal:logs.title")})]})]}):null}function pa({dockerMode:a,setDockerMode:l,dockerImage:c,setDockerImage:h,dockerContainerName:t,setDockerContainerName:r,dockerCommand:g,setDockerCommand:m,dockerPorts:d,setDockerPorts:s,dockerVolumes:u,setDockerVolumes:b,dockerNetwork:x,setDockerNetwork:N,dockerRestart:p,setDockerRestart:y,dockerPull:j,setDockerPull:F,dockerEnv:$,setDockerEnv:z,dockerComposePath:Y,setDockerComposePath:M,dockerComposeProject:J,setDockerComposeProject:U,dockerComposeServices:W,setDockerComposeServices:K,selectedExistingContainer:R,setSelectedExistingContainer:H,dockerContainersList:O,isEditMode:T,building:k,handleCommand:L}){const{t:A}=E(["config","common"]);return e.jsxs("div",{className:"form-section docker-config-section",children:[e.jsx("label",{className:"form-label",children:A("config:buildings.dockerConfig")}),e.jsxs("div",{className:"docker-mode-selector",children:[e.jsxs("label",{className:`docker-mode-option ${a==="container"?"active":""}`,children:[e.jsx("input",{type:"radio",name:"dockerMode",value:"container",checked:a==="container",onChange:()=>l("container")}),e.jsx("span",{className:"docker-mode-icon",children:"📦"}),e.jsx("span",{className:"docker-mode-label",children:"Container"}),e.jsx("span",{className:"docker-mode-desc",children:"Create a new container"})]}),e.jsxs("label",{className:`docker-mode-option ${a==="compose"?"active":""}`,children:[e.jsx("input",{type:"radio",name:"dockerMode",value:"compose",checked:a==="compose",onChange:()=>l("compose")}),e.jsx("span",{className:"docker-mode-icon",children:"🛠"}),e.jsx("span",{className:"docker-mode-label",children:"Compose"}),e.jsx("span",{className:"docker-mode-desc",children:"Manage multiple services"})]}),e.jsxs("label",{className:`docker-mode-option ${a==="existing"?"active":""}`,children:[e.jsx("input",{type:"radio",name:"dockerMode",value:"existing",checked:a==="existing",onChange:()=>l("existing")}),e.jsx("span",{className:"docker-mode-icon",children:"🔎"}),e.jsx("span",{className:"docker-mode-label",children:"Existing"}),e.jsx("span",{className:"docker-mode-desc",children:"Adopt existing container"})]})]}),a==="container"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Image:",e.jsx(v,{text:"Docker image to run, e.g., nginx:latest, redis:alpine, my-app:v1",title:"Image",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:c,onChange:n=>h(n.target.value),placeholder:"nginx:latest",required:!0})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Container Name:",e.jsx(v,{text:"Custom name for the container. If empty, auto-generated based on building name.",title:"Container Name",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:t,onChange:n=>r(n.target.value),placeholder:"Auto-generated (tc-{name}-{id})"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Command:",e.jsx(v,{text:"Override the default container command. Leave empty to use image's CMD.",title:"Command Override",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:g,onChange:n=>m(n.target.value),placeholder:"Optional command override"})]}),e.jsxs("div",{className:"form-section docker-ports-section",children:[e.jsxs("label",{className:"form-label",children:["Port Mappings",e.jsx("button",{type:"button",className:"btn btn-sm btn-add",onClick:()=>s([...d,""]),children:"+ Add"})]}),d.map((n,C)=>e.jsxs("div",{className:"docker-mapping-row",children:[e.jsx("input",{type:"text",className:"form-input",value:n,onChange:B=>{const D=[...d];D[C]=B.target.value,s(D)},placeholder:"8080:80 or 3000"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>s(d.filter((B,D)=>D!==C)),children:"x"})]},C)),d.length===0&&e.jsx("div",{className:"form-hint",children:"Format: host:container (e.g., 8080:80) or same port (e.g., 3000)"})]}),e.jsxs("div",{className:"form-section docker-volumes-section",children:[e.jsxs("label",{className:"form-label",children:["Volume Mounts",e.jsx("button",{type:"button",className:"btn btn-sm btn-add",onClick:()=>b([...u,""]),children:"+ Add"})]}),u.map((n,C)=>e.jsxs("div",{className:"docker-mapping-row",children:[e.jsx("input",{type:"text",className:"form-input",value:n,onChange:B=>{const D=[...u];D[C]=B.target.value,b(D)},placeholder:"./data:/app/data or /host/path:/container/path"}),e.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>b(u.filter((B,D)=>D!==C)),children:"x"})]},C)),u.length===0&&e.jsx("div",{className:"form-hint",children:"Format: host_path:container_path (relative paths resolved from working directory)"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Network:",e.jsx(v,{text:"Docker network to connect to. Leave empty for default bridge network.",title:"Network",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:x,onChange:n=>N(n.target.value),placeholder:"bridge (default)"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Restart Policy:",e.jsx(v,{text:"When should Docker restart the container automatically?",title:"Restart Policy",position:"top",size:"sm"})]}),e.jsx("select",{className:"form-input form-select",value:p,onChange:n=>y(n.target.value),children:Object.keys($s).map(n=>e.jsx("option",{value:n,children:$s[n].label},n))})]})]}),a==="compose"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Compose File:",e.jsx(v,{text:"Path to docker-compose.yml file, relative to working directory.",title:"Compose File",position:"top",size:"sm"})]}),e.jsx(He,{value:Y,onChange:M,placeholder:"docker-compose.yml",className:"form-input",directoriesOnly:!1})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Project Name:",e.jsx(v,{text:"Override the compose project name. Leave empty for auto-generated name.",title:"Project Name",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:J,onChange:n=>U(n.target.value),placeholder:"Auto-generated"})]}),e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Services:",e.jsx(v,{text:"Specific services to manage (comma-separated). Leave empty for all services.",title:"Services",position:"top",size:"sm"})]}),e.jsx("input",{type:"text",className:"form-input",value:W,onChange:n=>K(n.target.value),placeholder:"All services (or: api, db, redis)"})]})]}),a==="existing"&&e.jsxs("div",{className:"docker-existing-section",children:[e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Select Container:",e.jsx(v,{text:"Choose an existing Docker container to monitor and control. The container will not be deleted when removing the building.",title:"Existing Container",position:"top",size:"sm"})]}),e.jsxs("div",{className:"docker-existing-select-wrapper",children:[e.jsxs("select",{className:"form-input form-select",value:R,onChange:n=>H(n.target.value),required:a==="existing",children:[e.jsx("option",{value:"",children:"Select a container..."}),O.map(n=>e.jsxs("option",{value:n.name,children:[n.name," (",n.image,") - ",n.state]},n.id))]}),e.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>P.requestDockerContainersList(),title:"Refresh container list",children:"↻"})]})]}),O.length===0&&e.jsx("div",{className:"form-hint docker-existing-hint",children:"No containers found. Make sure Docker is running and you have containers available."}),R&&e.jsx("div",{className:"docker-existing-info",children:(()=>{const n=O.find(C=>C.name===R);return n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"docker-existing-info-row",children:[e.jsx("span",{className:"docker-existing-info-label",children:"Image:"}),e.jsx("span",{className:"docker-existing-info-value",children:n.image})]}),e.jsxs("div",{className:"docker-existing-info-row",children:[e.jsx("span",{className:"docker-existing-info-label",children:"Status:"}),e.jsx("span",{className:`docker-existing-info-value docker-status-${n.status}`,children:n.state})]}),e.jsxs("div",{className:"docker-existing-info-row",children:[e.jsx("span",{className:"docker-existing-info-label",children:"ID:"}),e.jsx("span",{className:"docker-existing-info-value",children:n.id.slice(0,12)})]}),n.ports.length>0&&e.jsxs("div",{className:"docker-existing-info-row",children:[e.jsx("span",{className:"docker-existing-info-label",children:"Ports:"}),e.jsx("span",{className:"docker-existing-info-value",children:n.ports.map(C=>`${C.host}:${C.container}/${C.protocol}`).join(", ")})]})]}):null})()}),e.jsx("div",{className:"form-hint",children:"Note: Existing containers will not be deleted when you remove this building."})]}),a!=="existing"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"command-row",children:[e.jsxs("span",{className:"command-label",children:["Pull Policy:",e.jsx(v,{text:"When to pull images: always, only if missing, or never.",title:"Pull Policy",position:"top",size:"sm"})]}),e.jsx("select",{className:"form-input form-select",value:j,onChange:n=>F(n.target.value),children:Object.keys(Ms).map(n=>e.jsx("option",{value:n,children:Ms[n].label},n))})]}),e.jsxs("div",{className:"command-row env-row",children:[e.jsxs("span",{className:"command-label",children:["Environment:",e.jsx(v,{text:"Environment variables in KEY=value format, one per line.",title:"Environment Variables",position:"top",size:"sm"})]}),e.jsx("textarea",{className:"form-input form-textarea",value:$,onChange:n=>z(n.target.value),placeholder:`KEY=value
4
4
  DATABASE_URL=postgres://...
@@ -1 +1 @@
1
- import{z as ts,u as ns,B as _s,j as e,C as Is,E as Ms,G as Es,r as g,H as $s,I as Ds,J as Ss,K as Ls,s as Y,m as B}from"./main-BSyGZK2z.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const Xs=1,gs=Xs*2.5;function Rs(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,N=(s.height||10)/2;t=s.center.x-o,i=s.center.x+o,n=s.center.z-N,u=s.center.z+N}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 b=2;if(t+=b,i-=b,n+=b,u-=b,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 x=(t+i)/2,S=(n+u)/2,j=Math.min(i-x,u-S);for(let o=0;o<j;o+=gs*.5)for(let N=0;N<Math.PI*2;N+=Math.PI/8){const C=x+Math.cos(N)*o,E=S+Math.sin(N)*o,_={x:C,z:E};if(_.x=Math.max(t,Math.min(i,_.x)),_.z=Math.max(n,Math.min(u,_.z)),fs(_,l,s))return _}return{x,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 Ps(s){switch(s){case"scout":return"🔍";case"builder":return"🔨";case"debugger":return"🐛";case"architect":return"📐";case"warrior":return"⚔️";case"support":return"🛟";case"boss":return"👑";default:return"🤖"}}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 b=s.get(u);b&&(n.push(b),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,N)=>(N.lastActivity||0)-(o.lastActivity||0)),t=[],i=[],n=[],u=[],b=300*1e3,x=3600*1e3,S=1440*60*1e3;for(const o of l){const N=v-(o.lastActivity||0);N<b?t.push(o):N<x?i.push(o):N<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 b=!!l.taskLabel,x=!!t.taskLabel;return b!==x?b?-1:1:(t.lastActivity||0)-(l.lastActivity||0)}return l.name.localeCompare(t.name)})}const bs=ts.memo(({agent:s,isSelected:v,isKeyboardFocused:d=!1,onSelect:l,onDoubleClick:t,onChat:i,onFocus:n,onKill:u,onDragStart:b})=>{const{t:x}=ns(["dashboard","common"]),j=_s().has(s.id),o=vs(s.status),N=Ps(s.class),C=Zs(s),E=Bs(C),_=s.taskLabel?`📋 ${s.taskLabel}`:s.currentTask||s.lastAssignedTask,X=s.status==="idle"&&s.lastActivity>0,[,F]=ts.useState(0);return ts.useEffect(()=>{if(!X)return;const z=window.setInterval(()=>F(I=>I+1),15e3);return()=>window.clearInterval(z)},[X]),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:z=>{z.stopPropagation(),t()},onDragStart:z=>{b==null||b(s),z.dataTransfer.effectAllowed="move"},draggable:!0,title:x("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:[N," ",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--${E}`,style:{width:`${C}%`}})}),e.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${E}`,children:[C,"%"]})]})]}),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]}),X&&e.jsxs("span",{className:"dash-card__idle-time",style:{color:Es(s.lastActivity)},title:Ms(s.lastActivity),children:["⏱ ",Is(s.lastActivity)]})]}),_&&e.jsx("div",{className:"dash-card__row4",children:e.jsx("span",{className:"dash-card__task",children:_})}),e.jsxs("div",{className:"dash-card__actions",children:[i&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:z=>{z.stopPropagation(),i()},title:x("cards.openTerminal"),children:x("cards.chat")}),u&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:z=>{z.stopPropagation(),u()},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});bs.displayName="AgentCard";const ps=({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)})})]})};ps.displayName="BuildingPills";function Ks({onSelectAgent:s,onFocusAgent:v,onKillAgent:d,onSelectBuilding:l,onOpenTerminal:t,onFocusZone:i}){const{t:n}=ns(["dashboard","common"]),u=$s(),b=Ds(),x=Ss(),S=Ls(),j=_s(),[o,N]=g.useState(""),[C,E]=g.useState("all"),[_,X]=g.useState("zone"),[F,z]=g.useState(new Set),[I,J]=g.useState(null),[ws,V]=g.useState(null),[G,Q]=g.useState(!1),[M,T]=g.useState(null),W=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,x):_==="status"?Gs(u,j):Hs(u),[u,x,_,j]),K=g.useMemo(()=>{const a=o.toLowerCase().trim(),h=rs.map(p=>({...p,agents:p.agents.filter(k=>{if(C==="working"){if(k.status!=="working"&&k.status!=="waiting"&&k.status!=="waiting_permission")return!1}else if(C==="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(p=>p.agents.length>0)},[rs,C,o,_]),O=g.useCallback(a=>a.area?`area:${a.area.id}`:`${_}:${a.label}`,[_]),$=g.useMemo(()=>{const a=[];return K.forEach(h=>{const p=O(h);if(F.has(p))return;const k=_==="status"?as(h.agents,{prioritizeRecentlyIdle:!0}):ms(h.agents);a.push(...k)}),a},[K,F,_,O]),xs=g.useCallback(a=>{z(h=>{const p=new Set(h);return p.has(a)?p.delete(a):p.add(a),p})},[]),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",V(h)},[]),ys=g.useCallback(()=>{V(null)},[]),Cs=g.useCallback(a=>{if(!I)return;if(a===null){const R=Y.getState(),r=Array.from(R.areas.values()).find(c=>c.assignedAgentIds.includes(I.id));r&&Y.unassignAgentFromArea(I.id,r.id),J(null),V(null);return}const h=x.get(a);if(!h)return;const p=Array.from(u.values()),k=Rs(h,p,I.position);Y.updateAgent({...I,position:{...I.position,x:k.x,z:k.z}}),Y.assignAgentToArea(I.id,a),J(null),V(null)},[I,x,u]);return g.useEffect(()=>{if($.length===0){Q(!1),T(null);return}G&&(!M||!$.some(a=>a.id===M))&&(T($[0].id),s==null||s($[0].id))},[$,G,M,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,p=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 w=f.dataset.agentId;if(!w)return null;const D=f.getBoundingClientRect();return{id:w,centerX:D.left+D.width/2,centerY:D.top+D.height/2,height:D.height}}).filter(f=>f!==null).sort((f,w)=>f.centerY-w.centerY||f.centerX-w.centerX);if(L.length===0)return r;const ss=L.reduce((f,w)=>f+w.height,0)/L.length,es=Math.max(18,ss*.6),A=[];for(const f of L){const w=A[A.length-1];if(!w){A.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}]);continue}const D=w.reduce((As,zs)=>As+zs.centerY,0)/w.length;Math.abs(f.centerY-D)<=es?w.push({id:f.id,centerX:f.centerX,centerY:f.centerY}):A.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}])}A.forEach(f=>f.sort((w,D)=>w.centerX-D.centerX));const H=A.findIndex(f=>f.some(w=>w.id===r));if(H===-1)return((cs=(os=A[0])==null?void 0:os[0])==null?void 0:cs.id)??r;const P=A[H],y=P.findIndex(f=>f.id===r);if(y===-1)return((ls=(ds=A[0])==null?void 0:ds[0])==null?void 0:ls.id)??r;if(c==="left")return((us=P[Math.max(0,y-1)])==null?void 0:us.id)??r;if(c==="right")return((hs=P[Math.min(P.length-1,y+1)])==null?void 0:hs.id)??r;const q=c==="up"?Math.max(0,H-1):Math.min(A.length-1,H+1),m=A[q],Z=P[y].centerX;let U=m[0],is=Math.abs(U.centerX-Z);for(const f of m){const w=Math.abs(f.centerX-Z);w<is&&(U=f,is=w)}return(U==null?void 0:U.id)??r},R=r=>{const c=Y.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"),A=c.find(m=>m.id==="dashboard-vim-up"),H=c.find(m=>m.id==="dashboard-vim-right"),P=c.find(m=>m.id==="open-terminal"),y=Y.getState();if(a(r.target))if(!y.terminalOpen&&h(r.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(B(r,L)){if($.length===0)return;r.preventDefault(),r.stopPropagation(),Q(!0),T(m=>{const Z=m&&$.some(U=>U.id===m)?m:$[0].id;return s==null||s(Z),window.setTimeout(()=>p(Z),0),Z});return}const q=B(r,ss)||r.key==="ArrowLeft"?"left":B(r,es)||r.key==="ArrowDown"?"down":B(r,A)||r.key==="ArrowUp"?"up":B(r,H)||r.key==="ArrowRight"?"right":null;if(q&&G&&M){r.preventDefault(),r.stopPropagation();const m=k(M,q);m!==M&&(T(m),s==null||s(m),window.setTimeout(()=>p(m),0));return}if(B(r,P)){if(y.terminalOpen)return;if(G&&M&&y.agents.has(M)){r.preventDefault(),t==null||t(M);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",R,!0),()=>document.removeEventListener("keydown",R,!0)},[$,G,M,t,s]),g.useEffect(()=>{const a=document.activeElement;a instanceof HTMLElement&&a.closest(".guake-terminal")&&!Y.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 ${C==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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 ${C==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("working"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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:()=>E("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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 ${C==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("error"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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=>N(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:()=>X("zone"),children:n("grouping.byZone")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>X("status"),children:n("grouping.byStatus")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>X("activity"),children:n("grouping.byActivity")})]}),e.jsxs("div",{className:"dashboard-view__content",children:[K.map(a=>{const h=O(a),p=F.has(h),k=_==="status"?as(a.agents,{prioritizeRecentlyIdle:!0}):ms(a.agents),R=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)&&I?"dashboard-view__zone--drag-over":""}`,onDragOver:c=>js(c,a.area?a.area.id:null),onDragLeave:ys,onDrop:()=>Cs(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 ${p?"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}),R>0&&e.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",R," ",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")})]}),!p&&e.jsx("div",{className:"dashboard-view__zone-grid",children:k.map(c=>e.jsx(bs,{agent:c,isSelected:S.has(c.id),isKeyboardFocused:G&&M===c.id,onSelect:()=>{s==null||s(c.id),Q(!0),T(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)}),K.length===0&&e.jsx("div",{className:"dashboard-view__empty",children:o?n("noAgentsMatching",{search:o}):n("noAgentsSpawned")}),b.size>0&&e.jsx(ps,{buildings:b,onSelectBuilding:l})]})]})}export{Ks as DashboardView};
1
+ import{z as ts,u as ns,B as _s,j as e,C as Is,E as Ms,G as Es,r as g,H as $s,I as Ds,J as Ss,K as Ls,s as Y,m as B}from"./main-BL6u5aPD.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const Xs=1,gs=Xs*2.5;function Rs(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,N=(s.height||10)/2;t=s.center.x-o,i=s.center.x+o,n=s.center.z-N,u=s.center.z+N}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 b=2;if(t+=b,i-=b,n+=b,u-=b,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 x=(t+i)/2,S=(n+u)/2,j=Math.min(i-x,u-S);for(let o=0;o<j;o+=gs*.5)for(let N=0;N<Math.PI*2;N+=Math.PI/8){const C=x+Math.cos(N)*o,E=S+Math.sin(N)*o,_={x:C,z:E};if(_.x=Math.max(t,Math.min(i,_.x)),_.z=Math.max(n,Math.min(u,_.z)),fs(_,l,s))return _}return{x,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 Ps(s){switch(s){case"scout":return"🔍";case"builder":return"🔨";case"debugger":return"🐛";case"architect":return"📐";case"warrior":return"⚔️";case"support":return"🛟";case"boss":return"👑";default:return"🤖"}}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 b=s.get(u);b&&(n.push(b),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,N)=>(N.lastActivity||0)-(o.lastActivity||0)),t=[],i=[],n=[],u=[],b=300*1e3,x=3600*1e3,S=1440*60*1e3;for(const o of l){const N=v-(o.lastActivity||0);N<b?t.push(o):N<x?i.push(o):N<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 b=!!l.taskLabel,x=!!t.taskLabel;return b!==x?b?-1:1:(t.lastActivity||0)-(l.lastActivity||0)}return l.name.localeCompare(t.name)})}const bs=ts.memo(({agent:s,isSelected:v,isKeyboardFocused:d=!1,onSelect:l,onDoubleClick:t,onChat:i,onFocus:n,onKill:u,onDragStart:b})=>{const{t:x}=ns(["dashboard","common"]),j=_s().has(s.id),o=vs(s.status),N=Ps(s.class),C=Zs(s),E=Bs(C),_=s.taskLabel?`📋 ${s.taskLabel}`:s.currentTask||s.lastAssignedTask,X=s.status==="idle"&&s.lastActivity>0,[,F]=ts.useState(0);return ts.useEffect(()=>{if(!X)return;const z=window.setInterval(()=>F(I=>I+1),15e3);return()=>window.clearInterval(z)},[X]),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:z=>{z.stopPropagation(),t()},onDragStart:z=>{b==null||b(s),z.dataTransfer.effectAllowed="move"},draggable:!0,title:x("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:[N," ",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--${E}`,style:{width:`${C}%`}})}),e.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${E}`,children:[C,"%"]})]})]}),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]}),X&&e.jsxs("span",{className:"dash-card__idle-time",style:{color:Es(s.lastActivity)},title:Ms(s.lastActivity),children:["⏱ ",Is(s.lastActivity)]})]}),_&&e.jsx("div",{className:"dash-card__row4",children:e.jsx("span",{className:"dash-card__task",children:_})}),e.jsxs("div",{className:"dash-card__actions",children:[i&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:z=>{z.stopPropagation(),i()},title:x("cards.openTerminal"),children:x("cards.chat")}),u&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:z=>{z.stopPropagation(),u()},title:x("cards.killAgent"),children:x("cards.stop")})]})]})});bs.displayName="AgentCard";const ps=({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)})})]})};ps.displayName="BuildingPills";function Ks({onSelectAgent:s,onFocusAgent:v,onKillAgent:d,onSelectBuilding:l,onOpenTerminal:t,onFocusZone:i}){const{t:n}=ns(["dashboard","common"]),u=$s(),b=Ds(),x=Ss(),S=Ls(),j=_s(),[o,N]=g.useState(""),[C,E]=g.useState("all"),[_,X]=g.useState("zone"),[F,z]=g.useState(new Set),[I,J]=g.useState(null),[ws,V]=g.useState(null),[G,Q]=g.useState(!1),[M,T]=g.useState(null),W=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,x):_==="status"?Gs(u,j):Hs(u),[u,x,_,j]),K=g.useMemo(()=>{const a=o.toLowerCase().trim(),h=rs.map(p=>({...p,agents:p.agents.filter(k=>{if(C==="working"){if(k.status!=="working"&&k.status!=="waiting"&&k.status!=="waiting_permission")return!1}else if(C==="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(p=>p.agents.length>0)},[rs,C,o,_]),O=g.useCallback(a=>a.area?`area:${a.area.id}`:`${_}:${a.label}`,[_]),$=g.useMemo(()=>{const a=[];return K.forEach(h=>{const p=O(h);if(F.has(p))return;const k=_==="status"?as(h.agents,{prioritizeRecentlyIdle:!0}):ms(h.agents);a.push(...k)}),a},[K,F,_,O]),xs=g.useCallback(a=>{z(h=>{const p=new Set(h);return p.has(a)?p.delete(a):p.add(a),p})},[]),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",V(h)},[]),ys=g.useCallback(()=>{V(null)},[]),Cs=g.useCallback(a=>{if(!I)return;if(a===null){const R=Y.getState(),r=Array.from(R.areas.values()).find(c=>c.assignedAgentIds.includes(I.id));r&&Y.unassignAgentFromArea(I.id,r.id),J(null),V(null);return}const h=x.get(a);if(!h)return;const p=Array.from(u.values()),k=Rs(h,p,I.position);Y.updateAgent({...I,position:{...I.position,x:k.x,z:k.z}}),Y.assignAgentToArea(I.id,a),J(null),V(null)},[I,x,u]);return g.useEffect(()=>{if($.length===0){Q(!1),T(null);return}G&&(!M||!$.some(a=>a.id===M))&&(T($[0].id),s==null||s($[0].id))},[$,G,M,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,p=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 w=f.dataset.agentId;if(!w)return null;const D=f.getBoundingClientRect();return{id:w,centerX:D.left+D.width/2,centerY:D.top+D.height/2,height:D.height}}).filter(f=>f!==null).sort((f,w)=>f.centerY-w.centerY||f.centerX-w.centerX);if(L.length===0)return r;const ss=L.reduce((f,w)=>f+w.height,0)/L.length,es=Math.max(18,ss*.6),A=[];for(const f of L){const w=A[A.length-1];if(!w){A.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}]);continue}const D=w.reduce((As,zs)=>As+zs.centerY,0)/w.length;Math.abs(f.centerY-D)<=es?w.push({id:f.id,centerX:f.centerX,centerY:f.centerY}):A.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}])}A.forEach(f=>f.sort((w,D)=>w.centerX-D.centerX));const H=A.findIndex(f=>f.some(w=>w.id===r));if(H===-1)return((cs=(os=A[0])==null?void 0:os[0])==null?void 0:cs.id)??r;const P=A[H],y=P.findIndex(f=>f.id===r);if(y===-1)return((ls=(ds=A[0])==null?void 0:ds[0])==null?void 0:ls.id)??r;if(c==="left")return((us=P[Math.max(0,y-1)])==null?void 0:us.id)??r;if(c==="right")return((hs=P[Math.min(P.length-1,y+1)])==null?void 0:hs.id)??r;const q=c==="up"?Math.max(0,H-1):Math.min(A.length-1,H+1),m=A[q],Z=P[y].centerX;let U=m[0],is=Math.abs(U.centerX-Z);for(const f of m){const w=Math.abs(f.centerX-Z);w<is&&(U=f,is=w)}return(U==null?void 0:U.id)??r},R=r=>{const c=Y.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"),A=c.find(m=>m.id==="dashboard-vim-up"),H=c.find(m=>m.id==="dashboard-vim-right"),P=c.find(m=>m.id==="open-terminal"),y=Y.getState();if(a(r.target))if(!y.terminalOpen&&h(r.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(B(r,L)){if($.length===0)return;r.preventDefault(),r.stopPropagation(),Q(!0),T(m=>{const Z=m&&$.some(U=>U.id===m)?m:$[0].id;return s==null||s(Z),window.setTimeout(()=>p(Z),0),Z});return}const q=B(r,ss)||r.key==="ArrowLeft"?"left":B(r,es)||r.key==="ArrowDown"?"down":B(r,A)||r.key==="ArrowUp"?"up":B(r,H)||r.key==="ArrowRight"?"right":null;if(q&&G&&M){r.preventDefault(),r.stopPropagation();const m=k(M,q);m!==M&&(T(m),s==null||s(m),window.setTimeout(()=>p(m),0));return}if(B(r,P)){if(y.terminalOpen)return;if(G&&M&&y.agents.has(M)){r.preventDefault(),t==null||t(M);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",R,!0),()=>document.removeEventListener("keydown",R,!0)},[$,G,M,t,s]),g.useEffect(()=>{const a=document.activeElement;a instanceof HTMLElement&&a.closest(".guake-terminal")&&!Y.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 ${C==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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 ${C==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("working"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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:()=>E("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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 ${C==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>E("error"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:W.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=>N(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:()=>X("zone"),children:n("grouping.byZone")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>X("status"),children:n("grouping.byStatus")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>X("activity"),children:n("grouping.byActivity")})]}),e.jsxs("div",{className:"dashboard-view__content",children:[K.map(a=>{const h=O(a),p=F.has(h),k=_==="status"?as(a.agents,{prioritizeRecentlyIdle:!0}):ms(a.agents),R=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)&&I?"dashboard-view__zone--drag-over":""}`,onDragOver:c=>js(c,a.area?a.area.id:null),onDragLeave:ys,onDrop:()=>Cs(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 ${p?"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}),R>0&&e.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",R," ",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")})]}),!p&&e.jsx("div",{className:"dashboard-view__zone-grid",children:k.map(c=>e.jsx(bs,{agent:c,isSelected:S.has(c.id),isKeyboardFocused:G&&M===c.id,onSelect:()=>{s==null||s(c.id),Q(!0),T(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)}),K.length===0&&e.jsx("div",{className:"dashboard-view__empty",children:o?n("noAgentsMatching",{search:o}):n("noAgentsSpawned")}),b.size>0&&e.jsx(ps,{buildings:b,onSelectBuilding:l})]})]})}export{Ks as DashboardView};